A comprehensive, modular School Management System (SMS) designed to manage the full academic, administrative, and financial lifecycle of a school.
Learnova enables schools to digitize operations end-to-end, covering:
- Identity & Access: Multi-persona management (Admin, Staff, Student, Guardian).
- Academic Lifecycle: Sessions, Terms, Classes, Subjects, and Grading.
- Continuous Assessment: Exams, CA scores, and automated report cards.
- Finance: Fee configurations, multi-payment support, and automated ledgers.
- Multi-Tenancy: Highly isolated databases for every school on the platform.
- Framework: NestJS (v11)
- Database: PostgreSQL with TypeORM
- Asynchronous Processing: BullMQ (Redis)
- Messaging: EventEmitter2 for decoupled side-effects
- Identity: JWT with Refresh Tokens & Argon2 hashing
- File Storage: Cloudinary integration
- Node.js: v20+
- PostgreSQL: v15+
- Redis: v7+ (for queues and caching)
# Clone the repository
git clone <repo-url>
cd learnova
# Install dependencies
npm installCreate a .env file in the root directory based on .env.example.
Key variables include:
DATABASE_URL: Master DB connection stringREDIS_URL: Redis connection stringJWT_SECRET: Secret key for authenticationPAYSTACK_SECRET_KEY: For subscription processing
# Run Master DB migrations
npm run migration:run:master
# Seed global platform data (Plans, Roles, etc.)
npm run seed# Start HTTP Server (Process 1)
npm run start:dev
# Start BullMQ Worker (Process 2)
npm run start:worker- Creating a Tenant: Use the
/v1/tenantendpoints to provision a new school. - Tenant Migrations: To run migrations across all tenant databases:
npm run migrate:tenants
For a deep dive into the system patterns, folder structure, and multi-tenant logic, see the comprehensive ARCHITECTURE.md.