Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Secure Online Exam System

A production-ready exam platform with built-in security features to mimic "Safe Exam Browser" behavior using modern Web APIs.

Features

  • Admin Panel: Create exams, manage questions, generate student credentials.
  • Student Portal: Take exams in a secure fullscreen environment.
  • Security:
    • Fullscreen Enforcement: Forces fullscreen mode.
    • Focus Tracking: Detects Alt+Tab or window switching.
    • Blocking Overlay: Blocks the screen immediately upon violation.
    • Admin Unlock: Requires an Admin PIN to resume the exam.
    • No Copy/Paste: Disbale context menu and clipboard actions.

Prerequisites

  • Node.js: v18+ (if running locally)
  • PostgreSQL: v14+ (if running locally)
  • Docker (Recommended for easy setup)

Quick Start (Docker)

  1. Ensure Docker Desktop is running.
  2. Run:
    docker-compose up --build
  3. Access the App:

Manual Setup

If you don't use Docker:

1. Database

  • Start PostgreSQL and create a database named examdb.
  • Update server/.env with your credentials.

2. Backend

cd server
npm install
npm start

The server will sync the database automatically on first run.

3. Frontend

cd client
npm install
npm run dev

Usage Guide

  1. Initial Admin Setup:

    • Creating the first admin is currently manual or via the /api/auth/setup-admin endpoint.
    • Use Postman to POST to http://localhost:5000/api/auth/setup-admin with { "username": "admin", "password": "adminpassword" }.
  2. Login as Admin:

    • Go to /login.
    • Create an Exam.
    • Add Questions.
    • Go to "Students" tab -> Click "Generate Accounts".
  3. Login as Student:

    • Use a generated username (e.g., student_1234) and password.
    • Select an exam.
    • The browser will request Fullscreen. Allow it.
    • Attempt to switch tabs to test security blocking.
    • Use PIN 12345 (default in .env) to unlock.

Releases

Packages

Contributors

Languages