MockPrepAI is an AI-powered interview practice platform that helps candidates simulate realistic interviews and improve with structured feedback.
Users can create accounts, set up interviews, answer AI-generated questions (including follow-ups), and review post-interview reports with performance insights.
- Audio-first mock interview experience.
- AI-generated domain-specific interview questions and follow-ups.
- Real-time interview flow with question/answer progression.
- Structured feedback reports with strengths and weaknesses.
- Interview history to track improvement over time.
- Resume upload support with local or S3-backed storage.
- React + TypeScript
- Vite
- React Router
- React Query
- Zustand
- Tailwind CSS
- NestJS + TypeScript
- Prisma ORM
- PostgreSQL
- JWT authentication
- AWS SDK (optional S3 storage)
frontend/: React web appbackend/: NestJS API serverdocker/: Docker and Compose setupshared/: shared resources (if added later)
- Node.js 20+ recommended
- npm
- PostgreSQL running locally (or via Docker)
npm install
cd backend && npm install
cd ../frontend && npm installCreate a .env file inside backend/ with at least:
DATABASE_URL=postgres://mockprepai:mockprepai@localhost:5432/mockprepai
PORT=3000
FRONTEND_ORIGIN=http://localhost:5173
# JWT
JWT_SECRET=change-me
JWT_REFRESH_SECRET=change-me-too
JWT_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d
# Resume storage
STORAGE_DRIVER=local
UPLOADS_DIR=uploads
BACKEND_ORIGIN=http://localhost:3000
# Optional S3 settings (required only when STORAGE_DRIVER=s3)
AWS_REGION=
S3_BUCKET=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
S3_PUBLIC_BASE_URL=From backend/:
npx prisma migrate devIn one terminal:
cd backend
npm run start:devIn another terminal:
cd frontend
npm run devApp URLs:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:3000/api
From project root:
docker compose -f docker/docker-compose.yml up --buildDefault ports:
- Frontend:
http://localhost:5173 - Backend:
http://localhost:3000 - PostgreSQL:
localhost:5432
Auth:
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/refresh
Interview (JWT-protected):
POST /api/interview/startGET /api/interview/question?interviewId=...POST /api/interview/answer?interviewId=...&questionId=...POST /api/interview/endGET /api/interview/report/:idGET /api/interview/history
- Uploaded files are served from
/uploadsin local mode. - If using S3 storage, set
STORAGE_DRIVER=s3and provide valid AWS/S3 variables.