An intelligent Application Tracking System (ATS) that uses Google's Gemini AI to analyze resumes against job descriptions, providing comprehensive feedback on compatibility, formatting, and optimization suggestions.
- AI-Powered Analysis - Leverages Google Gemini 1.5 Flash for intelligent resume evaluation
- JD Match Scoring - Calculates percentage match between resume and job description
- Missing Keywords Detection - Identifies important keywords from JD missing in resume
- Profile Summary - AI-generated professional summary of candidate profile
- Grammar Analysis - Detects and highlights grammatical errors
- Word Repetition Detection - Identifies overused words and phrases
- Format Issues - Checks for formatting problems and inconsistencies
- Readability Score - Calculates resume readability using industry-standard metrics
- Multi-Format Support - Accepts both PDF and DOCX resume formats
- Real-time Processing - Background task processing with status polling
- Professional UI - Modern, responsive design with Bootstrap 5
- Analytics Dashboard - Visual insights into analysis history and score distribution
- Caching System - Improved performance for repeated analyses
Backend (FastAPI)
- FastAPI 0.104.1 - Modern, fast web framework
- Uvicorn - ASGI server
- Google Generative AI (Gemini 1.5 Flash)
- PyPDF2 & python-docx for document parsing
- Pydantic for data validation
Frontend (Flask)
- Flask 3.0.0 - Web framework
- Bootstrap 5 - Responsive UI
- Chart.js - Data visualization
- AOS - Scroll animations
AI & Processing
- Google Gemini AI API
- NLTK for text processing
- Textstat for readability metrics
Smart-ATS-Checker/ βββ backend/ # FastAPI Backend β βββ app/ β β βββ __init__.py β β βββ main.py # API endpoints β βββ models/ β β βββ __init__.py β β βββ ats_models.py # Pydantic models β βββ services/ β β βββ __init__.py β β βββ ai_service.py # AI analysis service β βββ utils/ β βββ __init__.py β βββ document_parser.py # Document parsing βββ frontend/ # Flask Frontend β βββ app.py # Flask application β βββ static/ β β βββ css/ β β β βββ style.css β β βββ js/ β β βββ main.js β βββ templates/ β βββ base.html β βββ index.html β βββ results.html β βββ dashboard.html β βββ about.html βββ Dashboard/ # UI Screenshots β βββ 1.png β βββ 2.png β βββ 3.png β βββ 4.png βββ logs/ # Application logs βββ uploads/ # Temporary file storage βββ .env # Environment variables (not committed) βββ .env.example # Environment template βββ config.py # Configuration management βββ requirements.txt # Python dependencies - Python 3.8 or higher
- Google Gemini API key (Get it here)
- pip package manager
- Clone the repository
git clone https://github.com/yourusername/Smart-ATS-Checker.git cd Smart-ATS-Checker- Create virtual environment
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate- Install dependencies
pip install -r requirements.txt- Configure environment variables
# Copy the example file cp .env.example .env # Edit .env and add your API key GOOGLE_API_KEY=your_google_api_key_here SECRET_KEY=your_generated_secret_key_hereGenerate a secure SECRET_KEY:
python -c "import secrets; print(secrets.token_hex(32))"Terminal 1 - Backend:
cd backend uvicorn app.main:app --reload --host 0.0.0.0 --port 8000Terminal 2 - Frontend:
cd frontend python app.py- Frontend: http://localhost:5000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/api/docs
The Smart ATS uses a comprehensive scoring system:
Total Score = (JD Match Γ 0.70) + (Other Factors Γ 0.30) JD Match (70%)
- Keyword matching between resume and job description
- Skill alignment
- Experience relevance
Other Factors (30%)
- Grammar quality (10%)
- Format consistency (10%)
- Readability score (10%)
- 90-100%: Excellent - Highly optimized for ATS
- 75-89%: Good - Well-aligned with requirements
- 60-74%: Fair - Needs improvement
- Below 60%: Poor - Significant optimization needed
Analyze a resume against a job description
Request:
resume_file: File (PDF or DOCX)job_description: String
Response:
{ "success": true, "message": "Analysis started", "data": { "analysis_id": "uuid", "status": "processing", "estimated_time": "30-60 seconds" } }Check analysis status
Response:
{ "analysis_id": "uuid", "status": "completed", "timestamp": "2024-01-01T12:00:00" }Get complete analysis results
Response:
{ "success": true, "message": "Analysis result retrieved", "data": { "id": "uuid", "percentage_score": 85, "jd_match": 88, "missing_keywords": ["Python", "Docker"], "profile_summary": "Experienced software engineer...", "grammar_mistakes": [...], "word_repetitions": [...], "format_issues": [...], "readability_score": 65, "timestamp": "2024-01-01T12:00:00", "status": "completed" } }Get analytics data for dashboard
| Variable | Description | Default |
|---|---|---|
GOOGLE_API_KEY | Google Gemini API key | Required |
SECRET_KEY | Flask session secret | Required |
BACKEND_URL | Backend API URL | http://localhost:8000 |
FRONTEND_URL | Frontend URL | http://localhost:5000 |
MAX_CONTENT_LENGTH | Max file upload size | 16777216 (16MB) |
ANALYSIS_TIMEOUT | Analysis timeout | 300 seconds |
RATE_LIMIT | API rate limit | 60 requests/min |
LOG_LEVEL | Logging level | INFO |
See .env.example for complete configuration options.
Run the setup validation:
python test_setup.pyRun scoring algorithm tests:
python test_scoring.py- Upload Resume: Navigate to home page and upload your resume (PDF/DOCX)
- Paste Job Description: Copy and paste the target job description
- Analyze: Click "Analyze Resume" to start processing
- View Results: Wait for analysis to complete (30-60 seconds)
- Review Feedback: Check score, missing keywords, and improvement suggestions
- Dashboard: View analytics and historical analysis data
- Environment variable protection for API keys
- CORS configuration for secure API access
- File type validation (PDF/DOCX only)
- File size limits (16MB max)
- Rate limiting on API endpoints
- Secure session management
ModuleNotFoundError
# Ensure virtual environment is activated pip install -r requirements.txtAPI Key Error
# Verify .env file exists and contains valid GOOGLE_API_KEY cat .envPort Already in Use
# Change port in command uvicorn app.main:app --port 8001 # Backend # Or modify frontend/app.py for frontend portFile Upload Fails
- Check file size (max 16MB)
- Verify file format (PDF or DOCX only)
- Ensure file is not corrupted
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Google Gemini AI for powerful language model
- FastAPI for excellent async framework
- Flask for simple and elegant frontend framework
- Bootstrap for responsive UI components
- Chart.js for beautiful data visualizations
For questions or support, please open an issue on GitHub.
Note: This application is for educational and professional development purposes. Always review AI-generated suggestions critically and ensure your resume accurately represents your skills and experience.



