Young's Mind
02 Architecture

Dashboard Page Design

⚠️ SUPERSEDED 2026-10-20 — consolidated into [fleet-dashboard-design-of-record-2026-10-20](fleet-dashboard-design-of-record-2026-10-20) (Nova). Kept for the record.

The page design here is carried forward almost intact — the route, the layout, the four panels, the visual language and the empty-state doctrine all stand. Three things changed in the design of record:

  1. §2's ASCII layout gains a board selector on the Goals & Tasks panel. Task truth is now the hermes kanban kernel and the boards are split per workstream (5 LAB + 3 Pulse); Hermes has no cross-board aggregate view, so a fleet-wide board projection is a build, not a config flip.
  2. §3.2's agent rows gain a third state. The Heart plane (8301/8302/8303) has no readable health surface — no /metrics, no /health, no agent-card route (measured 2026-10-20). Those rows must render grey unknown, never green, until a wire-observed health endpoint lands. This is the "no false green" rule applied to a real hole, not a hypothetical.
  3. §3.5's GO/ZEN window bars now show real numbers. The source was reported blocked; it is live. Measured 2026-10-20: rolling 40% / weekly 38% / monthly 48%.

§6's "P1 exit proof" is amended: it must also show a grey unknown where a value genuinely cannot be measured. A dashboard that renders everything green has proven nothing.

Dashboard page design — docs.youngle.au/dashboard (2026-10-16)

Young: "Design the dashboard page on docs.youngle.au." This is the page design on top of the approved plan (§5 collector spec + Sol's Stage 8 contract). Placement ruled by Young: a section of docs.youngle.au — same stack, same gate, zero new infra.

1. Route + shell

  • Route: /dashboard (single page, no sub-nav clutter; excluded from the docs/pulse aside — full-width layout).
  • Shell: same Docus/Nuxt app, same Young's Mind header + green brain favicon, auth gate as everything else. Footer note: "read-only view — data refreshes every 2–5 min".
  • Page title: Young's Mind — Fleet Dashboard.
  • Full-width sections, max-w-7xl, generous spacing, no sidebar (the aside must not compete with data panels).

2. Layout (top to bottom)

┌────────────────────────────────────────────────────────────┐
│ Header (site chrome, unchanged)                            │
├────────────────────────────────────────────────────────────┤
│ FLEET STATUS STRIP  —  generated 2 min ago · all sources   │
│ [🧠 pulse-laptop OK] [🖥 LAB OK] [🌐 prod OK] [🔒 tunnels   │
│  4/4] [⏱ oldest stale source: 3m]                          │
├──────────────────────┬─────────────────────────────────────┤
│ GOALS & TASKS        │  AGENTS HEALTH (11 rows)            │
│ (board projection)   │  name · endpoint · last exchange ·  │
│ column cards grouped │  skills · model · GO window bar     │
│ by owner             │  ▓▓▓▓▓▓░░░░ 72%                     │
│                      │  red rows on top (sort: worst first)│
├──────────────────────┴─────────────────────────────────────┤
│ SYSTEM HEALTH — 3 host cards (laptop / LAB / prod)         │
│ RAM bar · disk bar · services dots · tunnels dots ·        │
│ crons last-run · vault parity ✓/✗                          │
├────────────────────────────────────────────────────────────┤
│ BACKUPS + COST — gdrive archive latest · GO/ZEN windows    │
└────────────────────────────────────────────────────────────┘

Fleet status strip (the 5-second glance): host dots + tunnel count + "oldest stale source". Everything derived from status.json roots — if generated_at > 15 min old, the strip turns amber with "COLLECTOR STALE" (the dashboard never lies).

3. Panel design (per plan §5 schema)

3.1 Goals & Tasks (left card)

  • Board projection: columns in board order, cards as compact rows (title, owner chip). Owner chips use team colours (Brain violet, Heart green, Pulse blue).
  • Click a card → link through to the vault file on the site (the card's own vault path — it's already mirrored).
  • Live tasks sub-block under the board: in-flight A2A tasks with age; anything ≥300 s shows a red STUCK 6m12s badge (Stage 8.4's surface).

3.2 Agents Health (right card, the dense one)

  • One row per agent; sort: red first, then amber, then green (fleet triage at a glance).
  • Columns: name · endpoint dot (green=responds, red=refused) · last exchange (e.g. "4m", "3h") · skills count (0 = red "EMPTY") · model · GO window as a slim horizontal bar with % (amber ≥80, red ≥95).
  • Row click → expands a detail line: lane, A2A port, instrument (from the future registry), checked_at.
  • Nova/ace-down today would render exactly as designed: red rows pinned on top with "endpoint refused".

3.3 System Health (3 host cards)

  • Per host: RAM bar (amber ≥70, red ≥85), disk bar (free-based: amber <20G, red <10G), services as dots (click = name + state tooltip), tunnels as dots with names, crons "last OK: 12m ago" (per plan freshness rule), vault parity ✓ (or "LAB a1b2c3 / prod 9f8e7d — DRIFT").
  • prod card additionally shows solos-docs + pulse-site + docker container count.

3.4 Backups + Cost strip

  • gdrive archive latest date ("Sep-03 backup: 2d ago" style), age colouring per plan.
  • GO/ZEN window bars per model (percent only — never keys), Mira's thresholds.

4. Visual language

  • Matches the site: Nuxt UI tokens, dark-mode aware (site is dark by default), green brain accent for OK (#22c55e — the brand), amber #f59e0b, red #ef4444, muted zinc text.
  • Panels are cards (rounded-xl border bg-elevated) consistent with the homepage cards I shipped.
  • Bars: single-height (6px) rounded, fill = value, colour = rule from §5.3.
  • Typography: numbers in mono (tabular), labels in the site's sans.
  • Empty/absent states: never blank — "— (source error: …)" per the staleness doctrine.

5. Data plumbing

  • Fetch status.json (plan §5.1) server-side at render + client refresh every 2 min (fetch + swap, no reload).
  • stale flags drive the strip; checked_at drives the per-row ages.
  • No write actions anywhere. Read-only v1 (per plan).

6. Build + proof

  • Implementation: one Vue page component + tiny composable consuming status.json; Nova-style polish when she's free, but simple enough that I can ship v1.
  • Collector side (§5) must land first — page without honest data would be decoration.
  • P1 exit proof: Young opens /dashboard, sees all four panels with real values, kills a tunnel with me, and the strip goes red within one refresh cycle.

Open items (unchanged from plan)

  • Placement confirmed: /dashboard on docs.youngle.au ✓ (Young's ruling).
  • Sol: status.json contract ack (§5.1) — then collectors (me) → page (me/Nova) → P1.
Copyright © 2026