Skip to content

Customer health ​

Who this is for: Platform operators
What you'll achieve: See which schools have set up, which are actually using the portal, and who needs a nudge before they cancel

Paid schools that never finish setup, or go live and then go quiet, are the ones most likely to churn. The operator console surfaces that without opening each portal.

Where to look ​

  1. Overview has a customer health card: paid-not-live, dormant, actively used, and gone live counts.
  2. Schools & flags lists every school with one status chip, last sign-in, and last published day. Use Needs attention, Unused, Stuck, Setting up, Live, or Dormant. Filters stay in the URL so you can share a view.
  3. Open a school for the finer picture: what they need next, sign-in counts, staff seats, published days, assistant messages, open help, and the missing setup steps.

What the badges mean ​

Setup stage ​

Taken from the same wizard state the school sees.

StageWhat it means
Not startedThey have a tenant and have not begun setup
Setting upSome required steps are done
Ready to go liveRequired setup is done; they have not published / gone live
LiveThey completed go-live

Usage ​

StatusWhat it means
Never signed inNo auth.login or auth.login_sso audit event
In setupSomeone signed in, but the school is not live
Actively usedLive, signed in within 14 days, and published or rebuilt a rota within 21 days
Signed in, no recent rotaLive and signing in, but the board has gone stale
DormantLive, but nobody has signed in for 21 days

Needs attention ​

These are the rows to work first.

FlagTriggerSuggested action
CancellingStripe cancel at period end, or already cancelledRead the cancel survey on the school page. Offer to unblock them if the reason is product.
Paid, unusedPaid plan, not live, created 3 or more days agoEmail or call. Offer a setup session or impersonate to see where they stopped.
Trial unusedTrial, still not started, 7 or more days oldSame as unused paid, with less urgency.
Stuck in setupIn progress or ready to go live for 7 or more daysCheck the remaining wizard steps and inbox.
DormantLive, no recent sign-inConfirm they still run a weekly board. A quiet live school is often a cancellation in waiting.

How we measure it ​

The chip (Paid unused, Stuck in setup) is only the bucket. The row and school page add the next wizard step, a one-line need, and an offer so you know whether to resend a login, walk through staff upload, sit on first publish, or reply in Inbox.

No extra tracking tables. The list aggregates:

  • tenants.setupState and setupProgress
  • Active people rows for seat use
  • day_instances.publishedAt for last publish and published day count
  • Audit actions auth.login, auth.login_sso, rota.publish, rota.publish_week, rota.recompute, rota.prepare_week, setup.go_live, and staff.import
  • Active portal users, open or waiting help requests, and assistant message count

GET /api/operator/tenants includes a health object on each school. Existing tenant fields are unchanged.

What this is not ​

School-facing chat does not answer operator health questions. Billing changes stay in Stripe and Admin → Billing. This view is for the platform team only.

SchoolRota documentation. Every slot covered, every day.