Skip to content

Redesign command center UI to match Squadron design system#28

Merged
mlund01 merged 7 commits into
mainfrom
claude/stoic-varahamihira-ae0962
Apr 22, 2026
Merged

Redesign command center UI to match Squadron design system#28
mlund01 merged 7 commits into
mainfrom
claude/stoic-varahamihira-ae0962

Conversation

@mlund01
Copy link
Copy Markdown
Owner

@mlund01 mlund01 commented Apr 22, 2026

Summary

  • Ports the "quiet" mission-control aesthetic from the Squadron design bundle (per the Mission List redesign handoff) across every list/detail surface, while keeping DEFCON 5 fully intact.
  • Rebuilds the surface palette around the design tokens and retunes DEFCON 5 to match the docs site's exact green-on-black CRT palette.
  • Introduces a shared page shell (title + mono submeta, inline stats strip, filter chips, search) and a quiet card family for Missions, Agents, and Skills.

What changed

Theme / palette (index.css)

  • Dark: --background #0a0c10, --sidebar #11141a, --card #161a22, hover #1d222c, hairline rgba(255,255,255,0.06).
  • Light: warm off-white #f6f6f4 page, pure-white cards, rgba(15,20,30,0.08) hairlines.
  • DEFCON 5 re-aligned with the docs site: bg #0a1f0a / elevated #0d2a0d / inset #081808, fg #4ade80 / bright #86efac / dim #6b8f71, lime #a3e635 primary, green hairline border, CRT scanline overlay, sharp green scrollbars, brighter headings.

Shared shell (Missions, Agents, Skills, Tools, Variables, Costs)

  • 22px semi-bold title with mono {instance} · N … submeta.
  • Inline mono stats strip replacing the 4-KPI card row, with accent-tinted counters for live/failed states.
  • Filter chip row + ⌕ Search … box as a single baseline row.
  • Full-width responsive grid (auto-fill, min 320px) or hairline-bordered table wrapped in rounded-sm bg-card.

New card components

  • mission-card.tsx — status-light header (animated ping when running), mono name, description, quiet hairline DAG preview, meta row with N tasks · N agents · inputs · schedule · last-run-ago.
  • agent-card.tsx / skill-card.tsx — mid-tone mini-graph (colored pills without the neon glow) with mono meta: model · tools · skills · scope for agents; tools · usage · scope for skills.

MiniGraph (mini-graph.tsx)

  • New tone prop: loud (existing glowing pills), mid (pills without glow), quiet (small neutral dots + hairline edges with optional single accent node). Default stays loud so existing callers are untouched.
  • Quiet nodes bumped to r=3 so they read at the same visual weight as mid-tone pills.

Sidebar (AppSidebar.tsx)

  • Stacked-chevron Squadron mark + mono brand.
  • Compact workspace picker: status dot + instance name + mono v-tag + reload + theme toggle.
  • Hairline-stroke 14×14 nav icons (custom SVG), mono item counts.
  • Live footer strip: animated status dot + {N} running · {N} queued pulled from getMissionHistory.

Costs (CostsPage.tsx)

  • Stats collapsed into the same mono strip; period selector moves to filter chips on the right.
  • Sections wrapped in a shared Panel with mono uppercase headers; horizontal bars thinned to h-1.5; recent-runs table restyled.

Folders / Config

  • FileBrowserPage.tsx — mono breadcrumbs with chevron separators, live dir/file counts, table in hairline card with mono uppercase column headers.
  • ConfigPage.tsx — title + mono path on a single baseline row with toolbar buttons, amber "unsaved" chip, tighter mono file tree, dir groups in uppercase.
  • Fixed "header scrolls when markdown preview is tall" bug by making SidebarInset a h-svh overflow-y-auto scroll container in AppLayout.tsx and pinning ConfigPage to h-full overflow-hidden so each sub-pane scrolls internally.

Notes for reviewer

  • The three themes are exercised only via CSS custom properties — no hardcoded hex outside the palette definitions (except the few accent tones that already had DEFCON 5 remaps in index.css). Tailwind color remaps for DEFCON 5 are untouched.
  • EntityCard and PageStats are left in place — still used by nothing specific to the redesigned pages. Future cleanup could remove them.
  • Lint/tsc -b both pass cleanly on all touched files. Remaining lint noise in SkillDetail.tsx / ConfigPage.tsx is pre-existing (not introduced here).

Test plan

  • Light / Dark / DEFCON 5 look right on Missions, Agents, Skills, Tools, Variables, Costs, Folders, Config.
  • Stats strip counters update live (Missions running, Variables overridden, etc.).
  • Filter chips + search filter each list correctly.
  • Mission cards show live status-light ping while running; AgentCard / SkillCard keep entity colors in mini-graph.
  • Sidebar workspace picker, reload, theme toggle, and footer running/queued counts all work.
  • ConfigPage header stays fixed while editing tall files and with markdown preview open; file tree and editor scroll independently.
  • Folders page: browser picker, breadcrumb navigation, download button, and file list sort all work.

mlund01 added 7 commits April 21, 2026 21:36
Ports the "quiet" mission-control aesthetic from the Squadron design bundle
across every list/detail page while keeping DEFCON 5 intact:

