Designer × engineer backlog · living document

Aurora in the terminal. A CLI as beautiful as the brand.

boost ships a stunning Aurora living-glass web system — yet the CLI still renders in plain 8-color ANSI: no gradient, no glass, no motion. This roadmap closes that gap. Every item was found by driving the real CLI (boost, doctor, search, list) and grading its output against style/boost.css — then scored by category, complexity, impact and wow-factor. Zero new dependencies; NO_COLOR and non-TTY are always respected.

25Design opportunities
5Design tracks
0New dependencies
1:1Web ↔ CLI parity goal

The bridge — Aurora web tokens → 24-bit ANSI

Cyan#22d3ee · accent
Violet#a855f7 · brand
Pink#f472d0 · brand
Green#4ade80 · success
Yellow#facc15 · warn
Gradient--grad · headings

How to read this roadmap

Status
Proposed logged & triaged · Next queued · In progress being built · Shipped done.
Category
The discipline: color, layout, motion, typography, ux, system, tooling.
Complexity
S a focused change · M a module-sized effort · L a multi-file refactor.
Impact
How much it lifts the everyday experience: High every session · Med real polish · Low finishing touch.
Wow-factor
★ to ★★★★★ — how much delight the win buys relative to the effort spent.
Constraints
Every proposal stays zero-dependency, degrades on NO_COLOR / non-TTY, and targets Python ≥ 3.9.
Track
Impact

25 of 25 opportunities shown

Aurora Color Engine

Bring the brand palette and gradient into the terminal — with graceful fallbacks.

4 items
BOOST-D01Shipped

24-bit Aurora palette in output.py

The whole CLI runs on eight legacy SGR codes (REDCYAN) that don't match the brand at all — the front door paints section headers in generic [33m yellow. Add truecolor rgb() helpers mapping the exact web tokens: cyan #22d3ee, violet #a855f7, pink #f472d0, green #4ade80, yellow #facc15, plus --text/--text-3 greys. One map recolors everything.

colorComplexity SImpact High★★★★☆
core/output.py:15–38
BOOST-D02In progress

Terminal capability detection & graceful degradation

use_color() is binary — color or nothing. Add a tier ladder: truecolor (COLORTERM=truecolor/24bit) → 25616none, so the Aurora tokens snap to the nearest available color instead of vanishing. Keep the existing NO_COLOR honor, add a BOOST_COLOR=always/auto/never override, and treat TERM=dumb as none.

colorComplexity MImpact High★★★☆☆
core/output.py:26–38
BOOST-D03Shipped

Gradient text renderer — the signature move

The brand is the cyan→violet→pink --grad. Interpolate it per-character across a string so headings, the boost wordmark and hero counts shimmer in the terminal exactly like the web hero. A pure-Python lerp over the three stops; falls back to a single accent color when truecolor is unavailable.

colorComplexity MImpact Med★★★★★
core/output.py · new gradient()
BOOST-D04Proposed

Semantic color roles, not raw codes

Commands scatter out.c(x, out.YELLOW) and out.GREEN literally throughout the command layer, so a palette change means a repo-wide sweep. Introduce named roles — accent, brand, success, warn, danger, muted — resolved through the palette. Re-theming becomes a one-file edit, and intent reads clearly at every call site.

