Resolved: light

Dashboards

Overview pages: a leading stat band over a responsive widget grid and stacked sections. MonitoringDashboardPage is the full template; AnalyticsDashboardPage and CommandCenterPage are configured presets of the keystone DashboardPage.

All three compose the @phauna/ds DashboardLayout — a StatGrid summary atop an auto-fit grid of WidgetCards — and keep the chart islands in caller-passed slots so the recipe shell stays server-safe.

DashboardPage

The keystone overview shell rendered directly: a StatGrid summary band over an auto-fit WidgetCard grid with a trailing section. Monitoring / Analytics / CommandCenter below are configured presets of it.

Overview

This month
Rescuers
2,140+4.2%
last 30 days
Active fosters
318
placements open
Pending intakes
27-9
vs last week
WhatsApp groups
312
synced live
vs targetSignups this month
New rescuers
184
of 200 target
Top regionsCoverage by region
  • Bay Area612
  • Los Angeles488
  • Sacramento264
  • San Diego201
RosterStatus mix
Active 1,840Pending 184Paused 116
<DashboardPage> — TitleBar + status · StatGrid summary band · auto-fit WidgetCard grid · trailing activity section
summary / widgets
summary is the leading stat band (a StatGrid of StatTiles); widgets[] fill the responsive auto-fit grid (any live chart islands ride here).
minWidth / children
minWidth sets the widget column min (default 280px); children are free-form sections below the grid.
first / footer
first toggles the leading-page top spacing; footer is the page footer slot. Server-safe — every interactive piece is a caller-passed slot.

MonitoringDashboardPage

A live ops board: a stat band (uptime, queue depth, error rate, p95) over a grid of status/chart widgets, with free-form sections (alert feed / log tail) below.

System monitoring

All systems go
Uptime
99.98%+0.02
last 30 days
Sync queue
0
jobs pending
Error rate
0.2%-0.1
vs yesterday
API p95
180ms
response time
Last 7 daysSync runs / day
Last 7 days · %Error rate
LiveWhatsApp groups synced
Groups
312+4
pulled this cycle

Recent alerts

  1. 4m ago
    Cron sync OK
  2. 12m ago
    WhatsApp pull OK
  3. 1h ago
    NVDA form sync OK · 18 new rescuers
  4. 3h ago
    Nightly backup completed
<MonitoringDashboardPage> — TitleBar · stat band · live-chart widget grid · alert-feed Timeline
summary / widgets
summary is the leading stat band (a StatGrid of StatTiles); widgets[] are the live cards in the responsive auto-fit grid (ds/charts live HERE).
minWidth / children
minWidth sets the widget column min (default 280px); children are free-form sections below the grid (alert feed / log tail). Omit summary+widgets+children → STUB placeholder.
footer
Footer slot. Server-safe — the chart islands are caller-passed.

AnalyticsDashboardPage

This is DashboardPage configured as an analytics dashboard — summary is a StatGrid of KPI StatTiles, widgets are recharts WidgetCards (Line / Bar / Donut).

tsx
import { DashboardPage } from "@/components/ds/recipes";
import { StatGrid, StatTile, WidgetCard } from "@savethemarshalldogs/design-system";
import { LineChart, BarChart, DonutChart } from "@/components/ds/charts";

<DashboardPage
  title="Analytics"
  summary={
    <StatGrid>
      <StatTile label="Rescuers" value="2,140" delta="+4.2%" deltaTone="up" spark={spark} />
      {/* ... */}
    </StatGrid>
  }
  widgets={[
    <WidgetCard title="Signups / month"><LineChart data={signups} series={[{ key: "count" }]} x="month" /></WidgetCard>,
    <WidgetCard title="By region"><BarChart data={byRegion} series={[{ key: "n" }]} x="region" /></WidgetCard>,
    <WidgetCard title="Status mix"><DonutChart data={mix} nameKey="status" valueKey="n" /></WidgetCard>,
  ]}
/>

CommandCenterPage

This is DashboardPage configured as a live ops command center — accented StatGrid of real-time counts, monitoring WidgetCards, and a CommandBar quick-action strip in the body.

tsx
import { DashboardPage } from "@/components/ds/recipes";
import { StatGrid, StatTile, WidgetCard, Badge } from "@savethemarshalldogs/design-system";
import { CommandBar } from "@/components/ds/surface";

<DashboardPage
  title="Command center"
  status={<Badge tone="good">All systems go</Badge>}
  summary={<StatGrid>{liveTiles}</StatGrid>}
  widgets={[
    <WidgetCard title="Sync queue">{/* ... */}</WidgetCard>,
    <WidgetCard title="Recent alerts">{/* ... */}</WidgetCard>,
  ]}
>
  <CommandBar search={searchInput} controls={scopeSelects} actions={quickActions} />
</DashboardPage>