The dashboard gained a real-time Stats overlay and a top-bar menu that surfaces Helper & Status from every view; a brand-new status board shipped as its own independently-deployed app so it can monitor the dashboard from the outside; and connection type became settable per user, not just per device or globally. Dashboard builds 262 → 270; status build 1; iOS builds 155 → 158; Supabase migration 189.
What changed
Per-user connection type (dashboard 263 / supabase 189 / ios 155)
- Connection type now resolves through a three-level cascade — device → user → global. A new
profiles.connection_typecolumn plus adevice_owner_connection_typehelper feed an effective-settings RPC, so a device with no explicit override inherits its owner's default before falling back to the fleet-wide setting. - The dashboard exposes "Your default connection type" (added in Settings in 263, then moved to the Account page in build 270) and the Users admin can set any user's default (build 272).
- iOS refetches effective settings on a
profilesUPDATE so a per-user connection-type change propagates live to the device. - MCP gained
set_user_connection_type(tool count → 61).
Live Stats overlay (dashboard 265 → 269)
- A live Stats overlay (265) shows the connected fleet at a glance: a fleet connection-type breakdown (266), an online-device roster with dedicated country cards (268), and Device/Proxy countries grouped under connection types (269). All real-time, no polling gaps.
Standalone status board (status build 1)
status.busymate.netis now its own component (web/status) — its own Next.js + Turbopack + shadcn app, its own systemd unit (busymate-status, :3940), its own deploy. A status page embedded in the dashboard would go down with the dashboard; this one monitors every service (dashboard, Supabase, MCP, proxy-server, docs, and itself) from the outside.- It reports overall operational / degraded / down, host load + memory pressure + boot uptime, and per-service up/latency/HTTP/build + systemd service uptime (read-only
systemctl show). Public, auto-refreshing every 7s.
Shared top-bar menu (dashboard 264 / 267)
- Helper and Status links moved into a shared
TopBarMenu, so they appear in the settings ⋯ menu (264) and in the main capture view too (267).
iOS polish (ios 156 / 158)
- The update prompt became an inline banner above the readiness card instead of a modal sheet (156).
- The auth gate now keys off session presence, killing the "Not signed in" flash on logout / cold start; Legal links open in a Settings webview; the update banner is App-Store-safe (158).
Where it's documented
- Connection-type cascade and the effective-settings RPC: Supabase backend — How-to and iOS connection modes.
- The live status board: Status board — How-to and Status board architecture.
- Stats and the top-bar menu: the Dashboard — How-to.