A comprehensive School Management System for ICSE and CBSE boards with support for Teachers, Principal, Finance Department, Parents, and Students.
- Multi-Role Authentication: Student, Teacher, Parent, Principal, Finance, Admin
- Attendance Management: Daily tracking, reports, auto-notifications to parents
- Meeting System: 1:1 and group meetings with real-time scheduling
- Results Management:
- Quarterly, Half-yearly, Annual exams
- Special handling for 10th & 12th board exams (ICSE/CBSE)
- Digital report cards and performance analytics
- Finance Module: Fee management, payment tracking, automated invoicing
- Real-time Updates: WebSocket support for live notifications
- Document Management: Automated report cards and certificates generation
- CBSE (Central Board of Secondary Education)
- ICSE (Indian Certificate of Secondary Education)
- React 18 with TypeScript
- Vite - Fast build tool
- Tailwind CSS - Utility-first styling
- React Query - Data fetching & caching
- Zustand - State management
- React Router v6 - Routing
- React Hook Form + Zod - Form validation
- Axios - HTTP client
- Socket.io Client - Real-time communication
- Recharts - Data visualization
- NestJS - Progressive Node.js framework
- Prisma ORM - Type-safe database access
- PostgreSQL - Primary database (Neon)
- Passport.js + JWT - Authentication
- class-validator - Request validation
- Socket.io - WebSocket server
- Frontend: Vercel
- Backend: Render
- Database: Neon PostgreSQL (Serverless)
- File Storage: AWS S3 or Cloudinary
school-saas/
βββ frontend/ # React + TypeScript application
β βββ src/
β β βββ components/ # Reusable React components
β β βββ pages/ # Page components
β β βββ layouts/ # Layout components
β β βββ services/ # API service layer
β β βββ store/ # Zustand stores
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Third-party configurations
β β βββ types/ # TypeScript type definitions
β β βββ utils/ # Utility functions
β β βββ App.tsx # Main App component
β βββ package.json
β
βββ backend/ # NestJS API server
β βββ src/
β β βββ modules/ # Feature modules
β β β βββ auth/ # Authentication module
β β β βββ users/ # User management
β β β βββ students/ # Student module
β β β βββ teachers/ # Teacher module
β β β βββ attendance/# Attendance tracking
β β β βββ meetings/ # Meeting management
β β β βββ results/ # Exam results
β β β βββ finance/ # Financial management
β β βββ common/ # Shared resources
β β βββ config/ # Configuration
β β βββ prisma/ # Prisma service
β β βββ main.ts # Application entry point
β βββ prisma/
β β βββ schema.prisma # Database schema
β β βββ migrations/ # Database migrations
β βββ package.json
β
βββ README.md
- Node.js 18+
- pnpm (recommended) or npm
- PostgreSQL or Neon account
- Create account at neon.tech
- Create a new project
- Copy the connection string
- Update
backend/.env:
DATABASE_URL="postgresql://user:password@hostname/dbname?sslmode=require"- Install PostgreSQL
- Create database:
createdb schooldb- Update
backend/.env:
DATABASE_URL="postgresql://postgres:password@localhost:5432/schooldb"cd backend
# Install dependencies
pnpm install
# Generate Prisma Client
pnpm prisma generate
# Run migrations (creates all tables in Neon)
pnpm prisma migrate dev --name init
# Seed database with sample data (recommended for testing)
pnpm prisma db seed
# Start development server
pnpm run start:devBackend will run on http://localhost:3000/api
cd frontend
# Install dependencies
pnpm install
# Start development server
pnpm devFrontend will run on http://localhost:5173
- User - Base user table with role-based access
- Profile - User profile information
- Role - STUDENT, TEACHER, PRINCIPAL, FINANCE, PARENT, ADMIN
- School - School information (ICSE/CBSE)
- Class - Grade and section (1A, 10B, 12C, etc.)
- Subject - Subject master data
- ClassSubject - Subject-class-teacher mapping
- Student - Student profiles and enrollment
- Teacher - Teacher profiles and qualifications
- Parent - Parent information
- Attendance - Daily attendance records
- Meeting - Meeting scheduling and management
- Exam - Exam definitions (Quarterly, Board, etc.)
- Result - Student exam results
- FeeStructure - Fee definitions by class
- FeePayment - Payment transactions
- Notification - User notifications
- Announcement - School-wide announcements
cd backend
pnpm prisma studioThis opens Prisma Studio to browse the database visually.
When you run pnpm prisma db seed, the following sample data is created:
Users & Authentication:
- 1 Principal:
principal@school.com - 2 Teachers:
math.teacher@school.com,science.teacher@school.com - 1 Finance Staff:
finance@school.com - 2 Parents:
parent1@email.com,parent2@email.com - 3 Students:
student1@email.com,student2@email.com,student3@email.com
Password for all users: password123
School Structure:
- 1 School (Delhi Public School - CBSE)
- 3 Classes (10A, 10B, 12A)
- 5 Subjects (Mathematics, Science, English, Physics, Chemistry)
Sample Data:
- Attendance records
- 2 Exams (Quarterly & Board 12th)
- Exam results
- Fee structure & payments
- 2 Meetings scheduled
- Notifications & announcements
- Assignments
cd backend
# Development
pnpm run start:dev # Start dev server with hot reload
pnpm run start:debug # Start with debugging
pnpm run start:prod # Start production server
# Database
pnpm prisma studio # Open Prisma Studio
pnpm prisma migrate dev # Create new migration
pnpm prisma migrate deploy # Run migrations (production)
pnpm prisma generate # Generate Prisma Client
pnpm prisma db push # Push schema without migration
pnpm prisma db seed # Seed database
# Testing
pnpm test # Run unit tests
pnpm test:watch # Run tests in watch mode
pnpm test:cov # Generate coverage report
pnpm test:e2e # Run E2E tests
# Linting & Formatting
pnpm run lint # Lint code
pnpm run format # Format code with Prettiercd frontend
# Development
pnpm dev # Start dev server
pnpm build # Build for production
pnpm preview # Preview production build
# Testing (to be configured)
pnpm test # Run tests
pnpm test:ui # Run tests with UIPOST /api/auth/register- Register new userPOST /api/auth/login- User loginPOST /api/auth/logout- User logoutGET /api/auth/me- Get current userPOST /api/auth/refresh- Refresh access tokenPOST /api/auth/forgot-password- Request password resetPOST /api/auth/reset-password- Reset password
GET /api/students- List all studentsGET /api/students/:id- Get student detailsPOST /api/students- Create studentPUT /api/students/:id- Update studentDELETE /api/students/:id- Delete student
POST /api/attendance- Mark attendanceGET /api/attendance/student/:id- Student attendance reportGET /api/attendance/class/:id- Class attendance reportGET /api/attendance/report- Generate attendance report
POST /api/meetings- Schedule meetingGET /api/meetings- List meetingsGET /api/meetings/:id- Get meeting detailsPUT /api/meetings/:id- Update meetingDELETE /api/meetings/:id- Cancel meeting
GET /api/results/student/:id- Get student resultsPOST /api/results- Add exam resultsGET /api/results/exam/:id- Get exam resultsPUT /api/results/:id- Update results
GET /api/finance/fees- Get fee structurePOST /api/finance/payment- Record paymentGET /api/finance/payments/:studentId- Student payment historyGET /api/finance/reports- Financial reports
# Database
DATABASE_URL="postgresql://user:password@host:5432/schooldb"
# JWT
JWT_SECRET="your-super-secret-jwt-key"
JWT_EXPIRATION="7d"
JWT_REFRESH_SECRET="your-refresh-secret"
JWT_REFRESH_EXPIRATION="30d"
# Application
NODE_ENV="development"
PORT=3000
API_PREFIX="api"
FRONTEND_URL="http://localhost:5173"
# Email (Optional)
SMTP_HOST="smtp.gmail.com"
SMTP_PORT=587
SMTP_USER="your-email@gmail.com"
SMTP_PASSWORD="your-app-password"
# File Storage (Optional)
AWS_ACCESS_KEY_ID=""
AWS_SECRET_ACCESS_KEY=""
AWS_REGION="us-east-1"
AWS_S3_BUCKET=""# API Configuration
VITE_API_URL=http://localhost:3000
VITE_API_PREFIX=api
# WebSocket
VITE_SOCKET_URL=ws://localhost:3000
# App Configuration
VITE_APP_NAME="School SaaS"- Push code to GitHub
git init
git add .
git commit -m "Initial commit"
git remote add origin <your-repo-url>
git push -u origin main- Deploy on Vercel
- Go to vercel.com
- Import your repository
- Set root directory:
frontend - Add environment variables
- Deploy!
-
Create Render account at render.com
-
Create Web Service
- Connect GitHub repository
- Root directory:
backend - Build command:
pnpm install && pnpm prisma generate && pnpm build - Start command:
pnpm run start:prod
-
Add Environment Variables in Render dashboard
-
Run Migrations
pnpm prisma migrate deploy- Create project at neon.tech
- Copy connection string
- Add to backend environment variables
- Run migrations
cd backend
# Unit tests
pnpm test
# E2E tests
pnpm test:e2e
# Coverage
pnpm test:covcd frontend
# Run tests (to be configured)
pnpm test- Project structure setup
- Database schema design
- Basic configuration
- Implement auth module
- Create login/register UI
- Role-based access control
- User CRUD operations
- Profile management
- Student enrollment
- Teacher assignment
- Daily attendance marking
- Attendance reports
- Parent notifications
- Analytics dashboard
- Meeting scheduling
- Calendar integration
- Real-time meeting rooms
- Meeting notes
- Exam creation
- Result entry
- Report card generation
- Board exam handling
- Fee structure setup
- Payment processing
- Invoice generation
- Financial reports
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
This project is licensed under the MIT License.
For questions or support:
- Create an issue on GitHub
- Email: support@schoolsaas.com
Built with β€οΈ for modern school management
Happy Coding! π