Prerequisites
Before you begin, ensure you have:- Node.js (LTS version recommended)
- A MongoDB database (MongoDB Atlas free tier or local instance)
- A Google Gemini API key (get one here)
Setup in 4 steps
Clone and install dependencies
Clone the repository and install packages for both frontend and backend:
Configure environment variables
Create a Getting your MongoDB URI:
.env file in the backend/ directory with your credentials:- For MongoDB Atlas: Navigate to your cluster → Connect → Connect your application → Copy the connection string
- For local MongoDB: Use
mongodb://localhost:27017/resume-generator
Start the development servers
Open two terminal windows and start both servers:Terminal 1 - Backend:The API server will start at The React app will start at
http://localhost:3000Terminal 2 - Frontend:http://localhost:5173The backend uses nodemon for hot reloading, so changes to server code will automatically restart the server.
Create your account
- Open
http://localhost:5173in your browser - Click Register to create a new account
- Enter your email and password (minimum 6 characters)
- You’ll be automatically logged in after registration
Generate your first interview report
Now that you’re set up, let’s create your first interview report:Prepare your materials
You’ll need:
- A job description (paste the full text from a job posting)
- Either a resume file (PDF or DOCX) OR a self-description
For best results, upload a text-based PDF or DOCX resume. Scanned/image-only PDFs may not parse correctly, though the system will attempt to send them directly to Gemini as a fallback.
Submit the form
On the home page:Source: frontend/src/features/interview/pages/Home.jsx:17-24
- Paste the job description in the left panel (required)
- Upload your resume (PDF/DOCX, max 5MB) in the right panel, OR
- Write a self-description if you don’t have a resume ready
- Click Generate My Interview Strategy
Wait for AI analysis
The system will:Behind the scenes, the API makes this call:Source: backend/src/services/ai.service.js:63-70
- Extract text from your resume (if provided)
- Send your profile and job description to Google Gemini
- Generate a structured interview report with match score, questions, skill gaps, and preparation plan
Review your report
Your interview report includes:Source: backend/src/controllers/interview.controller.js:109-117
- Match Score: A 0-100 score indicating how well your profile fits the role
- Technical Questions: Role-specific questions with interviewer intentions and answer strategies
- Behavioral Questions: Soft-skill questions with suggested response frameworks
- Skill Gaps: Areas where your profile doesn’t fully meet requirements, ranked by severity (low/medium/high)
- Preparation Plan: A day-by-day roadmap with specific tasks to prepare effectively
Export your tailored resume (optional)
From the interview report page, you can generate a tailored resume PDF optimized for the specific job:Source: backend/src/controllers/interview.controller.js:172-193
- Click the Generate Resume PDF button
- The system will create an ATS-friendly HTML resume using AI
- Convert it to PDF using Puppeteer
- Download the file
- Highlights relevant experience for the target role
- Uses professional formatting with subtle color accents
- Is optimized for Applicant Tracking Systems (ATS)
- Fits within 1-2 pages
Common issues
MongoDB connection failed
MongoDB connection failed
Error:
MongoServerError: bad authSolutions:- Verify your
MONGO_URIin.envincludes the correct username and password - For MongoDB Atlas, whitelist your IP address:
- Go to Network Access in Atlas
- Click “Add IP Address”
- Either add your current IP or use
0.0.0.0/0for development (not recommended for production)
- Ensure your MongoDB cluster is running
JWT authentication error
JWT authentication error
Error:
secretOrPrivateKey must have a valueSolution:- Ensure
JWT_SECRETis set inbackend/.env - Restart the backend server after adding the environment variable
- The secret should be at least 32 characters long for security
Cannot read uploaded resume
Cannot read uploaded resume
Error: Source: backend/src/controllers/interview.controller.js:70-75
Unable to read the uploaded PDFCauses:- The PDF is image-based (scanned document without text layer)
- The PDF is encrypted or password-protected
- The file is corrupted
- Re-export your resume as a text-based PDF from Word or Google Docs
- Convert the PDF to DOCX and try uploading that instead
- Use the “Quick Self-Description” field as a fallback
CORS errors in browser console
CORS errors in browser console
Error:
Access to XMLHttpRequest blocked by CORS policySolution:- Ensure both servers are running on the correct ports (backend: 3000, frontend: 5173)
- Check that the frontend is making requests to
http://localhost:3000 - Verify CORS is configured with credentials in
backend/src/app.js
Next steps
Installation guide
Detailed setup instructions for development and production environments
Authentication API
Complete documentation of all backend endpoints and request/response schemas