Assemble the lead record instead of holding it behind a spinner

Featurekamo-internal
Shipped
August 21, 2026 at 5:52 AM UTC
Author
kamo
Commit
a923bc1

The Details tab's loading state was one card of fourteen grey MUI pulse rows — a shape the pane never takes, on a per-element clock, replaced wholesale by a layout it looks nothing like. And it waited on `loading.insights`: a record that had already arrived sat behind placeholders until an unrelated communications count came back. The pane now shows its own layout while it waits — four stat tiles, the callbacks strip, two rows of three cards, at the real widths — under one band of brand light crossing the page on a diagonal, and the real cards hand off from their ghosts on that same order, so the record resolves along the path the light travelled. Only the record gates the pane; the counts and the task list resolve inside their own tiles, and the market's panes extend the entrance order when its configuration lands. The masthead joins the same sequence: a name-shaped ghost instead of the word "Loading", and a three-segment rail on its bottom edge — record, activity, configuration — where a segment fills white the moment its fetch lands. Real arrivals, not a timer. It is absolutely positioned so the tab underline stays flush with the content it labels. A skeleton that never resolves is the worst end state a loading design has, so a failed record now gives way to what happened and a Retry that re-runs the opening fetches, on the Details and Mortgage tabs both. The `kmail-*` choreography in globals.css becomes the house `kload-*` family — same rules, same reduced-motion contract, plus `kload-settle` for the handoff and the rail's segments. /messages, /notes and /network move over unchanged. No new i18n keys.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing