PrepWise is an AI-powered interview preparation platform that helps candidates:
- Generate personalized interview reports from job description + resume + self-description
- Review technical and behavioral interview questions
- Identify skill gaps with severity levels
- Follow a 7-day preparation roadmap
- Generate an updated resume in PDF format tailored to the target job
- User registration and login (JWT + HTTP-only cookie auth)
- Protected routes in frontend
- Logout with token blacklist support on backend
- Upload resume PDF + add job description + self description
- AI generates:
- Match score
- 5 technical questions
- 5 behavioral questions
- Skill gaps (
low,medium,high) - 7-day preparation plan
- Report is persisted in MongoDB
- Users can fetch all previous interview reports
- Open any specific report by ID
- Ownership-restricted report access
- From an existing interview report, generate an updated role-tailored resume
- AI creates resume HTML
- Puppeteer converts HTML to downloadable PDF
- Public landing page (
/) - Auth pages (login/register)
- Protected workspace for report generation
- Interview report view with sections + history sidebar
- Navbar with user info and logout
- React
- React Router
- SCSS
- Axios
- Vite
- Node.js + Express
- MongoDB + Mongoose
- JWT authentication
- Cookie parser + CORS
- Multer (file upload)
pdf-parse(extract text from uploaded resume PDF)@google/genai(Gemini model integration)zod(schema validation)puppeteer(HTML to PDF for updated resume)
PrepWise/
client/ # React frontend
server/ # Express backend
Prerequisites
Make sure you have installed:
- Node.js (v18+ recommended)
- npm
- MongoDB Atlas (or local MongoDB)
- A valid Google GenAI API key
---
## Environment Variables
Create a `.env` file inside `server/`:
```env
PORT=3000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
GOOGLE_GENAI_API_KEY=your_google_genai_api_key
Do not commit
.envfiles to version control.
cd server
npm installcd client
npm installcd server
npm run devBackend runs on: http://localhost:3000
cd client
npm run devFrontend runs on: http://localhost:5173
/→ Public landing page/login→ Login page/register→ Register page/workspace→ Protected report generation page/workspace/interview-report→ Latest/current report view/workspace/interview-report/:interviewID→ Specific report by ID
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/logoutGET /api/auth/getMe
POST /api/interview
Uploads resume + JD + self description and generates reportGET /api/interview
Fetch all reports for logged-in userGET /api/interview/report/:interviewID
Fetch one report by ID (owner only)POST /api/interview/resume/pdf/:interviewReportID
Generate + download updated resume PDF from report context
-
Frontend sends multipart form data:
titlejobDescriptionselfDescriptionresume(PDF file)
-
Backend:
- extracts PDF text using
pdf-parse - calls Gemini to generate interview report JSON
- validates response with Zod
- stores report in MongoDB
- extracts PDF text using
- Frontend calls:
POST /api/interview/resume/pdf/:interviewReportID
- Backend:
- loads report for the current authenticated user
- prompts Gemini to generate resume HTML
- validates JSON response
- renders HTML via Puppeteer
- returns downloadable PDF (
application/pdf)
Ensure backend CORS is configured with:
origin: "http://localhost:5173"credentials: true
If you see secretOrPrivateKey must have a value, verify JWT_SECRET is set in server/.env.
- Ensure
GOOGLE_GENAI_API_KEYis valid - Ensure Puppeteer installed correctly (
npm install puppeteer) - Retry after server restart
- Backend logout route is
POST /api/auth/logout - Frontend must call it as POST (not GET)
withCredentials: trueshould be enabled in Axios instance
npm run dev→ start server in watch mode
npm run dev→ start dev servernpm run build→ build productionnpm run preview→ preview production build
- Use strong
JWT_SECRET - Keep API keys private
- Use
httpOnlycookies for auth token - In production:
- set secure cookie options (
secure: true) - configure proper CORS origin(s)
- run behind HTTPS
- set secure cookie options (
- Toast notifications instead of
window.alert - Report filtering/search
- Saved generated resume versions
- Export interview report as PDF
- Analytics dashboard for improvement tracking
Dipit Madan
Made with ❤️ by Dipit Madan