aftertrace

Design

How Aftertrace looks and behaves, and why. The attention budget in design-principles.md still governs every screen; this document adds the information architecture and the principles each screen is checked against.

Information architecture

A left sidebar with three labelled groups, so the eight destinations read as three jobs instead of a flat list.

Group Pages The job
(top) Home What is happening, and what happened this week
Observe Sessions, Apps Look at what ran
Improve Findings, Cost Decide what to change
Explore Query, Recap Ask anything; see the week
(bottom) Connect, Settings Add a source; tune the instrument

A trace opens from anywhere: a session row, a finding's evidence chip, a live lane, an Ask answer, ⌘K. The sidebar collapses to icons below 1100px and to a top bar on phones.

Norman's principles, applied

Each principle names the concrete decisions it drives. A design change that breaks one of these needs a reason.

Discoverability (visibility). You can tell what is possible by looking.

Feedback. Every action and every state change is acknowledged, at the speed it happened.

Affordances and signifiers. Things that act look like they act.

Mapping. Controls sit next to what they change, and the layout mirrors the thing it shows.

Constraints. It is hard to do the wrong thing.

Consistency. Same thing, same look, everywhere.

The gulf of evaluation on a trace. The first waterfall answered "what happened?" with 146 identical rows on a linear axis; a 30-minute question to the user was a green sliver nobody could find, and the headline called it "waiting on approvals". The Story view closes that gulf: the headline says what happened ("Claude waited 29m 38s for your answer. The work itself took 12m 54s."), the time bar says where it went in words, the outcome comes before the steps, and the wait is a card with the questions and answers. Steps use Claude's own narration (the assistant_response text on each model call) when content capture is on, and a summary of the work ("Read 4 files · Ran 2 commands") when it is off.

Conceptual model. The user's mental model is: sources send sessions; a session has turns; a turn is a trace of spans. Apps send calls grouped by operation. Findings point at spans. Every screen uses these words and no others.

Emotional design

Visceral: a calm instrument. Neutral surfaces, one accent, hairline borders, generous line height in prose, tight density in tables. Numbers are mono and right-aligned. Dark mode is designed, not inverted. Motion is limited to the live pulse, panel slides and skeletons, and respects prefers-reduced-motion.

Behavioral: fast and never a dead end. Pages render from cache instantly and refresh in place. Every list row and every number opens what is behind it. Keyboard first: ⌘K, g h for home, j/k in lists, [ ] between turns, Esc closes. Errors say what to do next.

Reflective: it makes you proud of your setup. The recap is a receipt you would post: hours of agent work, the plan paying for itself, the minutes a fix gave back. The savings ledger turns findings into a running total. Fun numbers always come with a baseline and an action, never as vanity.

Visual system

Token Value
UI text 13px Inter, 1.45 line height
Labels 11px, uppercase, 0.05em tracking, faint
Headline (story line) 22–26px, 600, tight tracking
Numbers tabular mono, 12–13px
Radius 8px cards, 6px controls, pills fully rounded
Borders 1px hairline; shadow only on floating layers (popover, toast, palette)
Accent one blue for selection and focus; status colours never decorate
Density table rows 32px; waterfall rows 32px; inspector padding 16px

Patterns

Edit this page on GitHub