feat(ui): port v2 redesign bundle — AttentionHero, HostPanel, KpiStrip, ServiceTile v2#20
Merged
Merged
Conversation
…p, ServiceTile v2
Ports the design handoff bundle (handoff/reference/v2/) into the live frontend.
Markup structure and CSS class names are copied 1:1; component logic stays
wired to the existing API / polling architecture.
Tokens (frontend/src/styles/tokens.css)
- Deeper surface stack (bg-0/1, surface-1..4) and tighter borders.
- New: --grad-hero, --shadow-2, --shadow-pop, --ring-focus, --r-5,
--t-med / --t-slow easing curves.
- Type pills, reach pills, status dots match the design palette.
- Light theme + density-cozy variant + data-reduce-motion override retained.
Layout (frontend/src/styles/layout.css)
- Full rewrite to the design's 12-col `.dash-main` grid.
- New: `.attention` (320px + 1fr), `.host-panel` (8-col, 3-col inner),
`.quick-stats` (4-col, holds KpiStrip + Activity), `.kpi`, `.kpi-strip`,
`.activity-row` with dashed-bottom rows, `.svc-tile` with the new
4-row grid + status-color left-rule + status-tinted background.
- VM table sticky header + `.attn` / `.warn-row` row tinting.
- 1100px breakpoint collapses to 6-col, 700px to single-col with
drawer becoming full-screen.
Layout-extra (NEW frontend/src/styles/layout-extra.css)
- `.grid-12` / `.col-N` helpers (used inside Network/Backup/Cloudflare).
- KV-stack, mini-table, device-card, port-grid, vlan-list.
- Backup heatmap (`.day-grid`, `.day-cell.{ok,half,fail}`), job-table.
- DNS-list, settings-nav, settings-row, seg-control, native-style switch.
- Drawer: backdrop, slide-in, `.drawer-summary` 4-col, `.drawer-section`,
`.drawer-chart`, `.probe-history` heatmap, `.log-pre`, `.drawer-foot`.
Components
- Header — single-row global-status pill ("X kritisches Issue · Y degraded"),
segmented hdr-group (refresh / pause / snapshot), theme + settings icons,
removes the lastRefresh/StatusHistory crumb (moved into the Activity feed).
- AttentionHero (NEW) — 320px Health-Score card + alerts-list. Derives
health from svc/ram/cpu/cert/backup signals client-side. Each alert
is a button that opens the matching drawer.
- HostPanel (NEW) — 3-col grid: CPU (TrendBars), RAM (StackedBar by guest +
legend), Disk (TrendBars). Header carries online badge, temp, disks-passed.
- KpiStrip (NEW) — 4 KPIs: Container Up · Services Healthy · Avg Response
(with a sparkline of the worst offender) · SLA 30d.
- ServiceGrid — ServiceTileV2 markup: status-tinted bg, peach status-rail,
3-col stats (Response / p95·24h / Uptime·30d) with dashed dividers,
reach pills LEFT, "letzter Vorfall" RIGHT (was reversed).
- VMTable — switched section wrapper to `.vm-section` + `.dash-section-head`
+ `.vm-table-wrap` to pick up the new sticky-header + row-tinting styles.
- NetworkPanel / BackupsSection / CloudflareSection — section wrappers
renamed to `.network-section` / `.backup-section` / `.cloudflare-section`
+ `.dash-section-head` so they sit cleanly in the 12-col main grid.
- SettingsPage — 2-col flat layout (3+9 inside dash-main). Native
`<label class="switch">` instead of a custom button, `.settings-section-h`
with h2 + description, `.seg-control` with icons for Theme picker.
- AuditLog — re-skinned as Activity feed with `.activity-row` + level icons.
- Primitives — added Reach, TrendBars, StackedBar (segment list), AreaChart,
Ring; expanded the icon set (chevron, temp, wifi, router, shield, globe,
filter, copy, trash, arrow_up/down, zap, settings/gear alias).
App.tsx
- Overview now renders AttentionHero → HostPanel + quick-stats (KpiStrip +
Activity) → ServiceGrid, matching the design artboard.
- Server renders HostPanel + quick-stats + VMTable + ServiceGrid.
- Header gets servicesCritical + onOpenSettings + onToggleTheme; the old
refreshInterval prop moved into Settings.
Cleanup
- Drop OverviewCards.tsx (replaced by AttentionHero + HostPanel + KpiStrip).
- Drop StatusHistory.tsx (no longer in the header; activity feed covers it).
Verified: tsc -b · eslint · 31 vitest · vite build all green;
backend pytest (54) + ruff still green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ports the design handoff bundle (handoff/reference/v2/) into the live frontend.
Markup structure and CSS class names are copied 1:1; component logic stays
wired to the existing API / polling architecture.
Tokens (frontend/src/styles/tokens.css)
--t-med / --t-slow easing curves.
Layout (frontend/src/styles/layout.css)
.dash-maingrid..attention(320px + 1fr),.host-panel(8-col, 3-col inner),.quick-stats(4-col, holds KpiStrip + Activity),.kpi,.kpi-strip,.activity-rowwith dashed-bottom rows,.svc-tilewith the new4-row grid + status-color left-rule + status-tinted background.
.attn/.warn-rowrow tinting.drawer becoming full-screen.
Layout-extra (NEW frontend/src/styles/layout-extra.css)
.grid-12/.col-Nhelpers (used inside Network/Backup/Cloudflare)..day-grid,.day-cell.{ok,half,fail}), job-table..drawer-summary4-col,.drawer-section,.drawer-chart,.probe-historyheatmap,.log-pre,.drawer-foot.Components
segmented hdr-group (refresh / pause / snapshot), theme + settings icons,
removes the lastRefresh/StatusHistory crumb (moved into the Activity feed).
health from svc/ram/cpu/cert/backup signals client-side. Each alert
is a button that opens the matching drawer.
legend), Disk (TrendBars). Header carries online badge, temp, disks-passed.
(with a sparkline of the worst offender) · SLA 30d.
3-col stats (Response / p95·24h / Uptime·30d) with dashed dividers,
reach pills LEFT, "letzter Vorfall" RIGHT (was reversed).
.vm-section+.dash-section-head.vm-table-wrapto pick up the new sticky-header + row-tinting styles.renamed to
.network-section/.backup-section/.cloudflare-section.dash-section-headso they sit cleanly in the 12-col main grid.<label class="switch">instead of a custom button,.settings-section-hwith h2 + description,
.seg-controlwith icons for Theme picker..activity-row+ level icons.Ring; expanded the icon set (chevron, temp, wifi, router, shield, globe,
filter, copy, trash, arrow_up/down, zap, settings/gear alias).
App.tsx
Activity) → ServiceGrid, matching the design artboard.
refreshInterval prop moved into Settings.
Cleanup
Verified: tsc -b · eslint · 31 vitest · vite build all green;
backend pytest (54) + ruff still green.