The chat experience

What a turn looks and feels like from the seat — the composer you type, speak or show into, the bubbles a reply arrives in, the clock between them, and everything the room does with a picture now that it can see one.

Written 2026-08-23, against live v985. The turn below is what a person actually does: open the composer, say something (or show something), and read what comes back.

Design built

The composer — emoji · + · text · mic

Four slots, in that order (the owner's composer C). The + was a die until v961; it is the attach key every phone already teaches, and the sheet behind it holds Photo · Camera · Kits · Toys — the toys being the die's old eight instruments, moved one level down. The sheet is a real sheet: a grip you can pull, drag or flick it down to close, and stepping between its levels is a move rather than a repaint. On a wide screen it is a popover anchored above the +, re-placed after every level change.

Photos — the room can see v959–v974

Gap 5 waited two years for a vision API and shipped the week DeepSeek published one (deepseek-v4-flash-vision-exp, 2026-08-21). What a person sees:

partwhat it does
Sending+ → Photo opens the phone's own picker in one tap; Camera runs the camera in-app on Android (rear lens, shutter, flip). The bytes are EXIF-stripped to WEBP at two tiers, 1600 and 480.
The bubbleiMessage's grammar — the photo in its own bubble, the caption an ordinary text bubble beneath it, the sender's face and name once above both. Two width rules that never meet: a text bubble is its longest line capped at 88% of the stream; the photo bubble is the picture — ≤300px on a phone, 360 wide, never upscaled.
The viewerTap it and it grows out of the thumb, fits the screen, and every gesture is one transform: pinch to 4×, double-tap between 1× and 2.5× at the tap, drag down at 1× to dismiss — the picture follows your finger and the black thins as it goes. Wide: the wheel zooms at the cursor.
What the panel readsA text shadow written in the background as the photo lands, glued onto the transcript line — so search, Seen, the floor producer, translate and a model switch all keep working on a text layer. When you ask something pointed about a photo still on the table, one look-again call goes back to the picture for that answer.

⚠ The build is the sidecar plus a look-again, not native blocks alone: a 14-question test over two photos scored native 11 against sidecar 10 — a tie that fails differently, so the room keeps the portable text layer and buys the eyes only when a question needs them.

Time stamps v980 · v985

WeChat's rule: a centred, muted line above a message only when it lands 5+ minutes after the one before it (the first in view always). The wording widens with age — 14:05 · Yesterday 14:05 · Wednesday 14:05 · 3 Aug 14:05 · 3 Aug 2025 14:05. It is derived, never stored, and not selectable. Since v985 the clock is 24-hour everywhere, English included (midnight reads 00:05), and the stamp wears the chat row's own face rather than the capsules' mono.

The rest of the turn

partwhat it doeswhere the detail lives
Auto-titlethe room names itself from the first exchange; a human-only chat stores no titleCurrent functions
Bubblesmarkdown · KaTeX · highlight · sanitize; artifacts lift onto the scratch paperRendering & speed · Scratch paper
System bubblethe world narrating itself — joins, tools, rulings — in grey, never in a voiceThe world-event room
Reactions · feedbackemoji on a bubble; the per-turn thumb that feeds the floor producerFeedback widget
CostChat info ▸ Cost, by function, from the ledgerThe chat's cost panel
Languagethe panel follows the room; translate on divergenceRoom language

UI built

Every part above is live and named in the Style Guide; the photo bubble, the photo viewer and the + sheet each have their own card there, and the text sheet for copying a bubble's words is Text selection on touch.

Harness partly

The decode chain that keeps an off-spec reply from breaking a bubble is the harness. The photo path carries its own measured check — the 14-question native-vs-sidecar comparison above — and the smoketest pins the ledger's new leaves and its 19 call sites. Still unscored: render fidelity over a known artifact set, the title the room picks, and where the thumb lands.

Built from

-ish · design notes — chat › the chat experience · outline opened 2026-08-22