Skip to content

Umesh-369/ATS-Resume-Analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ATS Logo

ATS β€” AI Resume Architect

Intelligent resume analysis powered by Google Gemini 2.5 Flash

Gemini 2.5 Flask Tailwind CSS License


ATS Demo


πŸ“‹ Table of Contents


πŸ” Overview

ATS (AI Resume Architect) is a full-stack web application that leverages Google's Gemini 2.5 Flash AI model to intelligently analyze resumes against job descriptions. It acts as a smart Applicant Tracking System that provides candidates with actionable insights to optimize their resumes for better job matching.

Upload your resume, paste a job description, and instantly receive a detailed compatibility report β€” complete with match percentage, skill gap analysis, strengths, and personalized improvement suggestions.


✨ Features

Feature Description
πŸ€– AI-Powered Parsing Uses Gemini 2.5 Flash to intelligently extract skills, experience, education, and tools from resumes
πŸ“„ PDF Resume Upload Drag-and-drop or click-to-upload PDF resume support
🎯 ATS Match Scoring Generates a 0–100 match percentage between resume and job description
βœ… Skill Gap Analysis Identifies matching skills and highlights missing ones
πŸ’ͺ Strengths Report Highlights candidate strengths relative to the role
πŸš€ Improvement Suggestions Provides actionable recommendations to improve resume fit
🎨 Cinematic UI Stunning dark-themed interface with particle animations, glassmorphism, and smooth transitions
πŸ“± Responsive Design Fully responsive layout that works across desktop, tablet, and mobile

πŸ— Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    CLIENT (Browser)                     β”‚
β”‚                                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  PDF Upload   β”‚  β”‚  JD Input    β”‚  β”‚  Results UI  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚         β”‚                 β”‚                  β”‚          β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚          β”‚
β”‚                  β”‚ POST /analyze             β”‚          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚                           β”‚
                   β–Ό                           β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 FLASK SERVER                 β”‚          β”‚
β”‚                                              β”‚          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ PDF Parser β”‚  β”‚ Resume     β”‚  β”‚  JSON Response    β”‚  β”‚
β”‚  β”‚ (PyPDF2)   │──│ Parser     │──│  Builder          β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ (Gemini)   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                         β”‚
β”‚                        β”‚                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”                        β”‚
β”‚  β”‚ JD Parser   │──│ ATS Match β”‚                        β”‚
β”‚  β”‚ (Gemini)    β”‚  β”‚ Engine    β”‚                        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ (Gemini)  β”‚                        β”‚
β”‚                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚   Google Gemini API   β”‚
            β”‚   (2.5 Flash Model)   β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ›  Tech Stack

Layer Technology Purpose
Backend Python, Flask REST API server, request handling, file management
AI Engine Google Gemini 2.5 Flash Resume parsing, JD analysis, ATS matching
PDF Processing PyPDF2 Text extraction from uploaded PDF resumes
Frontend HTML5, Tailwind CSS, JavaScript Responsive UI with cinematic design
Icons Lucide Icons Beautiful, consistent iconography
Markdown Marked.js Rendering AI-generated markdown responses

πŸš€ Getting Started

Prerequisites

  • Python 3.8+ β€” Download
  • pip β€” Python package manager (included with Python)
  • Google Gemini API Key β€” Get your API key

Installation

  1. Clone the repository

    git clone https://github.com/your-username/ATS.git
    cd ATS
  2. Create a virtual environment

    python -m venv .venv
  3. Activate the virtual environment

    • Windows:
      .venv\Scripts\activate
    • macOS/Linux:
      source .venv/bin/activate
  4. Install dependencies

    pip install flask google-genai PyPDF2

Configuration

Open main.py and replace the API key with your own Google Gemini API key:

client = genai.Client(api_key="YOUR_GEMINI_API_KEY_HERE")

Running the App

python main.py

The application will start on http://localhost:8080

 * Running on http://127.0.0.1:8080
 * Debug mode: on

Open your browser and navigate to http://localhost:8080 to start analyzing resumes! πŸŽ‰


πŸ“‘ API Reference

POST /analyze

Analyzes a resume against a job description using AI.

Request:

Parameter Type Location Required Description
resume File (PDF) Form Data βœ… The candidate's resume in PDF format
job_description String Form Data βœ… The target job description text

Response:

{
  "parsed_resume": "β€’ Skills: Python, Flask, ...\nβ€’ Experience: ...",
  "parsed_job_description": "β€’ Required Skills: ...\nβ€’ Responsibilities: ...",
  "ats_result": "### Match Percentage: 78%\n### Matching Skills: ...\n### Missing Skills: ..."
}

Error Responses:

Status Message
400 Resume PDF is required
400 Job description is required

πŸ“ Project Structure

ATS/
β”œβ”€β”€ main.py                 # Flask application & API routes
β”œβ”€β”€ README.md               # Project documentation
β”œβ”€β”€ templates/
β”‚   β”œβ”€β”€ index.html          # Frontend template (alternate)
β”‚   └── index1.html         # Main frontend template (active)
β”œβ”€β”€ uploads/                # Uploaded PDF resumes (auto-created)
└── .venv/                  # Python virtual environment

πŸ–Ό Screenshots

🏠 Landing Page β€” Click to expand

A cinematic dark-themed landing page with particle animation background, glassmorphism panels, and a clean two-column layout for resume upload and job description input.

πŸ“Š Analysis Results β€” Click to expand

Three-column results dashboard showing parsed resume profile, ATS scorecard with match percentage, and detailed job analysis β€” all rendered with rich markdown formatting and color-coded sections.


🀝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create your feature branch
    git checkout -b feature/amazing-feature
  3. Commit your changes
    git commit -m "feat: add amazing feature"
  4. Push to the branch
    git push origin feature/amazing-feature
  5. Open a Pull Request

Development Guidelines

  • Follow PEP 8 for Python code
  • Use meaningful commit messages following Conventional Commits
  • Add docstrings to new functions
  • Test your changes locally before submitting

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


Built with ❀️ and powered by Google Gemini AI

⬆ Back to Top

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors