Same Database. Still Not an Ecosystem.
I thought this part would feel more satisfying.
Three products.
One Supabase project.
One authentication system.
One shared backend.
Finally.
Then I opened Strata.
There was almost nothing there.
That was the moment I learned a distinction I should probably have understood earlier:
Sharing infrastructure is not the same as sharing meaning.
Everything was technically in the same place
Verbal pointed to the same backend.
IPMATHics pointed to the same backend.
Strata pointed to the same backend.
The account was real.
The shared schema existed.
The learner identity existed.
From a high level, this looked connected.
But Strata does not become useful because the apps share a database URL.
It becomes useful when trustworthy learning evidence actually reaches the model.
That part was still incomplete.
The subject apps still had older paths
Verbal had years of product history by this project's standards.
IPMATHics inherited some ideas and developed others.
Both had local state and existing persistence logic.
Strata, meanwhile, was designed around a cleaner shared evidence contract.
Attempts.
Sessions.
Reviews.
Mocks.
Interventions.
Outcomes.
Those concepts existed.
The problem was that existing subject flows were not automatically emitting them in the exact form Strata expected.
The apps were connected to the same house.
They were not speaking the same language inside it.
This is where "integration" became annoyingly specific
I used to say:
"We need to integrate the apps."
That phrase is nearly useless.
What exactly needs to happen?
A learner opens IPMATHics.
Starts a practice session.
Answers five questions.
Changes two answers.
Gets one wrong.
Marks one question for review.
Finishes the session.
What should Strata eventually know?
The final answers?
The first answers?
The timing?
The fact that one answer changed?
The topic?
The evidence quality?
Whether the session was timed?
Whether the question had been seen before?
Whether the device was offline?
Whether the event was actually accepted by the backend?
That is integration.
Not a shared navbar.
One database can still contain separate realities
This was the weird part.
The subject app could say:
"You completed a session."
The shared evidence layer could say:
"I have no trusted record of that session."
Both could be technically correct.
The learner experienced something locally.
The canonical platform had not accepted it yet.
If Strata reads only the canonical platform, it should not pretend otherwise.
That is exactly what happened.
I briefly wanted to "fix" Strata
When an analytics product shows nothing, the instinct is obvious.
Populate it.
Read from the old tables.
Use local history.
Infer from whatever data exists.
Make the dashboard look alive.
That would have made the screenshot better.
It would have made the system worse.
Strata exists specifically to make stronger claims than a normal progress page.
That means its evidence standard should be higher.
If the source is not trustworthy enough, the correct output may be:
I don't know yet.
Adapters became the real integration layer
The subject products already know how they work.
I did not want to rewrite every learner flow just to satisfy Strata.
The cleaner solution is translation.
A subject action happens.
An adapter converts it into the shared contract.
The backend accepts the canonical event.
Strata reads from that shared evidence.
That preserves product-specific behaviour while creating one learner history.
It also makes the boundary explicit.
Verbal does not need to become Strata.
IPMATHics does not need to become Strata.
They need to produce evidence Strata can trust.
The same problem exists in reverse
Strata can recommend work.
That recommendation is not useful if it ends at:
"Practise algebra."
The system should eventually be able to send the learner into the correct IPMATHics session.
Or the correct Verbal repair set.
Then when the learner completes it, the result should come back.
Recommendation.
Action.
Outcome.
That loop is what turns analytics into orchestration.
We were not fully there yet.
One backend actually made the gaps easier to see
This is the part I appreciate.
Before the shared foundation, missing integration could be blamed on architecture.
Of course Strata had no data.
The apps were not even on the same platform.
Once the backend existed, the excuse disappeared.
Now every missing event was visible as a missing event.
Every stale path was visible as a stale path.
Every local-only state became obvious.
The cleaner foundation made the remaining mess easier to locate.
Same account was necessary, not sufficient
This became the hierarchy:
Same email?
Weak.
Same auth user?
Better.
Same backend?
Better.
Same canonical evidence?
Now we are getting somewhere.
Same recommendations and outcomes flowing across products?
That is the ecosystem.
The important thing was not the number of shared technical components.
It was whether the learner's story remained continuous.
The word "ecosystem" got stricter
I still use it.
But now I mean something harder.
An ecosystem is not three products with related branding.
It is not three products using the same database.
It is not even three products using the same account.
It is one learner creating evidence in specialised products.
That evidence becomes one history.
A shared model interprets it.
The model sends useful action back.
The action produces new evidence.
The system learns again.
That loop is the product.
The failure was useful because it was visible
Strata opening with almost nothing was frustrating.
It was also honest.
It told me:
The infrastructure exists.
The integration does not yet deserve to be called finished.
That is a much better failure than a dashboard full of numbers derived from whatever table happened to be easiest to query.
Same database. Still not an ecosystem.
That sentence sounds negative.
I actually think it marks progress.
The project had become mature enough that I could tell the difference.
A month earlier, I might have celebrated the shared backend and moved on.
Now the standard is higher.
The three products have to agree about reality.
Until they do, I do not care how many green connection indicators I can put in the header.