A thoughtful, accessible examination platform crafted for inclusion. Designed to be simple, reliable, and friendly for students and teachersβespecially those who are visually impaired.
- Overview
- Key Features
- Tech Stack
- Prerequisites
- Installation
- Environment Configuration
- Development
- Building for Production
- Testing
- Project Structure
- API Documentation
- Contributing
- Code of Conduct
- License
- Acknowledgments
The AI Examination System is an open-source, web-based examination platform designed with accessibility at its core. It provides a seamless experience for both visually impaired and sighted users, enabling teachers to create exams and students to take them with full voice control and screen reader support.
Traditional examination systems often overlook users with visual impairments. This project aims to bridge that gap by providing:
- Voice Commands: Navigate and answer questions entirely by voice
- Screen Reader Support: Full ARIA compliance for assistive technologies
- Keyboard Navigation: Complete exam workflow without a mouse
- AI-Assisted Features: Smart tools to support students while maintaining exam integrity
- Speech Recognition: Answer questions using your voice
- Text-to-Speech: Hear questions and options read aloud
- Keyboard Navigation: Full keyboard support with intuitive shortcuts
- High Contrast Mode: Enhanced visibility for low-vision users
- ARIA Labels: Complete screen reader compatibility
- Create and manage exams with multiple question types
- Set time limits and total marks
- Publish, archive, or save exams as drafts
- View student submissions and performance
- Browse available exams
- Take exams with voice or keyboard controls
- Timer announcements for time management
- Real-time feedback and progress tracking
- Real-time updates via WebSocket (Socket.IO)
- GraphQL API for flexible data queries
- JWT-based authentication
- Mobile-ready with Capacitor support
| Technology | Purpose |
|---|---|
| Vue.js 3 | Reactive UI framework |
| Vite | Fast build tool and dev server |
| TailwindCSS | Utility-first CSS framework |
| Pinia | State management |
| Vue Router | Client-side routing |
| Capacitor | Native mobile app support |
| Rive | Interactive animations |
| Web Speech API | Speech recognition & synthesis |
| Technology | Purpose |
|---|---|
| Node.js | JavaScript runtime |
| Express | Web application framework |
| MongoDB | NoSQL database |
| Mongoose | MongoDB object modeling |
| GraphQL | API query language |
| Socket.IO | Real-time communication |
| JWT | Authentication tokens |
| Joi | Schema validation |
Before you begin, ensure you have the following installed:
- Node.js (v20.x or higher) - Download
- npm (v9.x or higher) - Comes with Node.js
- MongoDB (v5.x or higher) - Download
- Git - Download
git clone https://github.com/mullermnm/ai_examination.git
cd ai_examinationcd backend
npm installcd ../frontend
npm installCreate a .env file in the backend directory:
# Server Configuration
SERVER_PORT=8000
# Database
MONGODB_URI=mongodb://localhost:27017/ai_examination
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-change-in-production
JWT_EXPIRES_IN=7d
# Environment
NODE_ENV=developmentCreate a .env file in the frontend directory:
VITE_API_URL=http://localhost:8000For production, create .env.production:
VITE_API_URL=https://your-production-api-url.comMake sure MongoDB is running on your system:
# On Windows (if installed as a service)
net start MongoDB
# On macOS/Linux
mongod --dbpath /path/to/your/datacd backend
npm run devThe backend will start on http://localhost:8000
cd frontend
npm run devThe frontend will start on http://localhost:5000
Open your browser and navigate to http://localhost:5000
cd frontend
npm run buildThe production build will be in the frontend/dist directory.
cd backend
npm run buildThe bundled backend will be in backend/dist/backend.js.
cd frontend
npm run build:mobileThis creates an APK in frontend/public/app-debug.apk.
cd frontend
npm run test:unitUses Vitest with jsdom for component testing.
cd frontend
npm run test:e2eUses Cypress for end-to-end testing.
cd frontend
npm run test:e2e:devThis opens Cypress Test Runner for interactive testing.
cd frontend
npm run lintRuns ESLint to check for code quality issues.
ai_examination/
βββ backend/ # Node.js/Express backend
β βββ bootstrap/ # Server and database initialization
β βββ config/ # Configuration files
β βββ src/
β β βββ controller/ # Route controllers
β β βββ graphql/ # GraphQL schema and resolvers
β β βββ helpers/ # Utility helpers
β β βββ interface/ # Data access interfaces
β β βββ middleware/ # Express middleware (auth, validation)
β β βββ models/ # Mongoose models
β β βββ routes/ # API route definitions
β β βββ services/ # Business logic services
β β βββ validators/ # Joi validation schemas
β βββ index.js # Application entry point
β βββ package.json
β
βββ frontend/ # Vue.js frontend
β βββ public/ # Static assets
β βββ src/
β β βββ assets/ # Images, fonts, styles
β β βββ components/ # Reusable Vue components
β β βββ directives/ # Custom Vue directives
β β βββ mixins/ # Vue mixins
β β βββ modules/ # Feature modules
β β β βββ auth/ # Authentication views
β β β βββ exam/ # Exam management (teacher)
β β β βββ home/ # Landing page
β β β βββ student/ # Student dashboard & exam taking
β β β βββ teacher/ # Teacher dashboard
β β βββ plugins/ # Vue plugins
β β βββ router/ # Vue Router configuration
β β βββ services/ # API service layer
β β βββ stores/ # Pinia state stores
β β βββ utils/ # Utility functions
β βββ index.html # Entry HTML
β βββ vite.config.js # Vite configuration
β βββ package.json
β
βββ .github/
β βββ workflows/
β βββ ci.yml # GitHub Actions CI/CD
β
βββ .gitignore
βββ LICENSE
βββ README.md
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register a new user |
| POST | /api/auth/login |
Login and receive JWT token |
| GET | /api/auth/me |
Get current user profile |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/exams |
List all exams (teacher) |
| GET | /api/exams/published |
List published exams (student) |
| POST | /api/exams |
Create a new exam |
| GET | /api/exams/:id |
Get exam details |
| PUT | /api/exams/:id |
Update an exam |
| DELETE | /api/exams/:id |
Delete an exam |
| PATCH | /api/exams/:id/status |
Update exam status |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/submissions |
Submit exam answers |
| GET | /api/submissions/:examId |
Get submissions for an exam |
| Endpoint | Description |
|---|---|
POST /graphql |
GraphQL API endpoint |
We welcome contributions from everyone! Here's how you can help:
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/ai_examination.git
- Create a branch for your feature:
git checkout -b feature/amazing-feature
- Make your changes and commit them:
git commit -m "feat: add amazing feature" - Push to your fork:
git push origin feature/amazing-feature
- Open a Pull Request
We follow Conventional Commits:
feat:New featuresfix:Bug fixesdocs:Documentation changesstyle:Code style changes (formatting, etc.)refactor:Code refactoringtest:Adding or updating testschore:Maintenance tasks
- π Bug fixes
- β¨ New accessibility features
- π Internationalization (i18n)
- π Documentation improvements
- π§ͺ Test coverage
- π¨ UI/UX enhancements
This project adheres to a Code of Conduct that all contributors are expected to follow:
- Be Respectful: Treat everyone with respect and kindness
- Be Inclusive: Welcome contributors of all backgrounds
- Be Constructive: Provide helpful feedback
- Be Patient: Help newcomers learn and grow
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2024 AI Examination Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- All contributors who help make education more accessible
- The open-source community for the amazing tools and libraries
- Educators and students who provide valuable feedback
- Vue.js team for the excellent framework
- MongoDB for the flexible database
- The Web Accessibility community for guidance and best practices
If you have questions or need help:
- π Check the documentation
- π Search existing issues
- π¬ Open a new issue for bugs or feature requests
Made with β€οΈ for accessible education