A list without a tab
An app without tabs still has to let you see what it has kept. Rather than add a navigation bar, the conversation screen became the middle page of a carousel of three: memos and tasks on one side, the calendar on the other, each one a swipe away. In the same movement, the card stopped being described by the model and is now assembled by the server.
A contradiction, stated plainly
The founding stance fits in one sentence: no tabs, no lists to scroll through. You speak, memory files things away, and what needs to be seen comes back at the right moment. That is what makes the main screen readable by anyone, with no instructions.
Except that one use keeps coming back, and it is perfectly legitimate: wanting to look. To see what is still sitting in your tasks, to reread a memo dictated last week, to check that something really was kept. Refusing that use in the name of a principle turns a stance into stubbornness.
So the question was never whether to give access to a list. It was how to do it without reintroducing everything we had spent months taking out.
The answer was already on screen
The calendar already lived to the right of the conversation screen, reached by a swipe. The gesture existed, it was understood, and it cost not a single pixel of permanent interface. There was no reason to invent another one.
So the conversation screen moved from first position to second, at the center of a three page carousel. On the left, a Memos and Tasks panel. In the middle, the conversation, still what you see when the app opens. On the right, the calendar, unchanged.
That shift looks trivial. It is not, because it changes the resting position of the whole screen: the middle page has to be showing at startup, the gesture has to snap to three positions instead of two, and the resistance at both ends has to stay noticeable so you feel the edge without crossing it. A carousel that starts in the wrong place, or that slides one page too far, immediately feels like an app that moved on its own.
The panel itself is deliberately plain: a title, two internal tabs to switch between memos and tasks, a search field that filters on content, and a list ordered by last mention. That last point matters more than it looks. The order is not the creation date, it is the last time the thing was brought up. What is alive rises, what has faded sinks, exactly as in a layered memory.
Touching an item does not open a new screen. The tap borrows the path the calendar already uses, and opens the card at the right line. One navigation logic, not two that will drift apart in six months.
The card that never arrived
The same piece of work settled a deeper defect, with no apparent connection to any of this.
Until then, when the model wanted to display a card, it described the contents itself. It announced the card, and supplied the data to paint in the same breath. That is convenient to write, and it is a bad idea: it assumes the model remembers exactly what was just recorded, in the right format, leaving nothing out. When it got that wrong, the app dutifully displayed an empty card. The defect was not in the display. It was in having handed the data to the one who is not its source.
So the call changed nature. The model no longer describes anything: it points. It gives a neuron identifier, a list of identifiers, or a filter. The server goes and fetches the real data, and assembles what will be shown. The empty card is no longer fixed, it has become impossible, which is the only form of fix that holds up over time.
Two adjustments complete the picture. The card now opens by itself after a memo, a task, a reminder or an event is created, because those are the cases where you want to see the result. It does not open for facts and contacts, which stay silent memory, nor when a piece of information merely reinforces something already known. And the opening waits three tenths of a second: when a single sentence creates several neurons in a row, that delay keeps the screen from flickering as openings stack up.
What we take away
Two rules, out of the same piece of work.
A stance is defended with a gesture, not with a refusal. We did not want tabs: we added none, and the need is served all the same. The constraint produced a better answer than a tab would have, because it takes up no room at all until you ask for it.
And the data on screen has to come from where it is stored, never from whoever is telling you about it. That holds for the model as much as for everything else: between memory and screen, the shortest path is the one that crosses the fewest middlemen.
