Skip to content

Latest commit

Β 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“„ AI Resume Match Analyzer β€” Resume-to-Job Description Matching Assistant

Python FastAPI React Vite Gemini PDF

A full-stack AI career assistant that compares a resume PDF against a target job description and generates a structured match score, strong matches, missing skills, ATS keywords, resume improvement suggestions, and improved resume bullets.

πŸš€ Quick Start Β· 🧠 Architecture Β· 🌐 Frontend Β· πŸ”Œ API Β· πŸ“Έ Screenshots


πŸ“Œ Overview

AI Resume Match Analyzer is a full-stack AI application built to help candidates evaluate how well their resume matches a specific job description.

The application allows users to upload a PDF resume, paste a target job description, and receive a structured AI-generated analysis. The system extracts readable text from the resume, combines it with the job description, sends it through a carefully designed Gemini prompt, and returns recruiter-friendly feedback.

The project focuses on practical career workflows such as resume screening, ATS keyword matching, skill gap identification, and role-specific resume improvement β€” while avoiding exaggerated or fabricated experience.

Key Idea: The AI should improve how the resume is presented, not invent experience that the candidate does not actually have.


🎯 Why I Built This

I built this project to understand how AI can assist with real-world career workflows such as resume screening, job matching, and resume optimization.

The main goal was to explore:

  • Resume PDF parsing
  • Job description analysis
  • Prompt engineering for structured career feedback
  • ATS keyword extraction
  • Skill gap identification
  • Guardrails against exaggerated resume claims
  • Frontend-backend integration using FastAPI and React

This project helped me understand how AI applications can be designed for practical decision support rather than generic chatbot-style responses.


✨ Features

  • πŸ“„ Upload resume PDF
  • 🧾 Extract readable resume text using pypdf
  • πŸ“ Paste a target job description
  • πŸ€– Analyze resume-to-job description fit using Gemini
  • πŸ“Š Generate an overall match score
  • βœ… Identify strong matches between resume and JD
  • ⚠️ Detect missing or weak areas
  • πŸ” Suggest ATS keywords only if genuinely applicable
  • πŸ› οΈ Provide resume improvement suggestions
  • ✍️ Rewrite improved resume bullets without exaggerating experience
  • 🧭 Provide final recommendation: apply now, apply after edits, or build more evidence
  • 🌐 React frontend for resume upload, JD input, and result display
  • πŸ”— CORS-enabled frontend-backend integration

🧠 System Architecture

Resume PDF Upload
   β”‚
   β–Ό
Resume Text Extraction using pypdf
   β”‚
   β–Ό
Job Description Input
   β”‚
   β–Ό
Prompt Construction with Guardrails
   β”‚
   β–Ό
Gemini Resume-JD Analysis
   β”‚
   β–Ό
Structured Output:
Match Score + Strong Matches + Missing Skills
ATS Keywords + Improved Bullets + Final Recommendation
   β”‚
   β–Ό
Frontend Result Display

Core Analysis Flow

Stage Component Purpose
Resume Upload React + FastAPI Accept PDF resume from user
Text Extraction pypdf Extract readable text from the resume
JD Input React textarea Accept target job description
Prompt Design Custom Gemini prompt Structure the analysis with strict guardrails
AI Analysis Gemini API Generate resume-JD match feedback
API Response FastAPI Return structured analysis result
Frontend Display React Show the complete analysis clearly

🌐 Web Application

The React frontend provides a simple interface for testing the complete workflow.

Frontend Capabilities

  • Upload a PDF resume
  • Paste a job description
  • Submit resume and JD for analysis
  • View match score and reasoning
  • View strong matches and missing skills
  • View ATS keyword suggestions
  • View improved resume bullets
  • Clear inputs and test another job description

πŸ”Œ API Endpoints

Method Endpoint Purpose
GET /health Check backend health
POST /analyze Analyze resume PDF against job description

πŸ› οΈ Tech Stack

Layer Technology
Backend FastAPI, Uvicorn
Frontend React, Vite
LLM Gemini API
PDF Processing pypdf
Environment Management python-dotenv
Data Format Multipart form data
Language Python, JavaScript

πŸ“ Project Structure

AI-Resume-Match-Analyzer/
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ main.py              # FastAPI routes, upload handling, CORS
β”‚   β”‚   β”œβ”€β”€ config.py            # Environment and app configuration
β”‚   β”‚   β”œβ”€β”€ pdf_loader.py        # Resume PDF text extraction
β”‚   β”‚   β”œβ”€β”€ resume_analyzer.py   # Gemini prompt and analysis logic
β”‚   β”‚   └── schemas.py           # Pydantic response schemas
β”‚   β”‚
β”‚   β”œβ”€β”€ uploads/                 # Local uploaded resumes ignored by Git
β”‚   β”œβ”€β”€ requirements.txt
β”‚   β”œβ”€β”€ .env.example
β”‚   └── .gitignore
β”‚
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ App.jsx              # React application logic
β”‚   β”‚   β”œβ”€β”€ App.css              # Main UI styling
β”‚   β”‚   β”œβ”€β”€ index.css
β”‚   β”‚   └── main.jsx
β”‚   β”‚
β”‚   β”œβ”€β”€ package.json
β”‚   └── vite.config.js
β”‚
β”œβ”€β”€ screenshots/
β”‚   β”œβ”€β”€ backend-health-check.png
β”‚   β”œβ”€β”€ backend-analyze-success.png
β”‚   β”œβ”€β”€ frontend-form-filled.png
β”‚   β”œβ”€β”€ frontend-analysis-score.png
β”‚   └── frontend-improved-bullets.png
β”‚
β”œβ”€β”€ README.md
└── .gitignore

