An AI-powered interview preparation platform that generates adaptive questions from your resume, evaluates your answers in real-time, and tracks your growth across sessions.
| Dashboard | Interview Session |
|---|---|
![]() |
![]() |
| AI Feedback | Analytics |
|---|---|
![]() |
![]() |
- 📄 Resume Parser — Upload your PDF resume; the AI reads it and generates questions tailored to your actual experience and skills
- 🎯 Adaptive Questions — Choose your target role, experience level, and difficulty; questions adjust accordingly
- 🤖 Real-time AI Feedback — Every answer gets scored with strengths, weaknesses, and an ideal answer
- 🎙️ Voice Interview Mode — Speak your answers using the Web Speech API (works on the live site)
- 🔄 Multi-LLM Routing — Groq is primary; Gemini and OpenRouter are fallbacks — if one is down, the next kicks in automatically
- 📊 Analytics Dashboard — Track your score trends, topic-wise performance, and weak areas across sessions
- 📥 Downloadable Reports — Export your session as a PDF with all questions, answers, and feedback
| Layer | Technology |
|---|---|
| Frontend | React, Redux Toolkit, Tailwind CSS |
| Backend | Node.js, Express.js |
| Database | MongoDB + Mongoose |
| Auth | JWT + bcrypt |
| LLM Routing | Groq (primary) → Gemini → OpenRouter |
| Resume Parsing | pdf-parse + Multer |
| Voice | Web Speech API |
| Deployment | Netlify (frontend) · Render (backend) |
User uploads PDF resume
↓
Multer + pdf-parse → extract text
↓
Resume text + job role → LLM Router
↓
Groq → Gemini → OpenRouter (fallback chain)
↓
Adaptive questions generated
↓
User answers via text or voice
↓
AI scores answer → Strengths / Weaknesses / Ideal Answer
↓
Results stored in MongoDB → Analytics Dashboard updated
# 1. Clone
git clone https://github.com/arka562/ai-interview-prep.git
cd ai-interview-prep
# 2. Backend
cd backend
npm install
cp .env.example .env # Fill in your keys
npm run dev # Runs on http://localhost:5000
# 3. Frontend (new terminal)
cd frontend/ai_interview_prep
npm install
cp .env.example .env # Use local API URL during development
npm run dev # Runs on http://localhost:5173Required .env variables (backend):
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
GROQ_API_KEY=your_groq_key
GEMINI_API_KEY=your_gemini_key
OPENROUTER_API_KEY=your_openrouter_keyFrontend .env variable:
VITE_API_BASE_URL=http://localhost:5000/api/v1This repo includes Docker Compose for local full-stack development and GitHub Actions workflows for CI, Docker image publishing, and deployment automation.
docker compose up --buildSee CI_CD_SETUP.md for the full Docker, GitHub Actions, Netlify, and Render setup.
ai-interview-prep/
├── backend/
│ ├── controllers/ # Route logic
│ ├── models/ # Mongoose schemas
│ ├── routes/ # API endpoints
│ ├── middleware/ # Auth, file upload
│ └── server.js
├── frontend/
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Dashboard, Interviews, Resume, Analytics
│ │ ├── store/ # Redux Toolkit slices
│ │ └── App.jsx
└── README.md
1. Resume-Based Question Generation
Upload any PDF resume. The backend extracts the text using
pdf-parse, sends it to the LLM along with your selected role and difficulty, and generates questions that are specific to what's actually on your resume — not generic questions.
2. Voice Interview Mode
Click the mic button during an interview session. The Web Speech API records your spoken answer, converts it to text, and submits it for AI evaluation. Works directly on the live Netlify deployment — no additional setup needed.
3. Multi-LLM Fallback Chain
The backend tries Groq first (fastest, most reliable). If the Groq API fails or rate-limits, it automatically falls back to Gemini, then OpenRouter. This means the platform stays functional even during provider outages.
4. Analytics & Topic Tracking
Every session is stored in MongoDB. The Analytics page shows your average score, accuracy rate, improvement rate, and topic-level breakdown — so you know exactly which areas to focus on next.
- Backend is hosted on Render's free tier — first request after inactivity may take 30–50 seconds (cold start). The app works fine after that.
- Voice mode works best on Chrome. Firefox and Safari have limited Web Speech API support.
Arkaprava Ghosh
B.Tech IoT & Intelligent Systems, Manipal University Jaipur



