Skip to content

Architecture overview

Who this is for: Developers
What you'll achieve: Orient yourself in the monorepo and request flow

Modular monolith

mermaid
flowchart TB
  Browser[Browser tenant portal] --> Web[apps/web Next.js]
  Web --> TRPC[tRPC routers]
  TRPC --> Domain[packages/domain]
  TRPC --> DB[packages/db Drizzle]
  Web --> SSE[SSE /api/sse]
  Worker[apps/worker BullMQ] --> Domain
  Worker --> DB
Package / appResponsibility
apps/webUI, tRPC API, auth sessions, exports, SSE
apps/workerOptional background jobs
packages/domainScheduling engine, RBAC, analytics pure logic
packages/dbSchema, migrations, seed
packages/emailsEmail templates

Tenancy

School portals live at /t/{subdomain}/…. Platform operator UI is at /operator.

Auth

Custom session cookie (schoolrota_session) with bcrypt passwords. SSO IdP configs can be stored per tenant; activation is a production step. See SSO setup.

Canonical engineering spec

For domain model, invariants, and roadmap detail, read docs/SYSTEM_PLAN.md in the repository. This docs site does not replace that document — it summarises for day-to-day onboarding.

SchoolRota documentation — every slot covered, every day.