An AI-powered fullstack web application that analyzes your resume, generates personalized interview reports, and creates a professional PDF resume β all in one place.
- π JWT Authentication β Secure register, login & logout with cookie-based tokens
- π« Token Blacklisting β Invalidate tokens on logout for enhanced security
- π Resume Upload β Upload your resume via Multer file handling
- π€ AI Interview Report β AI analyzes your resume and generates a structured interview report
- π Report Management β View, store, and revisit all your past interview reports
- π PDF Resume Generation β Converts AI-generated content into a downloadable PDF using Puppeteer
- π‘οΈ Protected Routes β Auth-guarded pages on both frontend and backend
- β Zod Validation β Strict schema validation for all AI responses
| Technology | Purpose |
|---|---|
| Node.js + Express | REST API server |
| MongoDB Atlas + Mongoose | Database & ODM |
| JWT + Cookies | Authentication |
| Multer | Resume file uploads |
| Zod | AI response schema validation |
| Puppeteer | PDF generation |
| AI Service (Gemini/OpenAI) | Interview report generation |
| Technology | Purpose |
|---|---|
| React + Vite | UI framework & build tool |
| React Router | Client-side routing & protected routes |
| SCSS | Styling |
| Axios | HTTP requests (service layer) |
| Context API | Global state management |
| Custom Hooks | Reusable logic (useAuth, useInterview) |
Interview-AI/
βββ Backend/
β βββ controllers/
β β βββ authController.js # Register, Login, Logout, GetMe
β β βββ interviewController.js # Generate report, Get reports
β βββ models/
β β βββ userModel.js # User schema
β β βββ blacklistModel.js # Token blacklist schema
β β βββ interviewReportModel.js # AI report schema
β βββ routes/
β β βββ authRoutes.js
β β βββ interviewRoutes.js
β βββ middleware/
β β βββ authMiddleware.js # JWT verification
β βββ services/
β β βββ aiService.js # AI integration logic
β βββ server.js
β
βββ Frontend/
βββ src/
β βββ pages/
β β βββ Login.jsx
β β βββ Register.jsx
β β βββ Home.jsx
β βββ context/
β β βββ AuthContext.jsx
β β βββ InterviewContext.jsx
β βββ hooks/
β β βββ useAuth.js
β β βββ useInterview.js
β βββ services/
β β βββ api.js # Axios instance + API calls
β βββ App.jsx
βββ vite.config.js
βββββββββββββββββββββββββββββββββββ
β UI Components β β React Pages & Components
βββββββββββββββββββββββββββββββββββ€
β Custom Hooks β β useAuth, useInterview
βββββββββββββββββββββββββββββββββββ€
β Context / State Management β β AuthContext, InterviewContext
βββββββββββββββββββββββββββββββββββ€
β Service Layer β β Axios API calls
βββββββββββββββββββββββββββββββββββ
User uploads resume
β
Multer saves file β Backend receives it
β
AI Service processes resume
β
Zod validates AI response schema
β
Report saved to MongoDB
β
Frontend fetches & displays report
β
User downloads PDF (via Puppeteer)
- Node.js v18+
- MongoDB Atlas account
- AI API key (Google Gemini or OpenAI)
git clone https://github.com/raimaAsghar/Interview-AI.git
cd Interview-AIcd Backend
npm installCreate a .env file in the Backend/ directory:
PORT=3000
MONGO_URI=your_mongodb_atlas_connection_string
JWT_SECRET=your_jwt_secret_key
AI_API_KEY=your_ai_api_key
CLIENT_URL=http://localhost:5173Start the backend server:
npm run devcd Frontend
npm install
npm run devThe app will be running at http://localhost:5173
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /register |
Register a new user | β |
| POST | /login |
Login & get token | β |
| POST | /logout |
Logout & blacklist token | β |
| GET | /me |
Get current user info | β |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /generate |
Upload resume & generate AI report | β |
| GET | /reports |
Get all reports for current user | β |
| GET | /reports/:id |
Get a single report by ID | β |
| POST | /resume-pdf |
Generate resume PDF via Puppeteer | β |
Register/Login
β
JWT Token β Stored in HttpOnly Cookie
β
Every request β authMiddleware verifies token
β
Logout β Token added to Blacklist collection
β
Blacklisted tokens are rejected on all future requests
- Voice-based mock interview mode
- Interview question practice with AI feedback
- Dashboard with analytics across reports
- Email notifications for report completion
- Support for multiple resume formats (DOCX, LinkedIn import)
Raima Asghar
- GitHub: @raimaAsghar
If you found this project helpful, please β star the repo!