Behavior — dashboard overview
Gating
None. dashboard-overview-revamp was merged permanently ON on 2026-08-22
— the flag key, the overview-switch.tsx client gate, and the legacy layout
were all deleted. Every surface below is unconditional for every org.
Insights rule catalog
All rules run in parallel; zero-count rules drop out; the feed sorts
urgent → warning → info, then count desc. sample metas carry at most 3
entries for the secondary line (“who, not just how many”).
| Rule id | Audience | Fires when | Severity | Drilldown |
|---|---|---|---|---|
finance.cancellation_requests | owner/admin | subscriptions with cancelAtPeriodEnd | info | members |
finance.outstanding_debt | owner/admin | debtAmountInCents > 0 | warning | payments?tab=debt |
finance.failed_charges | owner/admin | failed charge/recurring txns, last 7 days | warning; urgent ≥5 | payments?tab=transactions |
finance.refunds_pending | owner/admin | open manual_refund tasks | warning | tasks |
members.at_risk_billing | owner/admin | past_due subscriptions | info <3 / warning / urgent ≥10 | members?status=past_due |
members.expiring_memberships | owner/admin | active subs, currentPeriodEnd ≤ 7 days out, not cancelAtPeriodEnd | info; warning ≥5 | members |
members.low_credits | owner/admin | active subs with 0–2 tracked credits and time left | info | members |
operations.tasks_overdue | staff | open tasks past due (org-TZ today) | warning; urgent ≥10 | tasks |
operations.sessions_missing_workout | staff | published sessions later today with no linked workout | warning | programs |
operations.waitlisted_bookings | staff | waitlisted bookings on upcoming published sessions | info | schedule |
engagement.checkin_missed | staff | members with check-ins unanswered ≥14 days | info / warning ≥5 / urgent ≥10 | members |
engagement.checkins_to_review | staff | answered, unreviewed check-in instances | info | forms (also expands inline) |
engagement.forms_missing | staff | members with pending unsigned compliance forms | info; warning ≥5 | forms |
engagement.birthdays | staff | active members with a birthday in the next 7 days (org-TZ month-day window, year-wrap safe) | info | members |
Role composition
| Owner / Admin | Coach | |
|---|---|---|
| Action Center | full catalog | staff subset only (finance/members rules are never evaluated for the coach’s request) |
| Pulse | collected Δ + tasks + leads + members/clients | tasks tile always; coaching org adds due-today / completion / needs-attention |
| Today | schedule panel and/or roster | same (upcoming-today admits coaches) |
| Add Member button | shown | hidden (can(memberships, manage) is false for coach under legacy matrix) |
Member role never reaches /dashboard/* (server redirect) and still 403s on
/insights and agent endpoints.
Ask Spotter
Each feed row’s button calls openWith(prompt, { insightId, insightCount }):
opens the agent sheet and sends one message. The context rides
pageContext.selection for that send only (registered/unregistered around
it), so later messages the user types don’t inherit stale insight ids.
Hidden automatically when rendered outside AgentProvider.
Today panel + roster semantics
GET /sessions/upcoming-today?scope=dayreturns the whole org-local day (limit 20); without the param it keeps the original from-now window (limit 5) for callers that omit it. The panel dims past sessions (“ended”) so a 9pm visit shows the day that happened, not a false “no classes today”.GET /assignments/coach-overviewroster includes only active members with an active enrollment in an active coaching-mode program — schedule-only members no longer appear as “quiet”.kpis.activeMembersCountis the scoped count (this is what the “active clients” tile shows).
Known limits
- No dismiss/snooze and no per-org thresholds (carried over from the insights gaps list; solve once in the Action Center when prioritized).
sessions_missing_workoutcounts only sessions still ahead of “now” — a bare session that already ran is not actionable.