# Ethiopian National Accessible Exam System (ENAES)
Production-ready full-stack exam platform with:
- React + TypeScript + Tailwind frontend
- Node.js + TypeScript + Express backend
- MongoDB (local) + Mongoose
- JWT access/refresh auth
- Role-based authorization (admin, examiner, student)
- Offline response sync with latest `answeredAt` conflict resolution
## Local Requirements
- Node.js 20+
- npm 10+
- MongoDB local instance running on `mongodb://localhost:27017`
## Project Structure
- `frontend/` React frontend app
- `backend/` backend API service
## Run From Project Root (No cd Required)
From the project root folder, you can run:
- `npm run dev:backend`
- `npm run dev:student`
- `npm run dev:staff`
And for checks/builds:
- `npm run build:backend`
- `npm run build:student`
- `npm run build:staff`
- `npm run test:backend`
- `npm run test:frontend`
- `npm run test:e2e:smoke`
- `npm run check:release`
## Backend Setup
1. Create env file:
- Copy `backend/.env.example` to `backend/.env`
2. Install dependencies:
- `cd backend`
- `npm install`
3. Seed initial data:
- `npm run seed`
4. Start backend:
- `npm run dev`
Backend default URL: `
localhost`
## Frontend Setup
1. Install dependencies:
- `cd frontend`
- `npm install`
2. Optional frontend env (`frontend/.env`):
- `VITE_API_BASE_URL=
localhost`
3. Start frontend:
- `cd frontend`
- `npm run dev:student` (Student Portal on `
localhost`)
- `npm run dev:staff` (Admin/Examiner Portal on `
localhost`)
Frontend portal URLs:
- Student Portal: `
localhost`
- Admin/Examiner Portal: `
localhost`
## Test Commands
### Backend
- Build: `cd backend && npm run build`
- Tests: `cd backend && npm test`
### Frontend
- Unit tests: `cd frontend && npm test`
- Targeted tests:
- `cd frontend && npx vitest run src/test/examPlayer.keyboard.test.tsx src/test/examSubmission.api.test.tsx`
### E2E
- Spec file: `frontend/e2e/offline-sync.spec.ts`
- …