A portfolio-grade full-stack attendance management system built for fresher developer interviews.
Full walkthrough with annotated screenshots: docs/screenshots/README.md
Project synopsis (Markdown with screenshots): docs/PROJECT_SYNOPSIS.md
Synopsis PDF (local only, not in repo): run python scripts/generate-synopsis-pdf.py → docs/Smart-Attendance-Synopsis.pdf
| Login & demo roles | ![]() |
| Student dashboard | ![]() |
| Mark attendance | ![]() |
| Architecture | ![]() |
Regenerate anytime: python scripts/capture-screenshots.py (requires running app — see screenshot README).
Manual attendance tracking is slow, error-prone, and hard to analyze. This project demonstrates a role-based web app where teachers mark attendance, students view records, and admins manage classes with audit-friendly reporting.
- Backend: Node.js, Express, TypeScript, Prisma, JWT
- Frontend: React, Vite, TypeScript, React Router
- Streamlit UI: Python dashboard at
http://localhost:8501 - Database: SQLite (easy local setup; PostgreSQL-ready via Prisma)
- Quality: ESLint, Prettier, Vitest, GitHub Actions CI
- API Docs: Swagger UI at
/api/docs
flowchart LR
ui[ReactFrontend] -->|REST + JWT| api[ExpressAPI]
api --> authMod[AuthModule]
api --> classMod[ClassesModule]
api --> attMod[AttendanceModule]
api --> reportMod[ReportsModule]
authMod --> db[SQLitePrisma]
classMod --> db
attMod --> db
reportMod --> db
reportMod --> csv[CSVExport]
- User registration and login with access + refresh tokens
- Role-based access control (
ADMIN,TEACHER,STUDENT) - Class creation and student enrollment
- Session-based attendance marking (Present/Absent/Late)
- Filterable reports with analytics cards
- CSV export with authenticated download
- Audit logs for attendance changes
- Swagger API documentation
- Seed data for demo interviews
backend/src/modules- feature-based API modulesbackend/prisma- schema, seed, migrationsfrontend/src/pages- route pagesfrontend/src/context- auth state persistencedocs- API docs, Postman collection, demo script, screenshots gallerydocs/screenshots- UI screenshots + how the project worksscripts- screenshot capture and utilities
Easiest way (Windows): run everything from the project root:
.\start.ps1 # Backend + Streamlit
.\start.ps1 -All # Backend + Streamlit + Reactcd backend
npm install
copy ..\.env.example .env
npm run prisma:generate
npm run prisma:push
npm run prisma:seed
npm run devcd frontend
npm install
copy .env.example .env
npm run devcd streamlit
python -m pip install -r requirements.txt
streamlit run app.pyOpen:
- React frontend:
http://localhost:5173 - Streamlit UI:
http://localhost:8501 - Backend health:
http://localhost:4000/health - Swagger docs:
http://localhost:4000/api/docs
| Role | Password | |
|---|---|---|
| Admin | admin@smart.com |
Admin@123 |
| Teacher | teacher@smart.com |
Teacher@123 |
| Student | student@smart.com |
Student@123 |
| Student | student2@smart.com |
Student@123 |
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/refreshPOST /api/auth/logoutGET /api/auth/meGET /api/users/studentsGET /api/classesPOST /api/classesPOST /api/classes/:id/enrollGET /api/attendance/sessionPOST /api/attendance/markGET /api/attendance/myGET /api/reports/attendanceGET /api/reports/attendance.csv
Detailed docs: docs/api.md
cd backend
npm run test- Login as teacher and show dashboard analytics.
- Create class and enroll student.
- Mark attendance for today.
- Open reports, apply filters, export CSV.
- Login as student and show personal attendance page.
See docs/demo-script.md.
- Built a full-stack attendance platform with JWT auth, RBAC, and REST APIs in Node.js/Express.
- Implemented Prisma data modeling, session-based attendance tracking, and CSV reporting.
- Added React dashboard with role-aware routing, analytics cards, and authenticated exports.
- Configured CI pipeline with linting and integration tests using Vitest + Supertest.
- SQLite is used for zero-config local development.
- First admin/teacher accounts are primarily created via seed script.
- Production deployment (Docker/cloud) is intentionally left as an extension task.



