An Intelligent AI-Powered Interview Platform β Parse Resume, Generate Questions, Evaluate in Real-time.
Demo Β· Report Bug Β· Request Feature
AI Interviewer is a full-stack web application that conducts AI-powered mock interviews for candidates. This platform:
- Uploads and parses your Resume (PDF)
- Generates intelligent interview questions based on Job Description and Topics (via RAG pipeline)
- Asks real-time follow-up questions (through Socket.io streaming)
- Evaluates every answer with AI and provides a detailed feedback report
- Shows relevant jobs via the Job Board feature
| Feature | Description |
|---|---|
| π Resume Parsing | PDF upload β Text extraction β Semantic chunking |
| π§ RAG Pipeline | LangChain + OpenAI Embeddings β Context-aware question generation |
| π¬ Real-time Interview | Live follow-up questions via Socket.io streaming |
| π AI Evaluation | Score and feedback for each answer using Groq LLM |
| π Dashboard | Interview history, scores, and performance analytics |
| πΌ Job Board | Live job listings from Adzuna API |
| π Auth System | JWT-based secure authentication |
| βοΈ Cloud Storage | Resume files stored on Cloudinary |
| β‘ Redis Cache | For fast job search results and API responses |
- Runtime: Node.js + Express.js
- Database: MongoDB (Mongoose)
- AI / LLM: Groq SDK, LangChain, OpenAI Embeddings
- Real-time: Socket.io
- File Storage: Cloudinary + Multer
- Cache: Redis (ioredis)
- Auth: JWT (jsonwebtoken + bcryptjs)
- Security: Helmet, CORS, express-rate-limit
- Logging: Winston + Morgan
- Job Search API: Adzuna
- Framework: React 18 + Vite
- State Management: Zustand + TanStack React Query
- Routing: React Router v6
- UI / Animations: Framer Motion, Lucide React, React Icons
- Styling: Tailwind CSS
- Forms: React Hook Form
- Charts: Recharts
- Notifications: React Hot Toast
- Real-time: Socket.io Client
- Markdown: React Markdown
AI-Interviewer/
βββ backend/
β βββ src/
β βββ server.js # Entry point β HTTP + WebSocket server
β βββ app.js # Express config β middleware, routes
β βββ socket.js # Real-time follow-up Q&A logic
β βββ config/ # DB, Cloudinary, Groq, Logger
β βββ controllers/ # Route handlers
β β βββ auth.controller.js
β β βββ resume.controller.js
β β βββ interview.controller.js
β β βββ session.controller.js
β β βββ user.controller.js
β βββ services/ # Business logic & AI integrations
β β βββ ai.service.js # LLM orchestration
β β βββ rag.service.js # RAG pipeline
β β βββ chunking.service.js # Semantic document splitting
β β βββ optimizer.service.js
β βββ models/ # Mongoose schemas
β β βββ User.model.js
β β βββ Resume.model.js
β β βββ Interview.model.js
β β βββ Session.model.js
β βββ routes/ # API route definitions
β βββ middleware/ # Auth, validation, error handling
β βββ utils/ # Helpers β AppError, JWT, normalizer
β
βββ frontend/
βββ src/
βββ App.jsx
βββ main.jsx
βββ pages/ # LandingPage, Dashboard, Interview, Jobs, etc.
βββ components/ # Reusable UI components
βββ context/ # React context providers
βββ hooks/ # Custom React hooks
βββ services/ # API call functions (axios)
βββ store/ # Zustand state stores
βββ utils/ # Helper utilities
The following must be installed before proceeding:
- Node.js v18+
- MongoDB Atlas account (or local MongoDB)
- Redis (local or cloud β Upstash/Redis Cloud)
- Groq API Key β Free
- OpenAI API Key β For Embeddings
- Cloudinary Account β For File Storage
- Adzuna API β For Job Search (optional)
1. Clone the Repository
git clone https://github.com/your-username/AI-Interviewer.git
cd AI-Interviewer2. Backend Setup
cd backend
npm installCreate backend/.env file (by copying .env.example):
cp .env.example .envFill in your values in .env (see below π)
3. Frontend Setup
cd ../frontend
npm installCreate frontend/.env file:
cp .env.example .env# Server
PORT=5000
NODE_ENV=development
# MongoDB
MONGO_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/ai_interview_db
# JWT
JWT_SECRET=your_super_secret_jwt_key_min_32_chars
JWT_EXPIRE=7d
JWT_REFRESH_SECRET=your_refresh_token_secret_min_32_chars
JWT_REFRESH_EXPIRE=30d
# Groq AI (Free LLM)
GROQ_API_KEY=your_groq_api_key_here
# OpenAI (For Embeddings)
OPENAI_API_KEY=your_openai_api_key_here
# Cloudinary (File Storage)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Frontend URL (CORS)
CLIENT_URL=http://localhost:5173
# Redis
REDIS_ENABLED=true
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
# Adzuna Job Search (Optional)
ADZUNA_APP_ID=your_app_id
ADZUNA_APP_KEY=your_app_key
ADZUNA_COUNTRY=inVITE_API_URL=http://localhost:5000Backend (Terminal 1):
cd backend
npm run devBackend will start at http://localhost:5000.
Frontend (Terminal 2):
cd frontend
npm run devFrontend will open at http://localhost:5173.
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Register a new user |
POST |
/api/auth/login |
Login and get JWT token |
POST |
/api/resumes/upload |
Upload Resume PDF |
GET |
/api/resumes |
View all resumes |
POST |
/api/interviews |
Create a new interview |
GET |
/api/interviews/:id |
Interview details |
POST |
/api/sessions |
Start an interview session |
POST |
/api/sessions/:id/answer |
Submit and evaluate answer |
GET |
/api/sessions/:id/report |
Final feedback report |
GET |
/api/users/dashboard |
Dashboard stats |
Resume PDF Upload
β
Text Extraction (pdf-parse)
β
Semantic Chunking (LangChain TextSplitters)
β
Vector Embeddings (OpenAI)
β
Save to Vector Store
β
Create Interview (Job Role + Topics)
β
Query Optimization (optimizer.service.js)
β
RAG Retrieval β fetch relevant resume chunks
β
Question Generation (Groq LLM)
β
Real-time Interview (Socket.io)
β
Answer Evaluation (Groq LLM)
β
Generate Final Report
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create your feature branch:
git checkout -b feature/AmazingFeature - Commit your changes:
git commit -m 'Add some AmazingFeature' - Push the branch:
git push origin feature/AmazingFeature - Open a Pull Request
This project is under the MIT License.
Aftab Alam β AI Project
Made with β€οΈ using Groq, React, and MongoDB
β If you find this project helpful, please give it a Star!