AI-powered mock interview SaaS for internship and placement prep.
- Next.js 15 (App Router, TypeScript strict mode)
- MongoDB / Mongoose — database
- Cloudinary — PDF resume storage
- Gemini 1.5 Flash — question generation, answer evaluation, ATS analysis
- JWT (access + refresh rotation) — authentication
- Tailwind CSS — styling
npm install
cp .env.example .env.local # fill in real values
npm run devOpen http://localhost:3000.
| Variable | Description |
|---|---|
MONGODB_URI |
MongoDB Atlas connection string |
JWT_ACCESS_SECRET |
Long random string (generate: openssl rand -base64 48) |
JWT_REFRESH_SECRET |
Different long random string |
ACCESS_TOKEN_EXPIRES_IN |
e.g. 15m |
REFRESH_TOKEN_EXPIRES_IN |
e.g. 7d |
CLOUDINARY_CLOUD_NAME |
From cloudinary.com → Dashboard |
CLOUDINARY_API_KEY |
From cloudinary.com → Dashboard |
CLOUDINARY_API_SECRET |
From cloudinary.com → Dashboard |
GEMINI_API_KEY |
From aistudio.google.com |
INTERVIEW_QUESTION_COUNT |
Number of questions per session (default: 5) |
- Register, login, logout, refresh, /me
- JWT access + refresh token rotation with theft detection
- Route protection via
middleware.ts
- Upload PDF → Cloudinary + extract text via pdf-parse
- List, get, delete, set-active
- Per-user versioning, 10-resume cap
- Create session → Gemini generates tailored questions
- Submit answers → Gemini evaluates immediately
- Complete session → overall score computed
- Full results view per session
- Paste any job description → Gemini analyses keyword match
- Returns score (0–100), matched keywords, missing keywords, suggestions
- Update name and target companies
- Change password (with current-password verification)
| Route | Description |
|---|---|
/ |
Landing page |
/login |
Login |
/register |
Register |
/dashboard |
Home: stats + recent sessions |
/resumes |
Manage resume versions |
/interviews |
All interview sessions |
/interviews/new |
Start a new interview |
/interviews/[id] |
Live interview session |
/interviews/[id]/results |
Post-interview results + feedback |
/ats-scanner |
ATS keyword analysis |
/profile |
Edit profile + change password |
npm run dev # start dev server
npm run build # production build
npm run typecheck # TypeScript check without building
npm run lint # ESLint