School management system for Somali private schools. A public school site plus admin, teacher, parent and student portals, with attendance, report cards, and term fees paid in installments.
# School Management System
A web app for Somali private schools and madrasas that currently run on paper.
It has two parts:
1. A **public school website** anyone can visit (Home, About, Academics, Admissions, News, Contact).
2. A **portal** behind login, with a dashboard per role: Admin, Teacher, Parent, Student.
Built by Abdalle Hussein as a portfolio project. MERN stack, deployed on Vercel
as two projects (frontend and a serverless backend).
## Accounts and login
There is no public sign up. The admin creates every account (teachers, parents,
students) and sets the password. On first login the user is asked to change it
once. Teachers and parents log in with their email, students log in with their
admission number. Forgot and reset password by email still work for accounts
that have an email.
## Modules
Students and enrolment, classes and sections, subjects, staff and teaching
assignments, the three-term year, daily attendance, exams and computed report
cards, term fees with installment plans ("qaybo"), weekly timetable,
announcements and notifications, admission applications from the public site,
a contact form, school settings, and reporting endpoints.
## Tech stack
| Layer | Tools |
| :--- | :--- |
| Frontend | React 19, Vite, Redux Toolkit, React Router 7, Tailwind CSS v4, Framer Motion, Recharts, lucide-react, react-hot-toast |
| Backend | Node.js, Express 5, Mongoose 9, jsonwebtoken, bcryptjs, helmet, cors, express-rate-limit, multer, imagekit, nodemailer, colors |
| PDF | jspdf + jspdf-autotable (report cards and fee receipts) |
| Database | MongoDB Atlas |
| Images | ImageKit.io |
| Deployment | Vercel |
## Repo layout
```
backend/ Express 5 + Mongoose 9 api, exported for Vercel serverless
frontend/ Vite + React 19 single page app
```
## Running locally
Backend:
```
cd backend
cp .env.example .env # then fill in the values
npm install
npm run data:import # create the first admin from the ADMIN_ vars in .env
npm run dev …