An intelligent full-stack platform that simulates real-world technical interviews using AI, evaluates candidate responses in real time, and delivers rich performance analytics and personalized feedback.
- Overview
- Features
- Tech Stack
- Architecture
- Project Structure
- Getting Started
- API Reference
- Screenshots
- Contributing
- License
This platform provides a fully AI-powered mock interview experience β from resume parsing and dynamic question generation to speech-to-text answer capture, automated evaluation, and actionable performance reports.
Candidates can:
- Upload their resume to generate role-specific questions
- Speak or type their answers during a live interview session
- Receive instant AI-scored feedback with detailed analytics
- Review their complete interview history over time
| Feature | Description |
|---|---|
| π Auth System | JWT-based register/login with bcrypt password hashing |
| π Resume Parsing | Upload PDF resume β AI extracts skills, experience, and projects |
| π― Dynamic Question Generation | Google Gemini generates tailored interview questions per role and skill level |
| π€ Speech-to-Text | AssemblyAI transcribes spoken answers in real time |
| π€ AI Evaluation | Gemini scores each answer on accuracy, depth, and communication |
| π Performance Analytics | Per-question scores, overall rating, strengths, and improvement areas |
| π Interview History | Past sessions stored in MongoDB; browseable from the dashboard |
| π» Code Editor | Monaco Editor integration for coding round questions |
| π Toast Notifications | Real-time feedback with react-hot-toast |
| Technology | Purpose |
|---|---|
| React 19 + Vite 6 | UI framework and build tool |
| React Router v7 | Client-side routing |
| Axios | HTTP client for API calls |
Monaco Editor (@monaco-editor/react) |
In-browser code editor for coding questions |
| Web Speech API | Browser-native speech recognition (ConversationalMic) |
| MediaRecorder API | Browser-native audio recording (VoiceRecorder) |
| React Icons | Icon library |
| React Hot Toast | Notification system |
| Technology | Purpose |
|---|---|
| Node.js v18+ + Express 5 | REST API server |
| MongoDB Atlas + Mongoose 9 | Cloud database and ODM |
| JSON Web Tokens (JWT) | Stateless authentication |
| bcryptjs | Password hashing |
| Multer (memory storage) | File uploads β PDF resume & audio |
| pdfjs-dist (legacy build) | PDF text extraction in Node.js |
| @google/genai | Google Gemini 2.5 Flash AI integration |
| AssemblyAI SDK | Speech-to-text transcription (speech_model: universal) |
| Murf AI REST API | Text-to-speech β Natalie voice (MP3, 24kHz) |
| dotenv | Environment variable management |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT (React 19 + Vite 6) β
β β
β LoginPage βββΊ HomePage βββΊ InterviewSetupPage β
β β β
β InterviewPage β
β (VoiceRecorder / CodeEditor) β
β β β
β FeedbackPage βββ HistoryPage β
ββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β REST API over HTTP (Axios)
β Authorization: Bearer <JWT>
ββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββ
β SERVER (Express 5 / Node.js) β
β β
β POST /api/auth/register|login GET /api/auth/me β
β POST /api/resume/upload GET /api/resume β
β POST /api/interview/start β
β POST /api/interview/:id/answer|answer-audio|code|end β
β GET /api/interview/:id β
β GET|DELETE /api/history[/:id] β
ββββββββ¬ββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββ¬ββββββ
βΌ βΌ βΌ βΌ
MongoDB Atlas Google Gemini AssemblyAI Murf AI
(Users, Inter- 2.5 Flash (Speech β (Text β
views, Resume) (Questions & Text) Speech
Evaluation) MP3)
AI-Driven-Technical-Interview-Simulation/
β
βββ client/ # React + Vite frontend
β βββ src/
β β βββ components/
β β β βββ AudioPlayer/ # Plays Murf TTS audio (base64 MP3)
β β β βββ CodeEditor/ # Monaco Editor wrapper
β β β βββ ConversationalMic/ # Web Speech API live transcription
β β β βββ InterviewCard/ # History card component
β β β βββ Navbar/ # Top navigation bar
β β β βββ ProtectedRoute/ # JWT route guard
β β β βββ ScoreCard/ # Category score display
β β β βββ VoiceRecorder/ # MediaRecorder audio recording
β β βββ constants/
β β β βββ difficulty.js # Difficulty levels + question counts
β β β βββ roles.js # Interview role definitions
β β β βββ scoreColors.js # Score-to-color mapping
β β βββ context/
β β β βββ AuthContext.jsx # Global auth state (login/logout/user)
β β βββ pages/
β β β βββ LoginPage/ # Hero + Sign In / Create Account
β β β βββ HomePage/ # Dashboard with stats + recent history
β β β βββ InterviewSetupPage/ # 3-step wizard: role β difficulty β resume
β β β βββ InterviewPage/ # Live interview (voice/text/code)
β β β βββ FeedbackPage/ # Detailed AI feedback + category scores
β β β βββ HistoryPage/ # Paginated interview history
β β βββ services/
β β β βββ api.js # Axios instance with JWT interceptor
β β β βββ authService.js # register, login, getMe, logout
β β β βββ historyService.js # getHistory, deleteHistoryItem, clearHistory
β β β βββ interviewService.js # upload, start, answer, code, end, get
β β βββ App.jsx # Route definitions
β β βββ App.css # Global styles
β β βββ main.jsx # React entry point
β βββ index.html
β βββ vite.config.js
β βββ .env.example
β βββ package.json
β
βββ server/ # Node.js + Express backend
β βββ src/
β β βββ config/
β β β βββ db.config.js # MongoDB Atlas connection
β β β βββ gemini.config.js # Google GenAI client (Gemini 2.5 Flash)
β β βββ constants/
β β β βββ prompts.js # All AI prompt templates
β β βββ controllers/
β β β βββ auth.controller.js
β β β βββ resume.controller.js
β β β βββ interview.controller.js # text/voice/code answer + TTS stream
β β β βββ history.controller.js
β β βββ middleware/
β β β βββ auth.middleware.js # JWT verification β req.user
β β β βββ error.middleware.js # 404 + global error handler
β β β βββ upload.middleware.js # Multer: PDF (10MB) + audio (25MB)
β β βββ models/
β β β βββ User.model.js
β β β βββ Interview.model.js # questions, messages, codeSubmissions, feedback
β β β βββ Resume.model.js
β β βββ routes/
β β β βββ index.js
β β β βββ auth.routes.js
β β β βββ resume.routes.js
β β β βββ interview.routes.js
β β β βββ history.routes.js
β β βββ services/
β β β βββ auth.service.js
β β β βββ gemini.service.js # askGemini() wrapper
β β β βββ assemblyai.service.js # transcribeAudio() via temp file
β β β βββ murf.service.js # generateAudio() + streamAudio()
β β β βββ interview.service.js # full interview state machine
β β β βββ resume.service.js # PDF parse + upsert to DB
β β β βββ history.service.js # paginated history CRUD
β β βββ utils/
β β βββ jwt.utils.js # generateToken, verifyToken
β β βββ prompts.utils.js # parseGeminiJSON()
β βββ server.js # Entry point
β βββ .env.example
β βββ .gitignore
β βββ package.json
β
βββ .gitignore
βββ README.md
Make sure you have the following installed:
- Node.js v18 or higher
- npm v9 or higher
- A MongoDB Atlas account (free tier works)
- API keys for:
- Google Gemini
- AssemblyAI
- Murf AI (optional β for TTS)
-
Clone the repository
git clone https://github.com/kadapalanikith/AI-Driven-Technical-Interview-Simulation-and-Performance-Analytics-Platform.git cd AI-Driven-Technical-Interview-Simulation-and-Performance-Analytics-Platform -
Install server dependencies
cd server npm install -
Install client dependencies
cd ../client npm install
Copy the template and fill in your values:
cp server/.env.example server/.env| Variable | Description |
|---|---|
PORT |
Port the Express server runs on (default: 5000) |
NODE_ENV |
development or production |
MONGODB_URI |
MongoDB Atlas connection string |
JWT_SECRET |
Secret key for signing JWT tokens |
JWT_EXPIRES_IN |
Token expiry duration (e.g. 7d) |
GEMINI_API_KEY |
Google Gemini API key |
MURF_API_KEY |
Murf AI text-to-speech key |
ASSEMBLYAI_API_KEY |
AssemblyAI speech-to-text key |
CLIENT_URL |
Frontend origin for CORS (e.g. http://localhost:5173) |
cp client/.env.example client/.env| Variable | Description |
|---|---|
VITE_API_URL |
Base URL of the Express API (e.g. http://localhost:5000) |
Start the backend server:
cd server
npm run devServer starts at
http://localhost:5000
Start the frontend (in a new terminal):
cd client
npm run devApp opens at
http://localhost:5173
All API routes are prefixed with /api.
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/auth/register |
β | Create a new account |
POST |
/auth/login |
β | Login and get JWT |
GET |
/auth/me |
β | Fetch authenticated user profile |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/resume/upload |
β | Upload and parse a PDF resume |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/interview/start |
β | Start a new interview session |
POST |
/interview/:id/answer |
β | Submit an answer; get AI feedback |
POST |
/interview/:id/end |
β | End session and generate final report |
GET |
/interview/:id |
β | Fetch a specific interview session |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/history |
β | List all past interviews for the user |
GET |
/history/:id |
β | Get detailed results of a past interview |
Auth header format:
Authorization: Bearer <token>
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a new branch:
git checkout -b feature/your-feature-name - Make your changes and commit:
git commit -m "feat: add your feature" - Push to your branch:
git push origin feature/your-feature-name - Open a Pull Request
Please follow the Conventional Commits standard for commit messages.
This project is licensed under the MIT License.
Feel free to use, modify, and distribute it.
Built with β€οΈ using React, Node.js, and Google Gemini AI