A comprehensive platform for educators to create, manage, and evaluate exams with ease. Examinator streamlines the assessment process from creation to evaluation, providing a modern and intuitive interface for both examiners and students.
- Exam Creation: Create comprehensive exams with various question types, time limits, and scoring options
- Student Management: Manage student profiles, track progress, and organize classes efficiently
- Secure Testing: Ensure exam integrity with secure testing environments and anti-cheating measures
- Analytics & Insights: Gain valuable insights with detailed analytics on student performance and exam effectiveness
- Examiner Registration: Easy registration process for educators to join the platform
- Responsive Design: Modern, mobile-friendly interface built with React and Tailwind CSS
- Node.js - Runtime environment
- Express.js - Web framework
- Prisma - Database ORM
- PostgreSQL - Database
- bcryptjs - Password hashing
- jsonwebtoken - JWT authentication
- dotenv - Environment variables
- React 19 - UI library
- React Router DOM - Client-side routing
- Tailwind CSS - Utility-first CSS framework
- Heroicons - Icon library
- Axios - HTTP client
- Vite - Build tool and dev server
Before running this project, make sure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn
- PostgreSQL database
- Git
git clone <repository-url>
cd ExaminatorInstall dependencies for both frontend and backend:
npm install
cd src/backend && npm install
cd ../frontend && pnpm install
cd ../..Create a .env file in the src/backend directory:
DATABASE_URL="postgresql://username:password@localhost:5432/examinator"
JWT_SECRET="your-jwt-secret-key"
PORT=5001
NODE_ENV=developmentSet up the database using Prisma:
cd src/backend
npx prisma generate
npx prisma db pushStart both frontend and backend servers:
npm run devThis will start:
- Backend server on
http://localhost:5001 - Frontend server on
http://localhost:5173
POST /api/admin/register- Register admin userPOST /api/examiner- Register examinerGET /api/examiner/:id- Get examiner detailsDELETE /api/examiner/:id- Delete examiner
POST /api/exam/:examinerId- Create new examGET /api/exam/:id- Get exam detailsDELETE /api/exam/:id- Delete examGET /api/exam/exams/:examinerId- Get all exams created by examinerPOST /api/exam/submit- Submit exam attemptGET /api/exam/attempts/:examId- Get all exam attempts for an examGET /api/exam/attempt/:attemptId- Get exam attempt details
POST /api/auth/login- LoginPOST /api/auth/refresh- Refresh access tokenGET /api/auth/confirm- Confirm userPOST /api/auth/logout/:id- LogoutPOST /api/auth/logout/:id- Logout
Run the test suite:
cd src/backend
npm testFor test coverage:
npm run test:coverageThe frontend is built with React and uses modern development practices:
- Component-based architecture
- React Hooks for state management
- React Router for navigation
- Tailwind CSS for styling
- Responsive design principles
Header- Navigation header with brandingFooter- Site footer with linksHome- Landing page with features showcaseExaminerRegistration- Registration form for examiners
The backend follows a clean architecture pattern:
- Controllers handle HTTP requests/responses
- Services contain business logic
- Models define data structures
- Routes define API endpoints
- Utilities provide helper functions
The application uses PostgreSQL with Prisma ORM. Key entities include:
- UserProfile - Base user information
- Examiner - Examiner-specific data
- Student - Student-specific data
- Exam - Exam information
- Question - Exam questions
- Option - Question options
- ExamAttempt - Student exam attempts
- Answer - Student answers
- AuthManager - Authentication and authorization management
- StudentExam - Mapping between students and exams
- Set up PostgreSQL database
- Configure environment variables
- Run database migrations
- Deploy to your preferred platform (Heroku, AWS, etc.)
-
Build the frontend:
cd src/frontend npm run build -
Deploy the build artifacts to your hosting platform (Netlify, Vercel, etc.)
We welcome contributions to the Examinator project! To ensure code quality and consistency, please follow these guidelines:
-
Follow Project Structure - Maintain the existing project structure and organization patterns. This ensures consistency across the codebase and makes it easier for other developers to understand and maintain the code.
-
Backend Testing Requirements - All backend implementations must include comprehensive unit tests. This is mandatory for:
- Controllers
- Services/Business logic
- Utility functions
- API endpoints
- Database operations
-
Code Quality Standards
- Follow existing naming conventions
- Use consistent code formatting (Prettier configuration provided)
- Write clear, descriptive commit messages
- Document complex functions and business logic
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Maintain project structure - Place files in appropriate directories following existing patterns
- Write unit tests for all backend functionality (see
src/backend/tests/for examples) - Run tests to ensure they pass:
npm test - Run linting:
npm run lint - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request with:
- Clear description of changes
- Test coverage report
- Screenshots for UI changes (if applicable)
-
Unit Tests: Required for all backend services, controllers, and utilities
-
Test Coverage: Aim for at least 80% code coverage
-
Test Structure: Follow existing test patterns in
src/backend/tests/ -
Test Commands:
npm test # Run all tests npm run test:watch # Run tests in watch mode npm run test:coverage # Generate coverage report
All contributions will be reviewed for:
- Adherence to project structure
- Presence of adequate unit tests
- Code quality and consistency
- Functionality and performance
This project is licensed under the ISC License.
- Backend Development - Node.js, Express, Prisma
- Frontend Development - React, Tailwind CSS
- Database Design - PostgreSQL, Prisma Schema
For support and questions, please open an issue in the repository or send a mail to [email protected].