Skip to content

Design system

Both surfaces - the web dashboard and the TUI - share one editorial design system: a portable, cross-domain language that makes an interface feel like a well-set page, not a dashboard bolted onto a screen. This page is the short version; the full, tokenized spec lives in design.md in the repo root.

Ink on warm paperText and the brand mark are ink (#17171a, never pure black) on a warm off-white (#faf8f4)
One accent - manuscript redExactly one chromatic accent, #a3341f (the editor’s red pen), drives links, focus, marks, and status. Brass is a rare warm counterpoint; everything else is paper and hairlines
FrauncesA real serif carries both display and long-form reading; UI sans and mono play a supporting role. Type is the interface
The pilcrow ¶The brand mark - a pilcrow on an ink tile
The Caret ▍The single loader: a blinking caret in the accent color
Flat & squareNo card-in-card; group with whitespace and a single hairline. Content surfaces are square (page-like); only controls and overlays carry a small radius
WCAG-AAEvery color pair is AA-verified, not assumed; color is never the sole signal, and focus is always visible
  • Reading measure. Prose surfaces constrain the line length to an optimal ~66 characters and center it - the same measure across web, terminal, and print.
  • One primitive per pattern. Each interactive pattern (button, field, overlay, toast, loader) exists exactly once; forking a primitive is treated as a regression.
  • Tokens over literals. Colors and strokes are derived from ink + accent through layered tokens (primitive → semantic → component), so the system ports to CSS, Tailwind, JS/TS, Figma, a terminal palette, or print without rewrites.

Themes recolor, never restructure. A named theme swaps the palette behind the semantic tokens; the layout, spacing, and type are unchanged. The web dashboard exposes System / Light / Dark plus the shared named palettes; the TUI’s default skin is “ink & brass” (the editorial theme - manuscript red for status, gold + brass on parchment), with the same named palettes selectable via /theme.

Every token, state, and component contract - the complete color scale, dark-mode overrides, the type ramp, motion, accessibility ratios, and per-platform mappings - is in design.md at the repo root. It’s versioned alongside the code, and Writing Agent is its reference implementation.