A modern, full-stack web application that uses Artificial Intelligence to analyze resumes against job descriptions. It mimics Applicant Tracking Systems (ATS) used by major corporations, providing candidates with a match score and actionable feedback on missing keywords.
- Features
- Tech Stack
- Architecture
- Prerequisites
- Installation & Setup
- Configuration
- Deployment
- Usage
- Troubleshooting
- Contributing
- License
- π Secure Authentication: Seamless login via Google OAuth using
react-oauth/google. - π PDF Parsing: Robust extraction of text from PDF resumes using
pdfplumber. - π§ AI Scoring: Uses Sentence-BERT (SBERT) to calculate semantic similarity between the resume and job description, not just keyword matching.
- π Keyword Analysis: Identifies critical hard skills and keywords missing from the resume.
- π¨ Modern UI/UX: Responsive, glassmorphism-inspired interface built with React and Tailwind CSS.
- πΎ Session Persistence: Users stay logged in across page refreshes.
- π Visual Feedback: Animated progress bars and color-coded score indicators.
- Framework: React.js (v18+)
- Styling: Tailwind CSS
- Icons: Lucide React
- Auth: Google OAuth 2.0
- HTTP Client: Axios
- Framework: Django REST Framework (DRF)
- Language: Python 3.11+
- ML Libraries:
sentence-transformers(for vector embeddings)scikit-learn(for cosine similarity)pdfplumber(for PDF text extraction)numpy
- Database: PostgreSQL 15+
- Production Server: Gunicorn with WhiteNoise
- Containerization: Docker & Docker Compose
- Deployment: Render, AWS, or any Docker-compatible platform
The application follows a decoupled client-server architecture:
-
Frontend (React): Handles user interaction, file drag-and-drop, and displays results. It communicates with the backend via REST API.
-
Backend (Django):
- Receives the PDF and Job Description.
- Parses the PDF text.
- Generates vector embeddings for both texts using a pre-trained Transformer model (
all-MiniLM-L6-v2). - Calculates the cosine similarity score.
- Extracts keywords and identifies gaps.
- Returns JSON response to the frontend.
-
Database (PostgreSQL): Stores user metadata and analysis history with ACID compliance and advanced features.
Before you begin, ensure you have the following installed:
- Docker Desktop (for containerized setup) - Recommended
- Node.js (v16 or higher)
- Python (v3.11 or higher)
- PostgreSQL (v15 or higher) - if running locally without Docker
This method sets up the database, backend, and frontend automatically.
-
Clone the repository:
git clone https://github.com/Co-vengers/ATS-Optimizer cd ATS-Optimizer -
Create
.envfile in theBackenddirectory:# Database Configuration DB_NAME=ats_db DB_USER=postgres DB_PASSWORD=your_secure_password DB_HOST=db DB_PORT=5432 # Django Configuration SECRET_KEY=your_secret_key_here DEBUG=True ALLOWED_HOSTS=localhost,127.0.0.1
-
Build and Run:
docker-compose up --build
-
Access the App:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- Admin Panel: http://localhost:8000/admin
Ensure your local PostgreSQL server is running and create a database:
# Connect to PostgreSQL
psql -U postgres
# Create database
CREATE DATABASE ats_db;
# Create user (optional)
CREATE USER ats_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE ats_db TO ats_user;
# Exit
\qcd Backend
# Create Virtual Environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install Dependencies
pip install -r requirements.txt
# Create .env file
cat > .env << EOF
DB_NAME=ats_db
DB_USER=postgres
DB_PASSWORD=your_password
DB_HOST=localhost
DB_PORT=5432
SECRET_KEY=your_secret_key_here
DEBUG=True
EOF
# Run Migrations
python manage.py makemigrations
python manage.py migrate
# Create Superuser (optional)
python manage.py createsuperuser
# Start Server
python manage.py runservercd frontend
# Install Dependencies
npm install
# Create .env file (if needed)
echo "REACT_APP_API_URL=http://localhost:8000" > .env
# Start React App
npm startTo enable Google Login, you need a Client ID:
- Go to the Google Cloud Console.
- Create a new project.
- Navigate to APIs & Services > Credentials.
- Create OAuth Client ID (Application Type: Web Application).
- Add Authorized JavaScript Origins:
http://localhost:3000(for development)- Your production URL (for production)
- Add Authorized Redirect URIs:
http://localhost:3000- Your production URL
- Copy the Client ID and add it to your frontend configuration.
# Database Configuration (PostgreSQL)
DB_NAME=ats_db
DB_USER=postgres
DB_PASSWORD=your_secure_password
DB_HOST=localhost
DB_PORT=5432
# For Render or other platforms using DATABASE_URL
DATABASE_URL=postgresql://user:password@host:5432/database
# Django Configuration
SECRET_KEY=your_secret_key_here
DEBUG=False
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
# CORS Configuration
CORS_ALLOWED_ORIGINS=https://your-frontend-url.com,http://localhost:3000
# Security (Production only)
SECURE_SSL_REDIRECT=True
SESSION_COOKIE_SECURE=True
CSRF_COOKIE_SECURE=TrueREACT_APP_API_URL=http://localhost:8000
REACT_APP_GOOGLE_CLIENT_ID=your_google_client_id_here-
Create PostgreSQL Database on Render:
- Go to Render Dashboard β New β PostgreSQL
- Name:
ats-postgres - Plan: Free (or paid for production)
- Note the Internal Database URL
-
Deploy Backend:
- Push your code to GitHub
- Go to Render Dashboard β New β Web Service
- Connect your repository
- Configure:
- Root Directory:
Backend - Environment: Docker
- Build Command:
chmod +x build.sh && ./build.sh - Start Command:
gunicorn backend.wsgi:application --bind 0.0.0.0:$PORT
- Root Directory:
- Add environment variables (SECRET_KEY, DATABASE_URL, etc.)
-
Deploy Frontend:
- Create a new Static Site on Render
- Root Directory:
frontend - Build Command:
npm install && npm run build - Publish Directory:
build
The application is containerized and can be deployed to:
- AWS (ECS, Elastic Beanstalk)
- Google Cloud (Cloud Run, App Engine)
- Azure (Container Instances, App Service)
- DigitalOcean (App Platform)
- Heroku
Refer to platform-specific documentation for deployment instructions.
-
Login: Sign in using your Google Account.
-
Input Data:
- Paste the Job Description (JD) into the text area.
- Upload your Resume (PDF format only).
-
Analyze: Click "Analyze My Resume".
-
Review Results:
- Score: See your match percentage (0-100%).
- Missing Keywords: Review the list of skills found in the JD but missing from your resume.
-
Optimize: Update your resume with the missing keywords and re-upload to improve your score.
Cause: Mismatch between folder names (e.g., Backend vs backend) or missing __init__.py.
Fix: Ensure your inner project folder is named backend (lowercase) and contains an __init__.py file. Check manage.py to ensure it points to backend.settings.
Cause: Django cannot connect to PostgreSQL with the provided credentials.
Fix:
- Verify the
DB_PASSWORDin your.envfile matches your PostgreSQL password - Check that
DB_HOSTandDB_PORTare correct - For Docker: ensure
docker-compose.ymlcredentials match your.env - Test connection:
psql -U postgres -h localhost -d ats_db
Cause: Database migrations haven't been run.
Fix:
python manage.py makemigrations
python manage.py migrateCause: Insufficient disk space during Docker build.
Fix:
# Clean up Docker resources
docker system prune -a --volumes
# Check disk space
df -h
# If needed, use CPU-only PyTorch (lighter)
# Update requirements.txt to use torch CPU versionCause: package-lock.json is out of sync with package.json.
Fix: Run npm install instead of npm ci, or delete package-lock.json and run npm install again.
Cause: Another service is using port 8000 or 3000.
Fix:
# Find and kill the process
# Linux/Mac:
lsof -ti:8000 | xargs kill -9
lsof -ti:3000 | xargs kill -9
# Windows:
netstat -ano | findstr :8000
taskkill /PID <PID> /FContributions 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
Please ensure:
- Code follows PEP 8 (Python) and ESLint (JavaScript) standards
- All tests pass
- Documentation is updated
This project is licensed under the MIT License - see the LICENSE file for details.
- Sentence-BERT for semantic similarity
- Django REST Framework for robust API development
- React community for excellent frontend tools
- All contributors and users of this project
For issues, questions, or suggestions:
- Open an issue on GitHub Issues
- Contact the maintainers
Made with β€οΈ by Co-vengers Team