feat(maestro): redesign web UI — token system, dark/light, a11y status #4

Merged
naps62-yolo merged 4 commits from feat/web-redesign into main 2026-06-15 19:42:08 +01:00
Collaborator

Full redesign of the Maestro web UI (catalog, attach, spawn) as an OKLCH design-system: monospace-first, cool-slate neutrals with a single committed signal-green for "alive". Dark default + full light theme via tokens (OS-following, persisted toggle).

Adds PRODUCT.md + DESIGN.md (impeccable design context). Color-independent status (a11y), AA contrast both themes, prefers-reduced-motion paths. DEV-only review fixtures (mock.ts) are tree-shaken from production.

Verified: typecheck + prod build clean; screenshotted every state in both themes at desktop + mobile.

🤖 Generated with Claude Code

Full redesign of the Maestro web UI (catalog, attach, spawn) as an OKLCH design-system: monospace-first, cool-slate neutrals with a single committed signal-green for "alive". Dark default + full light theme via tokens (OS-following, persisted toggle). Adds PRODUCT.md + DESIGN.md (impeccable design context). Color-independent status (a11y), AA contrast both themes, prefers-reduced-motion paths. DEV-only review fixtures (mock.ts) are tree-shaken from production. Verified: typecheck + prod build clean; screenshotted every state in both themes at desktop + mobile. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
naps62-yolo added 4 commits 2026-06-15 19:41:39 +01:00
Two web spawn QoL improvements plus the wire support they need:

- Command field now prefills `claude` instead of an empty box.
- Working directory prefills the selected daemon's home dir, updating on
  daemon change unless the user has typed their own value.

The daemon resolves its `$HOME` via `dirs::home_dir()` at startup and
advertises it end-to-end: a new `home_dir` field on `DaemonOutbound::Hello`
flows through the registry's `register` into `DaemonInfo` (served on
`/api/daemons` and `/api/events`). The field is `#[serde(default)]`, so older
daemons that omit it deserialize to an empty string — backward compatible, and
the UI simply skips prefill when it's empty.

Hierarchical `/`-separated labels in the web sidebar already worked
(web/src/catalog.ts); no change there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`cargo fmt --all -- --check` was already failing on `main` (CI run 149) due to
unformatted code in broker.rs and http.rs; e2e.rs carried the same drift. This
applies rustfmt to those three so the branch passes the fmt gate. No behavior
change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Capture the web UI's strategic register (product) and the visual design
system (OKLCH token palette, monospace-first type, dark+light theming) for
the impeccable workflow. Supersedes the transient .impeccable.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrite styles.css as an OKLCH design-system: cool-slate neutrals with a
single committed signal-green for "alive" (running status, primary action,
focus, selection). Monospace becomes the UI typeface; dark is default with a
full light theme via tokens, OS-following with a persisted header toggle.

- catalog: pulsing wordmark, status-bar tally (N sessions / M live) + daemon
  chips, color-independent session status (pulsing dot for running, hollow
  ring + "exited" badge for dead), reveal-on-hover kill, three teaching
  empty states.
- attach: state pill (live/closed/error), framed dark xterm w/ green cursor.
- spawn: bottom-sheet/dialog form, mono inputs with green focus rings.
- a11y: AA contrast both themes, visible focus, prefers-reduced-motion paths,
  status never color-only.
- theme.ts: dark/light toggle + persistence; mock.ts: DEV-only review fixture
  (?mock / ?mock&spawn / ?theme=), tree-shaken from production builds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
naps62-yolo merged commit 23594a5f00 into main 2026-06-15 19:42:08 +01:00
naps62-yolo deleted branch feat/web-redesign 2026-06-15 19:42:08 +01:00
This repo is archived. You cannot comment on pull requests.