Phase 24: Design System v2 — analytics-style UI (0.30.0)

- New /api/dashboard/funnel (5-stage stack health, 30s TTL cache) and
  /api/dashboard/summary (containers, daily uptime jsonl, ops activity)
- Token system (tokens.css + Tailwind sp-* aliases); legacy bg/card/accent
  remapped onto the tokens; Schibsted Grotesk bundled via fontsource
- TopNav pill navigation + AppShell replace the sidebar layout (off-canvas
  drawer below 1024px); central display-weight page titles
- Dashboard redesign: FunnelChart (gradient/hatch SVG waterfall), container
  count card with per-host bars + Insights chip, UptimeChart, OpsGrid,
  AiPromptBar; 30/7-day range selector; host sections retained below
- Stacks page honours ?q= / ?filter= deep links + new status-filter select

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
menzelj
2026-06-10 10:54:06 +00:00
co-authored by Claude Fable 5
parent 6464e0677c
commit 34cb215266
37 changed files with 1551 additions and 222 deletions
+34 -1
View File
@@ -12,7 +12,8 @@ as intuitive as Dockge, as capable as Portainer for Compose workflows.
> resource usage) + Phase 16 (Volumes page, multi-host) + Phase 17 (Multi-host
> dashboard) + Phase 18 (Image prune) + Phase 19 (Compose validate & diff) +
> Phase 20 (Container management) + Phase 21 (Container terminal) + Phase 22
> (Auto-update) + Phase 23 (Secrets & configs) complete.
> (Auto-update) + Phase 23 (Secrets & configs) + Phase 24 (Design System v2)
> complete.
## What works today (Phase 1)
@@ -155,6 +156,31 @@ as intuitive as Dockge, as capable as Portainer for Compose workflows.
container or connect any container on the host (`POST /api/networks/{id}/connect`
/ `/disconnect`).
### Phase 24 — Design System v2 (analytics-style UI)
- **New shell**: the sidebar is gone — a fixed 60px top bar carries a pill
navigation (active route = dark pill), the logo mark, a version badge, a
remote-host online indicator, theme toggle and an avatar menu. Narrow
screens get an off-canvas drawer.
- **Design tokens** (`frontend/src/styles/tokens.css`): one CSS-variable set
for surfaces, borders, text tiers, brand colours, radii and type scales,
with class-based dark-mode overrides. Existing Tailwind aliases
(`bg`/`card`/`accent`) are remapped onto the tokens so all pages reskin
consistently. Typeface: Schibsted Grotesk (bundled, offline-friendly).
- **Stack Health funnel** — the dashboard centrepiece. Five stages
(`discovered → running → healthy → updated → monitored`) from
`GET /api/dashboard/funnel` (30 s server cache, `?refresh=true` to bust).
SVG waterfall with alternating gradient / diagonal-hatch bars, value chips
and hover conversion/drop-off tooltips.
- **Summary widgets** from `GET /api/dashboard/summary`: containers-running
card with per-host breakdown and an "Insights" chip (healthy-rate %), a
30-day uptime line chart (daily samples appended to `DATA_DIR/uptime.jsonl`),
and an ops contribution grid from audit-log activity with the peak weekday.
A 30/7-day range selector slices both series client-side.
- **Explore prompt bar** under the funnel: typed queries or `/running`,
`/stopped`, `/attention` tags deep-link to the Stacks page, which now
honours `?q=` and `?filter=` (plus a new status-filter select).
### Phase 23 — Secrets & configs (compose file-based)
- A **Secrets** tab on the stack detail page manages per-stack Docker
@@ -482,6 +508,13 @@ POST /api/agents/{id}/stacks (create a stack on a remote h
POST /api/templates/{id}/instantiate {agent_id} (instantiate a template onto a remote host)
```
### Phase 24 endpoints
```
GET /api/dashboard/funnel[?refresh=true] (stack-health funnel, 30s TTL cache)
GET /api/dashboard/summary (containers, uptime series, ops activity)
```
## Security notes
- The Docker socket is only ever touched by the backend process; it is never