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
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.
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.
- π 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
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
| 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 |
The React frontend provides a simple interface for testing the complete workflow.
- 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
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /health |
Check backend health |
| POST | /analyze |
Analyze resume PDF against job description |
| 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 |
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
- Python 3.10+
- Node.js and npm
- Gemini API key
- Git
git clone https://github.com/aadi090204/AI-Resume-Match-Analyzer.git
cd AI-Resume-Match-AnalyzerGo to the backend folder:
cd backendCreate and activate a virtual environment:
python -m venv venv
venv\Scripts\activateInstall backend dependencies:
pip install -r requirements.txtCreate a .env file inside the backend folder:
GEMINI_API_KEY=your_gemini_api_key_hereStart the FastAPI backend:
uvicorn app.main:app --reloadOpen the backend API docs:
http://127.0.0.1:8000/docs
Open a new terminal and go to the frontend folder:
cd AI-Resume-Match-Analyzer/frontendInstall frontend dependencies:
npm installStart the React development server:
npm run devOpen the frontend:
http://localhost:5173
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.
While building the project, I had to handle a few practical issues:
- The resume analysis output initially suggested fake placeholders like
X%andY minutes. - The AI prompt needed stricter rules to avoid exaggerated resume claims.
- The browser frontend required CORS configuration to communicate with the FastAPI backend.
- Resume PDF extraction depends on whether the uploaded PDF contains readable text.
- Very short job descriptions produced less useful analysis, so realistic JD input was needed for better results.
- 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.
- 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.
- 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
- The
.envfile 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.
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.
Adithya Anil AI Engineer / DevOps Engineer GitHub: aadi090204




