V8 Central — Product & Technical Spec
  1. Docs
  2. Modules
  3. Dashboard

#Dashboard

Dashboard = a high-level overview of the current organization. It answers "is everything OK, what am I paying, what changed", and links to the detail pages. It's never the place to manage things.

#Widgets

WidgetDataSource of truthStatus
Total serversCount + online/offline splitCentral link records + last health checkMissing
Active sitesSum of applications across serversOSS GET /applications per server (cached)Missing (expensive)
Team membersActive + pendingCentral membersMissing
Current planName, cycle, status, renewalCentral subscriptionMissing
UsageServers used/allowed, apps used/allowedCentral + OSS countsMissing
Server statusPer server: health, version, last seenOSS GET /health (no auth) + an authenticated pingOSS API per server · aggregate Missing
CPU / RAM / diskPer server, current %OSS GET /server/metrics/liveOSS API per server
TrafficNetwork in/out rateOSS metrics/live.network (a rate between two polls, first poll = 0)OSS API
HealthServers needing attention (offline, disk > 90%, reboot required, update available)OSS facts/metrics (+ OSS admin dashboard)OSS API · rules Assumption
Billing / spendingBalance, this month's spend, last paymentCentral billingMissing
Spending trendSpend per day/monthCentral wallet history / chargesMissing
Recent activityLast 10 audit entries, "View all" → Audit LogCentral auditMissing

The V7 dashboard data (/servers/{id}/summary, serverLoad, resourceUsage, usage) was per server and agent-based. It isn't reusable. V7 only

#Charts

  • Recharts, data from the API only. No fake or sample production data: when a series is empty, show the empty state.
  • 24-hour history per server: OSS GET /server/metrics/history (5-minute points: cpu, memory, swap, disk, load, net, disk I/O). OSS API A cross-server history doesn't exist Missing.
  • Date filters: 24 h (OSS only keeps 24 h, so longer ranges would need Central to store samples, which conflicts with R5 Open question). Spending: 7 d / 30 d / 12 m from billing data.
  • Tooltips with exact value + time (useFormatter). Units from the API (*_human fields exist in OSS).
  • Dark mode: chart colours from CSS variables (shadcn chart tokens), so they follow the theme.
  • Responsive: charts fill their card, and the legend moves below on small screens.

#States

StateBehaviour
LoadingSkeleton per card. Each card loads on its own (<Suspense> per block)
Empty, no serversHero "Connect your first server" + "Create a server" (if a provider is connected)
Partial failureOne server unreachable → its tile says "Unreachable · retry". Others still render
ErrorCard-level error with Retry. Never a full-page error for one widget
No permissionWidget hidden (e.g. spend without Billing view)
Expired subscriptionTop banner "Subscription expired, server actions are blocked" + Renew

#Layout (concept)

Mobile: one column in the same order, KPI tiles 2 per row.

ServerAvatar V8 Central · prepared by central-app-2 (Pair 2 frontend) for Bhavik Jethwa · nothing in this spec is implemented yet · Built 2026-10-03 12:35 UTC