ATS Resume Scoring & Optimization Platform
A full-stack web application that helps job seekers optimize their resumes for Applicant Tracking Systems (ATS). Upload your resume, paste a job description, and get instant ATS compatibility scores with actionable recommendations.
- π Resume Upload - Support for PDF and DOCX formats
- π Rich Text Job Description Editor - Built with Tiptap
- π― ATS Scoring - Get detailed compatibility scores (0-100)
- π Keyword Analysis - Match your resume with job requirements
- π‘ Smart Recommendations - Actionable suggestions to improve your score
- π Side-by-Side Comparison - See resume and job description differences
- π History Tracking - Access all your past analyses
- π Secure Authentication - JWT-based user authentication
- π Modern UI - Dark theme with smooth animations
- React 18 - UI framework
- TypeScript - Type safety
- Vite - Lightning-fast build tool
- React Router v7 - Client-side routing
- Zustand - State management
- TailwindCSS - Utility-first styling
- Tiptap - Rich text editor
- Lucide React - Icon library
- Node.js - Runtime environment
- Express - Web framework
- MongoDB + Mongoose - Database
- JWT - Authentication tokens
- Multer - File upload handling
- pdf-parse - PDF text extraction
- mammoth - DOCX text extraction
- Zod - Schema validation
- Docker & Docker Compose - Containerization
- Playwright - E2E testing
- Vitest - Unit testing
- ESLint - Code linting
- Vercel - Deployment ready
- Node.js 22 or higher
- MongoDB 7 or higher (or use Docker Compose)
- npm or pnpm
-
Clone the repository
git clone <repository-url> cd resume-fix
-
Install dependencies
npm install
-
Set up environment variables
Create a
.envfile in the root directory:# Server Configuration PORT=3001 NODE_ENV=development # Database MONGODB_URI=mongodb://localhost:27017/resume_ats # Authentication JWT_SECRET=your_super_secret_key_change_this_in_production # CORS CLIENT_ORIGIN=http://localhost:5173,http://localhost:3001 # File Upload MAX_FILE_SIZE_MB=5 UPLOAD_DIR=./uploads
-
Start MongoDB
# Using Docker docker run -d -p 27017:27017 --name mongodb mongo:7 # Or use your local MongoDB installation
-
Run the development servers
# Start both frontend and backend concurrently npm run dev # Or run them separately: npm run client:dev # Frontend on http://localhost:5173 npm run server:dev # Backend on http://localhost:3001
-
Clone the repository
git clone <repository-url> cd resume-fix
-
Update environment variables in docker-compose.yml
# Change JWT_SECRET to a secure value JWT_SECRET: your_production_secret_key
-
Start all services
docker-compose up -d
-
Access the application
- Frontend: http://localhost:3001
- MongoDB: localhost:27017
# Build both frontend and backend
npm run build:all
# Or build separately:
npm run build # Frontend
npm run build:server # Backendnpm startdocker build -t resume-fix .
docker run -p 3001:3001 \
-e MONGODB_URI=mongodb://host.docker.internal:27017/resume_ats \
-e JWT_SECRET=your_secret \
resume-fixnpm test # Run once
npm run test:watch # Watch modenpm run test:e2e # Run Playwright testsnpm run test:perf # Load testingnpm run test:security # Security checksresume-fix/
βββ api/ # Backend source
β βββ app.ts # Express app setup
β βββ server.ts # Server entry point
β βββ db/ # Database connection
β βββ middleware/ # Auth & validation
β βββ models/ # Mongoose models
β βββ routes/ # API routes
β βββ services/ # Business logic
β βββ utils/ # Helper functions
βββ src/ # Frontend source
β βββ App.tsx # Main app component
β βββ main.tsx # Entry point
β βββ components/ # React components
β βββ pages/ # Page components
β βββ stores/ # Zustand stores
β βββ hooks/ # Custom hooks
β βββ utils/ # Utilities
βββ e2e/ # E2E tests
βββ scripts/ # Utility scripts
βββ uploads/ # Uploaded files
βββ docker-compose.yml # Docker setup
βββ Dockerfile # Production build
βββ DOCUMENTATION.md # Detailed docs
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 3001 |
NODE_ENV |
Environment | development |
MONGODB_URI |
MongoDB connection string | mongodb://localhost:27017/resume_ats |
JWT_SECRET |
Secret for JWT signing | Required |
CLIENT_ORIGIN |
Allowed CORS origins | http://localhost:5173 |
MAX_FILE_SIZE_MB |
Max upload size | 5 |
UPLOAD_DIR |
Upload directory | ./uploads |
POST /api/auth/register- Create new accountPOST /api/auth/login- Login userPOST /api/auth/logout- Logout userGET /api/auth/me- Get current user
GET /api/resumes- List all resumesPOST /api/resumes- Upload new resumeDELETE /api/resumes/:id- Delete resume
GET /api/jds- List all job descriptionsPOST /api/jds- Create job descriptionPUT /api/jds/:id- Update job descriptionDELETE /api/jds/:id- Delete job description
POST /api/runs- Run ATS analysisGET /api/runs- List all runsGET /api/runs/:id- Get specific run
The platform analyzes:
- Keyword Matching - How well your resume matches required skills
- Format Compatibility - Resume structure and readability
- Content Quality - Completeness and relevance
- Experience Alignment - Match with job requirements
- Upload PDF or DOCX file
- Extract text using specialized parsers
- Parse and structure content
- Store securely with metadata
- Rich text formatting (bold, italic, lists, links)
- Auto-save functionality
- Placeholder guidance
- Clean HTML output
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Passwords are hashed using bcrypt
- JWT tokens for session management
- Input validation with Zod
- File type verification
- Rate limiting on API endpoints
- Helmet.js for security headers
- XSS protection with sanitize-html
For detailed documentation, see DOCUMENTATION.md
For issues or questions, please open an issue on the repository.
Built with modern web technologies and best practices for security, performance, and user experience.