colorComplexity SImpact Med★★☆☆☆
core/output.py · commands/*.py

Structure & Layout

Width-aware output, glass panels, and results that never blow up the pane.

7 items
BOOST-D05Shipped

Fix search: truncate & width-clamp results

Today boost search is the worst screen in the app: a single result can dump a 2,000-character description with literal, unrendered \\n\\n escapes, while names are padded to a fixed 30 columns that waste half the row. Clamp each row to the live terminal width, collapse whitespace/escape artifacts, and ellipsize. This one fix turns a wall of noise into a scannable list.

layoutComplexity MImpact High★★★★★
commands/discovery.py · search
BOOST-D06Shipped

Glass-panel box primitives

The web system frames everything in rounded glass; the CLI frames nothing. Add rounded box-drawing primitives (╭─╮ │ ╰─╯) with dim --line borders and an optional title, mirroring the web .glass/.window surfaces. Reusable chrome for doctor, info, snapshot and success summaries.

layoutComplexity MImpact Med★★★★☆
core/output.py · new panel()
BOOST-D07Shipped

Relevance visualization in search

Results are "ranked by heuristic relevance" but the ranking is invisible — every row looks equal. Render a tiny gradient relevance bar or score glyph per hit and visually separate curated from GitHub-wide matches, so the eye lands on the best result first.

layoutComplexity MImpact Med★★★★☆
commands/discovery.py · search
BOOST-D08Proposed

Width-aware, right-aligned tables

table() is a naive ljust that ignores terminal width and left-aligns numeric columns. Make it width-aware (shrink the widest text column to fit), right-align counts with tabular figures, and add dim column separators — matching the web's font-variant-numeric: tabular-nums stat blocks.

layoutComplexity MImpact Med★★★☆☆
core/output.py:71–83
BOOST-D09Shipped

Terminal-window chrome for preview / cat

The web guide renders skills inside a titled window with traffic-light dots (.window .dots). Give preview/cat the same treatment: a titled frame with the skill name in the bar, so a rendered SKILL.md in the terminal matches the screenshots on the site.

layoutComplexity MImpact Med★★★★☆
commands/info.py · preview/cat
BOOST-D23Shipped

trending had the same overflow as search

Grading the un-touched commands surfaced a sibling of D05: boost trending piped raw catalog descriptions straight into table(), so a single 300-char description blew the table across the pane. Fixed by clipping each description through out.truncate() to the width left after the name/installs/last columns — the same helper the search fix introduced.

layoutComplexity SImpact High★★★★☆
commands/discovery.py · cmd_trending
BOOST-D24Proposed

Width-aware shared table()

out.table() backs 28 call sites, and several still overflow: taps pads the NAME column to the widest repo (K-Dense-AI/claude-scientific-skills = 44 cols) and then prints full URLs, so wide catalogs wrap. The durable fix is to make table() itself width-aware — shrink the widest text column to the terminal and right-align numeric columns — instead of truncating per-caller. Higher blast radius (28 callers, many exact-output tests), so it needs a careful, test-first pass.

layoutComplexity LImpact Med★★★★☆
core/output.py:table() · commands/taps.py

Motion & Feedback

Make it feel snappy — spinners, progress, and instant first paint.

4 items
BOOST-D10Next

Braille spinner for network waits

Network-bound commands — search (AI rank), tap clone, discover, index — currently freeze silently while they work. Add a lightweight braille-dot spinner (⠋⠙⠹⠸…) tinted with the Aurora accent, auto-suppressed on non-TTY and under NO_COLOR. The single biggest "feels fast" upgrade.

motionComplexity SImpact High★★★★☆
core/output.py · new spinner()
BOOST-D11Proposed

Determinate progress bars for batch ops

Multi-item commands — reindex, update, sync, snapshot restore — give no sense of "how far in." Add a gradient-filled progress bar (N/total + ETA) for anything looping over a known count, so long operations read as intentional rather than hung.

motionComplexity MImpact Med★★★★☆
core/output.py · new progress()
BOOST-D12Proposed

Stream search hits as they rank

search computes the full ranking, then prints the whole list at once — the terminal sits blank, then floods. Stream the top hits as they're scored so the first result paints almost immediately. Perceived latency drops even when total time is unchanged.

motionComplexity LImpact Med★★★☆☆
commands/discovery.py · search
BOOST-D13Shipped

Framed success summary with next step

ok() prints a lone green check, then the command just ends. After install/uninstall, close with a small framed confirmation — what changed, where it landed, and the obvious next step (boost info <skill>) — so a completed action feels finished, not dropped.

uxComplexity SImpact Low★★★☆☆
core/output.py:41 · commands/pkg.py

Command-by-command Polish

The screens users actually stare at — front door, doctor, list, info.

6 items
BOOST-D14Shipped

Front door: gradient wordmark + section glyphs

The boost home screen is the first thing everyone sees. Today the wordmark is plain bold and every group header is the same generic yellow. Paint the boost wordmark with the Aurora gradient and give each command group a colored bullet/glyph keyed to a brand hue — turning a flat list into a branded index.

commandsComplexity MImpact Med★★★★★
commands/info.py · help renderer
BOOST-D15Shipped

doctor as a health dashboard

doctor is an undifferentiated wall of green checks — no hierarchy, no headline. Reframe it as a panel with a verdict line (● Healthy in green / ● Attention in amber), grouped checks, dim sub-detail, and severity color so a problem actually stands out instead of hiding among the ✓s.

commandsComplexity MImpact Med★★★★☆
commands/quality.py · doctor
BOOST-D16Shipped

info skill identity card

info lists kv() pairs as flat dim labels. Promote it to a framed identity card: gradient skill name, status badges (installed / pinned / tap origin) styled like the web .badge pills, then the metadata — a real "detail view," not a key-value dump.

commandsComplexity MImpact Med★★★★☆
commands/info.py:177+
BOOST-D17Shipped

list polish — chips & aligned counts

list already uses a nice · agent separator; take it further. Color the agent names as small chips, right-align the count footer with tabular figures, and add a dim header rule so the table reads as a designed object rather than raw columns.

commandsComplexity SImpact Low★★★☆☆
commands/info.py:130–131
BOOST-D18Shipped

Consistent empty-states & hint styling

Empty and hint lines are ad-hoc — info's "no skills installed" hint is a hand-rolled DIM string. Standardize a single empty-state affordance (muted icon + one-line guidance + suggested command) and a single hint style, applied everywhere, so guidance always looks the same.

uxComplexity SImpact Low★★☆☆☆
commands/info.py:117–119 · core/output.py
BOOST-D25Shipped

Branded usage & error output

Grading confirmed this hits every command with a required argumentboost uninstall, boost snapshot and more all dump raw, unstyled argparse: a multi-line usage block with a bare error:, nothing like the branded top-level dispatch (which already routes through Error: + a difflib "did you mean"). The durable fix is a shared BoostArgumentParser subclass whose error()/usage route through the Aurora output layer, adopted across the ~50 per-command parsers — a broad, test-first sweep, so logged rather than rushed.

uxComplexity LImpact Med★★★☆☆
cliparse.py (BoostArgumentParser) · all 10 command files

Design System & Tooling

One source of truth for the brand — and the tools to show it off.

4 items
BOOST-D19Shipped

Resolve theme drift: style/ vs docs/style/

Two copies of boost.css have diverged: the root style/ uses a cyan→violet→pink gradient (--violet #a855f7), while docs/style/ uses an orange→pink→violet one (--violet #a78bfa). Same brand, two looks. Pick style/ as canonical and make docs/style/ a generated copy or symlink so the portfolio, roadmaps and CLI can't drift again.

systemComplexity SImpact Med★★★☆☆
style/boost.css · docs/style/boost.css
BOOST-D20In progress

Single source of design tokens (web ↔ CLI)

Done: the CLI palette is now single-sourced — one output.TOKENS dict holds every Aurora RGB triple, and the gradient, brand tints and badges all derive from it (previously cyan/violet/pink were re-typed across _AURORA and _GRAD_STOPS). A test locks the contract so a stray hex can't drift. Remaining: lift TOKENS into a shared tokens.json and generate both the CSS custom properties and this map from it, so the site and the terminal move in lockstep (the repo's "generate, never hand-edit" pattern, cf. build_registries.py).

systemComplexity MImpact Med★★★★☆
core/output.py TOKENS · style/boost.css · future build_tokens.py
BOOST-D21Shipped

Scripted demo recording (VHS / asciinema)

There's a docs/demo.tape + demo.gif, but no repeatable way to re-record once the aesthetic changes — and tmux isn't even installed in the dev box. Add a make demo that drives a scripted session (VHS tape or asciinema, optionally split-pane via tmux) and refreshes the GIF, so the README and portfolio always show the current look.

toolingComplexity MImpact Med★★★★☆
docs/demo.tape · Makefile
BOOST-D22Shipped

README / portfolio terminal parity

The web .window mock shows an idealized boost session — gradient prompt, clean checks — that the real CLI doesn't yet produce. Once D01–D15 land, update the mock (and README code blocks) to mirror the true output 1:1, so every screenshot is honest and the brand reads identically across web, README and terminal.

systemComplexity SImpact Med★★★★☆
docs/index.html · README.md · style/demo.html
No opportunities match these filters.

A living document — each loop iteration drives the real CLI, grades it against style/boost.css, and files what it finds here. Sibling to the Engineering Roadmap. Everything stays zero-dependency and honors NO_COLOR & non-TTY.