Pick a pillar to see how Centrely runs a multi-branch coaching business — from enrolment to receipt to row-level access.
One data-heavy internal tool, no separate API layer — every domain from enrolment to receipt in the same system.
Auto-generated student IDs, teacher profiles with subject specialisations and availability.
Flexible batches with weekly time slots, per-batch calendars and attendance tracking.
Regular and holiday-course enrolments, with multiple enrolments per subject supported.
Year/class and subject-level pricing, plus per-student recurring or one-off discounts.
Collection, enrolment, workload, utilisation, credit-due, overdue and transaction reports.
Printable report cards per batch, and database triggers that log every data change.
Hourly-rate pricing by year, class and study mode. A full invoice → allocation model with proportional discounts, grace authorisation, overdue flows — and a printable receipt at the end.
Branch admins are scoped to their own branch in middleware, inside every server action, and by Postgres Row Level Security — defence in depth, not a single gate.
Pages fetch data by calling server-action functions directly. Every action returns a uniform { success, data | error } contract, with auth and role checks inside — not just at the route.
Interactivity isolated to client components; pages stay thin and data-driven.
DB types generated from the live schema; forms and actions infer from one source.
Money math and access control unit-tested — pure logic factored out of actions.