Rework the VHS demo so the README screenshots actually entice a download.
Demo data / tooling:
- seed.yaml: real, reachable service URLs (detail now shows nextcloud.com,
not example.com); Auth Portal -> non-resolving home.arpa host so it reads
as a believable, reliably-DOWN monitor
- backfill: transient outages for Nextcloud/Jellyfin/Immich aligned with their
state changes (uptime % now matches); log timestamps derived from now so the
Logs view reads chronologically; real SSL warning; three probe nodes across
regions; seeded alert send health
- demo.tape: shorter warm-up, added Nodes + theme captures, ordered so every
shot stays inside the 60s node-freshness window (consistent probe count)
- vhs/crop: new tool to trim the empty terminal border around each screenshot
- setup.sh: build backfill up front for deterministic timing; UPTOP_DEMO=1
Supporting code:
- persist alert send health (new alert_health table, load on startup,
best-effort save on send) so health/last-sent survive restarts
- latency Min/Avg/Max ignore failed checks (no more "Min 0ms")
- correct "probe"/"probes" pluralization
- stable status dot instead of an animated spinner under UPTOP_DEMO
Propagate check failure reasons through the entire stack:
- Checker captures specific errors (DNS, timeout, HTTP status, SSL, etc.)
- Engine tracks LastError, StatusChangedAt, LastSuccessAt per monitor
- State transitions persisted to new state_changes table
- Detail panel shows error reason, HTTP code, state duration, last
success time, and last 5 state change events
- Monitor table shows inline error preview for DOWN services
- Alert messages include error reason
- Probe nodes forward error reasons to leader
15 files changed across models, checker, engine, store, TUI, and probes.