A full-stack MERN application that uses Google Gemini LLM to analyze resumes, provide career guidance, and generate interview questions.
- Resume Upload & Processing: Upload PDF or DOCX resumes with automatic text extraction
- AI-Powered Analysis: Comprehensive resume analysis using Google Gemini
- Skills extraction (technical & soft)
- Project improvement suggestions
- ATS compatibility feedback
- Strengths and areas for improvement
- Interview Preparation: Role-based technical and behavioral questions
- Career Guidance: Job role recommendations and skill development paths
- History Tracking: Store and retrieve previous analyses
- React.js
- Custom CSS (Tailwind-inspired)
- Axios for API calls
- React Markdown for formatted display
- Node.js & Express.js
- MongoDB with Mongoose
- Multer for file uploads
- PDF-Parse & Mammoth for document parsing
- Google Gemini AI API
- Node.js (v14 or higher)
- MongoDB (local installation or MongoDB Atlas)
- Google Gemini API Key
cd resume-analyzer# Navigate to backend directory
cd backend
# Install dependencies
npm install
# Create .env file
cp .env.example .envEdit .env file with your credentials:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/resume-analyzer
GEMINI_API_KEY=your_actual_gemini_api_key_here
NODE_ENV=development# Navigate to frontend directory (from project root)
cd frontend
# Install dependencies
npm installTerminal 2 - Frontend:
cd frontend
npm start
# React app will open at http://localhost:3000- Upload Resume: Drag and drop or click to upload a PDF/DOCX resume
- View Extracted Text: See the parsed resume content
- Generate Analysis: Click tabs to generate:
- Resume Analysis
- Interview Questions
- Career Guidance
- Review Results: AI-powered insights displayed in markdown format
resume-analyzer/
├── backend/
│ ├── config/
│ │ └── db.js # MongoDB connection
│ ├── controllers/
│ │ └── resumeController.js # Request handlers
│ ├── middleware/
│ │ ├── upload.js # Multer configuration
│ │ └── errorHandler.js # Error handling
│ ├── models/
│ │ ├── Resume.js # Resume schema
│ │ └── Analysis.js # Analysis schema
│ ├── routes/
│ │ └── api.js # API routes
│ ├── services/
│ │ └── geminiService.js # Gemini AI integration
│ ├── utils/
│ │ └── fileParser.js # PDF/DOCX parsing
│ ├── .env.example # Environment variables template
│ ├── package.json
│ └── server.js # Entry point
│
├── frontend/
│ ├── public/
│ │ └── index.html
│ ├── src/
│ │ ├── components/
│ │ │ ├── FileUpload.js # Upload component
│ │ │ └── AnalysisDisplay.js # Results display
│ │ ├── services/
│ │ │ └── api.js # API service
│ │ ├── App.js # Main component
│ │ ├── index.js # Entry point
│ │ └── index.css # Styles
│ └── package.json
│
└── README.md
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/resume/upload |
Upload and parse resume |
| POST | /api/ai/analyze |
Generate resume analysis |
| POST | /api/ai/interview |
Generate interview questions |
| POST | /api/ai/career |
Get career guidance |
| GET | /api/history/:resumeId |
Get analysis history |
| GET | /api/resumes |
Get all uploaded resumes |