Multi-tenant School ERP SaaS backend built with NestJS, TypeScript, Prisma, PostgreSQL, Redis, and BullMQ.
Classora is designed around schools as tenants, with optional multi-campus support and a single authentication model for Admin, Teacher, Student, Parent/Guardian, and Staff users. The API powers separate platform-admin and tenant-school frontend applications.
- Multi-tenant school and campus architecture
- Role-based access for admins, teachers, students, guardians, and staff
- Student Information System (SIS)
- Academic years, terms, classes, sections, subjects, and timetables
- Admissions and enquiry workflows
- Student and staff attendance
- Exams, papers, marks, and report cards
- Fee structures, invoices, payments, and ledger workflows
- Announcements, conversations, and messaging
- Invite-based onboarding with background processing
- Audit logging and request context
- JWT authentication, permissions, rate limiting, and security middleware
- Swagger/OpenAPI documentation
- Background jobs with BullMQ + Redis
| Area | Technology |
|---|---|
| Framework | NestJS 11 |
| Language | TypeScript |
| ORM | Prisma 7 |
| Database | PostgreSQL |
| Queue | BullMQ + Redis |
| Authentication | Passport + JWT |
| Validation | class-validator + class-transformer |
| API Docs | Swagger / OpenAPI |
| Security | Helmet, rate limiting, bcrypt, field encryption |
| Package Manager | pnpm |
apps/
api/
src/
auth/
bootstrap/
platform/
tenant/
academics/
admissions/
attendance/
comms/
exams/
finance/
sis/
invites/
notifications/
retention/
health/
swagger/
libs/
audit/
common/
config/
prisma/
security/
prisma/
schema.prisma
- Node.js 20+
- pnpm 10+
- PostgreSQL
- Redis
pnpm install
pnpm prisma:generateConfigure the required environment variables for PostgreSQL, Redis, authentication, and email, then run database migrations:
pnpm prisma:migrateStart the API in development mode:
pnpm start:devStart the background worker separately when queue processing is required:
pnpm start:worker:devpnpm build
pnpm lint
pnpm prisma:generate
pnpm prisma:migrate
pnpm seed
pnpm swagger:generateThe codebase follows a feature-module architecture. Tenant-facing domains are isolated into dedicated modules, while shared concerns such as security, configuration, audit logging, request context, and Prisma access live under libs/.
The backend is consumed by the companion classora-app repository, which contains the platform administration and tenant school portals.
Active project focused on a production-style, multi-tenant school ERP architecture.