Port the full redesigned UI mockup (the "capa3" structure layer) on top of the theme engine already merged (#130/#131).
Context
The mockup redesign was validated in a local demo (DEMO=1). This adds the structural layer that was missing beyond the theme skins:
- Backend (
internal/httpapi/system.go): /api/version now exposes (best-effort, omitted if unreadable) load1/5/15 (/proc/loadavg), mem_total_bytes/mem_avail_bytes (/proc/meminfo), arc_hit_pct/arc_size_bytes (/proc/spl/kstat/zfs/arcstats).
- Sidebar: system stats block (UPTIME, LOAD 1/5/15, daemon+system RAM with mini-bar, ARC HIT), refreshed every 30s, degrades gracefully.
- Badge LIVE with pulsing dot next to the clock.
- Full-width pool cards (fixed the
!important forcing 2 columns at >=1500px): status LED header, mono topology, big used/total+%, 10px segbar, mono metadata, vdev rows with LED/role/temp, hairline-separated actions row.
- Dashboard: LEDs on KPI cards; two-column grid with disk temps (LED+mini-bar) and event log (mono timestamp + message); alerts full-width on top.
- Datasets: LED column (green/amber locked-encryption/cyan zvol), tree glyphs (
├─/└─), mountpoint column.
- Disks / Tasks / Snapshots: status LEDs in rows, jobs, timers, history, snapshot groups.
- Theme overrides per family (square LEDs + glow in Phosphor/Brutalist, hard borders in Brutalist).
Acceptance criteria
go build ./... and go test ./... pass.
npm run build (web) passes.
- Demo works in DEMO=1 mode ("Enter demo mode").
- Classic theme stays pixel-for-pixel unchanged.
- No data/preference migration.
Notes
- Boot CRT and ticker are intentionally NOT included (kept out of production).
- Classic remains optional; Modern stays default.
Port the full redesigned UI mockup (the "capa3" structure layer) on top of the theme engine already merged (#130/#131).
Context
The mockup redesign was validated in a local demo (DEMO=1). This adds the structural layer that was missing beyond the theme skins:
internal/httpapi/system.go):/api/versionnow exposes (best-effort, omitted if unreadable)load1/5/15(/proc/loadavg),mem_total_bytes/mem_avail_bytes(/proc/meminfo),arc_hit_pct/arc_size_bytes(/proc/spl/kstat/zfs/arcstats).!importantforcing 2 columns at >=1500px): status LED header, mono topology, big used/total+%, 10px segbar, mono metadata, vdev rows with LED/role/temp, hairline-separated actions row.├─/└─), mountpoint column.Acceptance criteria
go build ./...andgo test ./...pass.npm run build(web) passes.Notes