πŸš€ Quick Start

Prerequisites

  • Python 3.10+
  • Node.js and npm
  • Gemini API key
  • Git

1. Clone the Repository

git clone https://github.com/aadi090204/AI-Resume-Match-Analyzer.git
cd AI-Resume-Match-Analyzer

2. Backend Setup

Go to the backend folder:

cd backend

Create and activate a virtual environment:

python -m venv venv
venv\Scripts\activate

Install backend dependencies:

pip install -r requirements.txt

Create a .env file inside the backend folder:

GEMINI_API_KEY=your_gemini_api_key_here

Start the FastAPI backend:

uvicorn app.main:app --reload

Open the backend API docs:

http://127.0.0.1:8000/docs

3. Frontend Setup

Open a new terminal and go to the frontend folder:

cd AI-Resume-Match-Analyzer/frontend

Install frontend dependencies:

npm install

Start the React development server:

npm run dev

Open the frontend:

http://localhost:5173

πŸ§ͺ Sample Job Description Used for Testing

We are hiring a Junior DevOps Engineer with hands-on knowledge of Linux, Docker, Docker Compose, CI/CD pipelines, GitHub Actions, Nginx, cloud fundamentals, monitoring, and troubleshooting. The candidate should be able to work with deployment workflows, analyze logs, debug production issues, understand basic networking, and collaborate with engineering teams. Exposure to Prometheus, Grafana, AWS, Kubernetes, Terraform, or Ansible is a plus.

πŸ“Έ Screenshots

Backend Health Check

Backend Health Check

Backend Analyze API

Backend Analyze

Frontend Resume Analysis Form

Frontend Form

Match Score and Skill Gap Analysis

Match Score

Resume Improvement Suggestions

Improved Bullets


⚠️ What Went Wrong

While building the project, I had to handle a few practical issues:

  1. The resume analysis output initially suggested fake placeholders like X% and Y minutes.
  2. The AI prompt needed stricter rules to avoid exaggerated resume claims.
  3. The browser frontend required CORS configuration to communicate with the FastAPI backend.
  4. Resume PDF extraction depends on whether the uploaded PDF contains readable text.
  5. Very short job descriptions produced less useful analysis, so realistic JD input was needed for better results.

βœ… How I Fixed It

  • Added prompt rules to prevent fake metrics and exaggerated experience.
  • Updated improved bullet instructions to avoid numbers unless clearly present in the resume.
  • Added CORS middleware in FastAPI for local frontend-backend integration.
  • Added validation for PDF uploads and empty job descriptions.
  • Used structured output sections to make the analysis recruiter-friendly.
  • Tested the app with a realistic Junior DevOps Engineer job description.

πŸ“š What I Learned

  • AI resume analysis needs strict guardrails to avoid inventing experience.
  • Prompt design directly affects output quality and trustworthiness.
  • PDF parsing is simple for text-based resumes but may fail for scanned resumes.
  • Full-stack AI apps need clean API contracts between frontend and backend.
  • Career-focused AI tools can be built with practical workflows instead of generic chatbot interfaces.
  • AI-generated resume feedback is more useful when the output is structured around recruiter decision points.

πŸ—ΊοΈ Future Work

  • Add support for DOCX resumes
  • Add downloadable analysis report
  • Add structured JSON output from Gemini
  • Add resume section-wise scoring
  • Add multiple job description comparison
  • Add authentication and user analysis history
  • Deploy frontend and backend
  • Add Dockerfile and Docker Compose after local Docker testing
  • Add role-specific analysis modes such as DevOps, Software Engineer, Data Analyst, and AI Engineer

πŸ” Security Notes

  • The .env file is ignored by Git and should never be committed.
  • Uploaded resumes are stored locally only during development.
  • The app should not be used with sensitive personal resumes in production unless authentication, encryption, and secure storage are added.
  • AI suggestions should be reviewed manually before updating a real resume.

πŸ“„ Disclaimer

This project is for educational and portfolio purposes only. The analysis should be treated as AI-assisted feedback, not as a guaranteed hiring outcome. The system does not guarantee ATS selection, interview calls, or job offers.


πŸ‘€ Author

Adithya Anil AI Engineer / DevOps Engineer GitHub: aadi090204


Built as a full-stack AI project exploring resume parsing, prompt engineering, ATS-style keyword analysis, and career-focused AI assistance.

About

Full-stack AI resume-to-job-description analyzer using FastAPI, React, Gemini, and pypdf for match scoring, ATS keyword suggestions, skill gap analysis, and improved resume bullets.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages