A full-stack web application that analyzes resumes against job descriptions using AI-powered ATS (Applicant Tracking System) scoring.
- User Authentication: Register and login functionality
- Resume Upload: Upload PDF resumes for analysis
- AI Analysis: Get detailed analysis of your resume
- ATS Scoring: Score your resume against job descriptions
- Keyword Extraction: Identify missing keywords in your resume
- Suggestions: Get personalized improvement suggestions
- Node.js
- Express.js
- MongoDB with Mongoose
- JWT Authentication
- Multer for file uploads
- PDF parsing and generation
- React 19
- Vite
- React Router DOM
- Axios
- CSS3
- Node.js (v18+)
- MongoDB (local or Atlas)
- npm or yarn
cd ATS-Resume-Analyzercd backend
npm installCreate a .env file in the backend directory:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/ats-resume-analyzer
JWT_SECRET=your_jwt_secret_key
GEMINI_API_KEY=your_google_gemini_api_keycd frontend
npm installcd backend
npm startThe backend will run on http://localhost:5000
cd frontend
npm run devThe frontend will run on http://localhost:5173
ATS-Resume-Analyzer/
├── backend/
│ ├── controllers/
│ │ ├── authController.js
│ │ └── resumeController.js
│ ├── middleware/
│ │ ├── authMiddleware.js
│ │ └── upload.js
│ ├── models/
│ │ ├── Resume.js
│ │ └── User.js
│ ├── routes/
│ │ ├── authRoutes.js
│ │ └── resumeRoutes.js
│ ├── utils/
│ │ ├── aiAnalyzer.js
│ │ ├── atsScore.js
│ │ ├── keywordExtractor.js
│ │ ├── pdfGenerator.js
│ │ ├── resumeParser.js
│ │ └── suggestionEngine.js
│ ├── package.json
│ └── server.js
│
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── Contact/
│ │ │ ├── Home/
│ │ │ ├── Login/
│ │ │ ├── Navbar/
│ │ │ ├── ProtectedRoute/
│ │ │ ├── Register/
│ │ │ └── YourResumes/
│ │ ├── utils/
│ │ │ └── api.js
│ │ ├── App.css
│ │ ├── App.jsx
│ │ ├── index.css
│ │ └── main.jsx
│ ├── package.json
│ ├── vite.config.js
│ └── index.html
│
├── GET_CONNECTION_STRING.md
├── MONGODB_ATLAS_SETUP.md
└── README.md
POST /api/auth/register- Register a new userPOST /api/auth/login- Login userGET /api/auth/me- Get current user
POST /api/resumes/upload- Upload a resumeGET /api/resumes- Get all resumes for current userGET /api/resumes/:id- Get specific resumeDELETE /api/resumes/:id- Delete a resumePOST /api/resumes/analyze/:id- Analyze a resume
| Variable | Description |
|---|---|
| PORT | Server port (default: 5000) |
| MONGODB_URI | MongoDB connection string |
| JWT_SECRET | Secret key for JWT |
| GEMINI_API_KEY | Google Gemini API key for AI analysis |
| Variable | Description |
|---|---|
| VITE_API_URL | Backend API URL |
ISC
This project is configured for full-stack Vercel deployment with serverless API functions.
Go to your Vercel project Settings → Environment Variables and add:
| Variable | Description |
|---|---|
MONGODB_URI |
MongoDB Atlas connection string (mongodb+srv://...) |
JWT_SECRET |
A secure random string for JWT tokens |
GEMINI_API_KEY |
Google Gemini API key (optional, for AI analysis) |
- Push all changes to GitHub
- Go to Vercel → Add Project
- Import your repository
- Vercel will auto-detect the configuration from
vercel.json - Click "Deploy"
├── api/
│ ├── auth.js # Authentication API routes
│ └── resume.js # Resume upload & analysis API
├── frontend/
│ ├── src/ # React frontend source
│ └── dist/ # Built frontend (generated)
├── vercel.json # Vercel configuration
└── package.json # Root package with build script
POST /api/auth/register- Register userPOST /api/auth/login- Login userGET /api/auth/me- Get current userPOST /api/resume/upload- Upload resumeGET /api/resume- List resumesGET /api/resume/:id- Get resumeDELETE /api/resume/:id- Delete resumePOST /api/resume/analyze/:id- Analyze resume