Module-specific widgets for the Health surfaces. Authoritative shared
components live in 00-shared/03 (AppCard, AppButton, AppBadge,
AppSkeleton, AppOfflineBanner, AppBanner, AppSnackbar); this file
defines only what the module adds on top. All (proposed).
Property Spec
Purpose One dependency's availability + optional detail line
Slots leading StatusDot, title (API, DB, Redis, Storage, Queues), status text (up/down), optional detail line (ping: PONG), optional trailing chip
States up (green), down (red), stale (amber + "stale" badge), loading (skeleton)
Semantics `label: ": <up
Usage S1 card grid; tap target only when down (avoid dead taps)
// lib/features/health/presentation/widgets/status_card.dart
StatusCard(
title: 'Redis',
status: ServiceStatus.up, // up | down | stale
detail: 'ping: PONG', // redis-health.indicator.ts:16
onTap: status == ServiceStatus.down ? _openIncident : null,
)
Property Spec
Purpose 10 dp filled circle; color + semantics, never color alone
Colors success green / error red / warning amber (design tokens 00-shared/02)
a11y `Semantics(label: 'up'
Property Spec
Purpose Shows BullMQ backlog - the only quantitative signal in the module
Data data.info.bullmq.pendingJobs - array [emails, in-app, webhook-deliver, dlq] (bullmq-health.indicator.ts:27-30)
Rendering emails 3 · in-app 0 · webhook-deliver 8 · dlq 1; dlq count highlighted amber when > 0 (dead-letter backlog is an ops smell)
Source note counts are summed per queue (Object.values(r).reduce, :27-29) - waiting/active/delayed/… collapsed; label must not claim per-state detail
Property Spec
Purpose "Last checked 12:04:31" - client timestamp of the last 200/503
Data no server field exists (non-goal, 01 §5) - local clock only
Stale rule > 60 s since last success → amber text + "stale" (14 QA-4)
Property Spec
Purpose One-glance verdict at top of S1
Content "All systems operational" / "N of 5 degraded — " / "All systems degraded"
Motion m-base slide swap; live region announce (00-shared/08)
Property Spec
Purpose Read-only failure detail from cached payload
Content failed key, monospace SelectableText of data.error.<key>, pendingJobs when bullmq, bare-payload notice for redis (redis-health.indicator.ts:17-22)
Motion bottom sheet per 00-shared/03
History/uptime charts - endpoint is stateless; no data source
(forward-looking).
Threshold config widgets - no server config surface (proposed) only.