The afternoon carried the cube’s physics all the way into Mosaic’s home (one way down). In the evening Selim let it go, and what replaced it reached production before the day was over.
stable and free at once
The physics had one weak spot, and the agent sent to break it had found it: the app still read what a thing is from how it was used. Selim decided that does not scale. He started a new study in cube screens instead, inspired by the databases of a notes app he knows well, done the cube way: a typed schema.
The idea is to have both halves of an old trade-off. A relational schema is stable, a document store is free, and the cube apps want both, grown slowly. “The schema is going to evolve together with the user,” he said. “We are not going to throw everything on the user.” A person starts with a title only, and brings in properties when they are ready: words, a number, a day, one of, several of, yes or no. The app offers what it knows and never guesses a type from what was typed.
The thread wrote down its understanding and eleven open questions first, and waited, as it was asked to: “come back to me with maybe understanding first.” Selim agreed with nearly all of it in one message and added the rule that shaped the page: add works like the context cube, a grid at every level, and “the only time the sheet is open is to just receive an input.” On how to build it he hesitated, then found the way himself: start from a copy of the shared package and change it in place, “which will already be the right step moving later our discovery into the angular library.”
One evening: a study, the shared package, Mosaic’s home, production, then Todarch, the backend, and two more types.
“we are there”
Selim played it and accepted it as the ground to stand on, with no way back. “This was all we were trying to get to finally. And we are there … it feels more stable. And also it feels flexible.”
Then everything moved at once. One thread put the schema into the shared package; at the same time another rebuilt Mosaic’s home on it, written against a copy behind one file and swapped for the real package the moment it was published. The physics home from the afternoon, two hours old, was deleted without regret. Selim wanted to feel it while working, not on a prototype: “just try to push things in the production so I can already see how it feels while I’m working with the applications.” From that ask to Mosaic opening on the schema in production took about fifteen minutes. The one snag was the gate that guards production: its cases described a home that production did not have yet, so they were rewritten for the schema home and played on the release build before the merge.
Todarch followed within the hour, the second app on the same ground. Every face Selim already had (states, rhythms, hands, needs) reads as a property, and the old top stays as a leaf of the lobby, so nothing was taken away. It was quick because Mosaic’s home was copied file for file: only one file, the one that translates Todarch’s data into the schema, was new. That is the point of the second app. The ground is shared; only the adapter changes.
rules, not a table
Two questions came next. Can a property’s type change later? Selim: “we don’t have a fixed number of types … some types will not be able to be converted to other ones, or vice versa.” He wanted the most practical answer for the person: hold a property, ask to change its type, and be offered what it can become. The study proposed rules instead of a hand-written table: each type declares its shape, four rules draw what converts to what, and what did not carry over is kept and found again on the way back. A conversion never invents an answer. He answered the eight questions with one word, “go”.
The second: a picture. Anlat wants a moment to carry a photo, so Selim asked for a type any app can put pictures into. Because every type is now one declaration, the picture type took its place among the conversions with no new rule. The app keeps the picture, the schema keeps where it is.
off the phone
Until then the schema lived only on the phone. The last thread of the day moved it into the backend’s shared kit, the one every app is built on: typed properties with their history, so a type change never quietly loses what was typed. Mid-build the picture thread asked for its type to be let through, and it was a one-line change, because the types are a list the app declares, not code.
the two that grew apart
Two apps were left outside all this: Cubes, the first cube app, and Anlat. Both built their own levels and tiles before the shared package had them, and both are falling behind it. Selim’s plan for them is to learn before moving: their own needs are what the shared ground must take in first. “First we will complete those things and then in the next step we will just get those two applications onboarded.”
Two threads studied one app each, side by side. Anlat’s screens map onto the schema’s path almost one to one; what it misses is in what the schema can say, not in its pieces: a colour on a value, a day on a name, a second kind of empty that means I don’t have to know this. Cubes found an irony: the backend’s shared kit was written from Cubes, names it in its own notes, and Cubes never took it back. The two threads swapped their lists of gaps within minutes and agreed which ones are written once.