AI-powered mock interview platform with voice recognition, real-time evaluation, and detailed performance analytics.
- AI Interviewer — Natural conversational AI that asks role-based questions with adaptive difficulty
- Google & Email Auth — Sign in with Google or email/password via Supabase
- Voice Recognition — Speech-to-text powered answers with real-time transcription
- Resume Analysis — Upload your PDF resume and get auto-extracted role, skills, and projects
- Smart Evaluation — AI scores your answers on confidence, communication, and correctness
- Performance Reports — Detailed analytics dashboard with downloadable PDF reports
- Interview History — Track your progress over time with trend charts
- Credit System — Token-based usage system for managing interview attempts
- React 19 with Vite
- Tailwind CSS 4 for styling
- Redux Toolkit for state management
- Supabase for authentication (Google OAuth + email/password)
- Recharts for performance charts
- jsPDF for PDF report generation
- Framer Motion for animations
- Sonner for toast notifications
- Express (Node.js) REST API
- MongoDB with Mongoose
- OpenRouter AI for GPT-4o-mini powered interviews
- JWT for authentication
- Multer for file uploads
- pdfjs-dist for PDF text extraction
- Razorpay for payment processing
- Supabase Admin for token verification
├── client/ # React frontend (Vite)
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ │ ├── AuthModel.jsx
│ │ │ ├── Navbar.jsx
│ │ │ ├── Footer.jsx
│ │ │ ├── Step1SetUp.jsx # Interview setup (role, resume)
│ │ │ ├── Step2Interview.jsx # Live interview flow
│ │ │ ├── Step3Report.jsx # Performance report
│ │ │ ├── Timer.jsx
│ │ │ └── BackButton.jsx
│ │ ├── pages/ # Route pages
│ │ │ ├── Home.jsx
│ │ │ ├── Auth.jsx
│ │ │ ├── Interview.jsx
│ │ │ ├── Pricing.jsx
│ │ │ ├── InterviewHistory.jsx
│ │ │ └── InterviewReport.jsx
│ │ ├── redux/ # Redux store & slices
│ │ ├── utils/ # Supabase client & constants
│ │ ├── assets/ # Images & videos
│ │ ├── App.jsx
│ │ └── main.jsx
│ ├── .env.example
│ └── package.json
│
├── server/ # Express backend
│ ├── config/
│ │ ├── connectDb.js # MongoDB connection
│ │ ├── supabase.js # Supabase admin client
│ │ └── token.js # JWT token generation
│ ├── controllers/
│ │ ├── auth.controller.js
│ │ ├── interview.controller.js
│ │ ├── payment.controller.js
│ │ └── user.controller.js
│ ├── middlewares/
│ │ ├── isAuth.js # JWT auth middleware
│ │ └── multer.js # File upload config
│ ├── models/
│ │ ├── user.model.js
│ │ ├── interview.model.js
│ │ └── payment.model.js
│ ├── routes/
│ │ ├── auth.route.js
│ │ ├── interview.route.js
│ │ ├── payment.route.js
│ │ └── user.route.js
│ ├── services/
│ │ ├── openRouter.services.js # AI API client
│ │ └── razorpay.services.js # Razorpay payment client
│ ├── index.js # Express entry point
│ ├── .env.example
│ └── package.json
│
├── .gitignore
├── LICENSE
└── README.md
- Node.js 18+
- MongoDB instance (local or Atlas)
- OpenRouter API key (get one free)
- Supabase project (create one free) with Google Auth enabled
- Supabase service role key (Project Settings → API)
# Clone the repository
git clone https://github.com/yourusername/interviewiq-ai.git
cd interviewiq-ai
# Install server dependencies
cd server
npm install
# Install client dependencies
cd ../client
npm install-
Server — Copy
server/.env.exampletoserver/.envand fill in:PORT=8000 CLIENT_ORIGIN=http://localhost:5173 MONGODB_URL="your_mongodb_connection_string" JWT_SECRET="your_jwt_secret" OPENROUTER_API_KEY="your_openrouter_api_key" RAZORPAY_KEY_ID="your_razorpay_key_id" RAZORPAY_KEY_SECRET="your_razorpay_key_secret" SUPABASE_URL="your_supabase_url" SUPABASE_SERVICE_ROLE_KEY="your_supabase_service_role_key"
-
Client — Copy
client/.env.exampletoclient/.envand fill in:VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_PUBLISHABLE_KEY=your_supabase_anon_key VITE_SERVER_URL=http://localhost:8000
# Terminal 1 — Start the backend
cd server
npm run dev
# Terminal 2 — Start the frontend
cd client
npm run devVisit http://localhost:5173 in your browser.
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/login |
No | Google / email authentication |
| POST | /api/auth/signup |
No | Email & password registration |
| GET | /api/auth/logout |
No | Clear auth cookie |
| GET | /api/user/current-user |
Yes | Get authenticated user |
| POST | /api/interview/resume |
Yes | Upload & analyze resume |
| POST | /api/interview/generate-questions |
Yes | Generate AI questions |
| POST | /api/interview/submit-answer |
Yes | Submit & evaluate answer |
| POST | /api/interview/finish |
Yes | Finish & calculate scores |
| GET | /api/interview/get-interview |
Yes | List user's interviews |
| GET | /api/interview/report/:id |
Yes | Get interview report |
| GET | /api/payment/plans |
No | Get credit plans & Razorpay key |
| POST | /api/payment/create-order |
Yes | Create Razorpay payment order |
| POST | /api/payment/verify |
Yes | Verify payment & grant credits |
| GET | /api/payment/history |
Yes | Get user's payment history |
MIT — see LICENSE.