- Surface palette rebuilt around the design tokens (dark #0a0c10/#11141a/
  #161a22/#1d222c with hairline borders; warm off-white + pure-white in light).
  DEFCON 5 retuned to the docs site's exact green-on-black CRT palette plus
  scanline overlay and sharp green scrollbars.
- New shared page shell: 22px title + mono submeta, inline stats strip with
  filter chips and search, full-width grid/table. Applied to Missions, Agents,
  Skills, Tools, Variables, Costs.
- New quiet card family (MissionCard, AgentCard, SkillCard) plus a 'mid' tone
  on MiniGraph that preserves node colors without neon glow.
- Sidebar rebuilt with a stacked-chevron Squadron mark, compact workspace
  picker (status dot + version), hairline-stroke nav icons, and a live footer
  strip (running/queued counts).
- Folders and Config pages restyled with mono uppercase headers, hairline
  dividers, and a fixed header + internal scroll (via h-svh on SidebarInset).
- ConfigPage: file tree now uses bg-background (matches main surface
  instead of the sidebar tone), items and directory labels densified,
  selected row gets solid bg-accent + ring for much clearer active state.
- MissionHistory: ported to the shared shell (mono submeta, inline
  stats strip with filter chips + search), new StatusPill with
  tone-tinted dot and pulsing-blue for running.
- vite.config.ts: strict port 8087, proxy /api and /ws to the
  commander on :8086 so HMR works alongside the Go backend.
- MissionsPage: new Configured/History view toggle driven by ?view= param.
  Drops the standalone sidebar History entry and redirects /history to
  /missions?view=history. Removes the Failed filter chip. Poll tightened
  to 3s and runMission invalidates the history query immediately for
  snappy visual feedback.
- MissionCard: no more status dot on the header; status text is now
  "N running" (primary, bold) or "last run X ago" or "never run".
  Running cards get a living primary-tinted breathing halo via new
  .sqd-card-live keyframe.
- MiniGraph quiet tone: mint palette (emerald-400/70 dots, -500/35 edges)
  with a breathing emphasis ring via new .sqd-node-ring keyframe.
- AppSidebar: History nav entry removed, unused IconHistory deleted.
  Footer history poll bumped to 3s so the running/queued counter matches.
- /api/info now returns { baseUrl, version }. Version is overridable via
  -ldflags "-X commander/internal/api.Version=..." and falls back to the
  first 7 chars of the VCS revision (or "dev" when no build info is
  available).
- AppSidebar surfaces it above the running/queued line as a small mono
  "COMMAND CENTER · vX" section tag.
- Rewrote the sidebar's instance Select: custom trigger content (no
  SelectValue) so long hostnames truncate with ellipsis, and the
  duplicate status dot inside SelectItem options is gone.
- MissionDetail's "N runs" button links to
  /missions?view=history&q=<missionName> so clicking it opens the history
  tab pre-filtered to that mission's runs. MissionsPage seeds the search
  input from ?q= on mount and clears it when the view toggle flips.
- Missions stats strip: dropped the "failed" counter per design feedback.
- Add web/src/components/ui-shell.tsx with FilterChip, SearchBox,
  InlineStat (one accent map replaces the 5 per-page variants), and Dot.
  Migrate Missions, Agents, Skills, Tools, Variables, Costs, and the
  three card files to use them — dedupes ~200 LOC of copy-paste.
- Add .sqd-card-grid utility in index.css, replacing inline
  gridTemplateColumns style on 3 pages.
- Move formatTimeAgo + formatSchedule into lib/mission-utils.tsx
  alongside formatTime/formatDuration.
- Delete orphaned entity-card.tsx and page-stats.tsx (no remaining
  imports after the redesign).
- Memoize buildMissionMiniGraph / buildAgentMiniGraph /
  buildSkillMiniGraph inside each page's enriched useMemo so dagre
  layout no longer recomputes on every search-box keystroke.
- Cache commanderVersion() behind sync.Once; debug.ReadBuildInfo
  now runs once per process instead of per /api/info request.
- Add refetchIntervalInBackground: false to the instance/instances
  polls on MissionsPage, AgentsPage, SkillsPage, and AppSidebar
  (matches the already-quieted history poll).
- Drop vestigial emphasizeId from MissionCard's graph prop (callsite
  never populated it) and strip narration comments from MissionsPage.
- AppSidebar: replace the eight hand-rolled nav SVGs with their lucide
  counterparts (Rocket, Bot, Sparkles, Puzzle, DollarSign, KeyRound,
  FileCode, FolderOpen), all at size-3.5 with strokeWidth=1.75.
- Brand: swap the hand-rolled stacked-chevron mark for the provided
  squadron-logo.svg (served from web/public/). Header row is now
  centered (justify-center) with the logo and wordmark tightly aligned
  via leading-none.
- Load Black Ops One, JetBrains Mono, and Inter from Google Fonts in
  index.html (previously the CSS referenced JBM without loading it).
- New .sqd-brand utility class applies Black Ops One at 0.08em tracking;
  the Squadron wordmark picks it up in uppercase caps.
@mlund01 mlund01 merged commit c617dc9 into main Apr 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant