ExamSecurity
A secure online examination platform with an immutable audit trail and a real-time risk-scoring engine.
Overview
ExamSecurity (AegisExam) is a browser-based exam platform for universities, colleges, and training institutions. Built for the International AI Builders Congress 2026 Hackathon Bangladesh. Every action a student takes during an exam — opening a question, switching tabs, leaving fullscreen, copying text, resuming after a network drop — is written to an append-only audit trail that an invigilator can review after the fact. A Python machine-learning service watches that trail in real time and assigns each session a 0–100 risk score; a high score means an invigilator should look, and the human makes the call. Students sit exams in a locked-down browser room with a server-authoritative timer, lecturers author exams and monitor their cohort live, and administrators run the platform from a single console with fine-grained permission keys. The whole stack — PostgreSQL, the Express API, the cron worker, the Python risk scorer, and the Next.js frontend — boots with a single docker compose command and serves a real class on day one.
Highlights
- Append-only audit trail records every exam action: tab switches, fullscreen exits, copy attempts, and network-drop resumes
- Real-time 0–100 risk scoring engine (scikit-learn) that surfaces suspicious sessions for human review instead of accusing students outright
- Five user-facing surfaces: student exam room, student dashboard, live lecturer dashboard, admin console, and TOTP-based MFA enrollment
- Server-authoritative countdown — the server clock decides remaining time, never the student's local clock
- Resumable MFA enrollment and offline-tolerant exam sessions, so a closed tab or dropped connection never loses saved answers
- Single-command Docker Compose stack with seeded users, courses, exams, and questions on first boot
- Fine-grained permission keys (users:write, audit:read, ...) revocable from the admin settings page
- TOTP second factor via Google Authenticator with the scannable QR code shown before any code is ever requested
Built with
- Next.js
- React
- TypeScript
- Tailwind CSS
- Express
- Node.js
- PostgreSQL
- Python
- FastAPI
- scikit-learn
- Docker
- nginx
- JWT
- TOTP
- Vitest