Skip to content

bikram73/ResumeIQ_AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ResumeIQ AI

🧠 ResumeIQ AI

Smart ATS & AI Resume Analyzer Platform

FastAPI React Python Vite scikit-learn SQLite License

Multi-Granularity Multi-Modal AI Resume Analyzer β€” Analyze, optimize, and improve resumes using a dedicated ML models package, NLP, Semantic Similarity, TF-IDF, ATS Scoring, and Job Role Recommendations.

πŸš€ Live Demo Β· πŸ“– Docs Β· πŸ€– ML Models Β· πŸ› Report Bug


ResumeIQ Dashboard Preview


πŸ“‹ Table of Contents


✨ Features

🎯 Core Analysis

Feature Description
πŸ“Š ATS Score Weighted formula: 0.5Γ—Semantic + 0.3Γ—Keywords + 0.2Γ—Layout with full sub-score breakdown
🧠 Semantic Matching Bigram TF-IDF cosine similarity (SBERT switchable via env var)
πŸ” Keyword Analysis TF-IDF cosine (60%) + skill overlap (40%) against job description
πŸ“ Layout Scoring Section coverage + file size + word count + bullet formatting
πŸ•³οΈ Skill Gap Detection Identifies JD skills missing from resume with learning resource links
πŸ’‘ AI Suggestions Prioritized, actionable improvement tips for both JD and quality modes
🎯 Job Role Recommendations Matches detected skills against 14 role profiles with match %
πŸ“‚ Skills by Category Skills grouped into languages, frameworks, databases, cloud/devops, tools, practices
πŸ”„ Resume Quality Mode Standalone scoring when no JD provided (skill density + action verbs + quantification)
πŸ“„ Multi-layer PDF Extraction pdfplumber β†’ PyMuPDF β†’ pytesseract OCR fallback chain

πŸ–₯️ Application Pages

Page Route Description
🏠 Landing / Hero, features, how-it-works, CTA
πŸ” Login /login JWT-based authentication
πŸ“ Register /register Account creation
πŸ“Š Dashboard /dashboard Score history, radar chart, bar chart
πŸ“€ Upload & Analyze /upload Drag-and-drop PDF upload + JD input (3-step)
πŸ“ˆ Results /results/:id Full analysis: scores, skills by category, skill gap, suggestions, role recommendations
πŸ‘€ Profile /profile User account info

πŸ”’ Security

  • βœ… JWT Authentication (30-min expiry)
  • βœ… Bcrypt password hashing
  • βœ… Protected routes (frontend + backend)
  • βœ… File type & size validation (PDF only, max 10MB)
  • βœ… Per-user data isolation
  • βœ… 401 auto-redirect on expired tokens

πŸ› οΈ Tech Stack

🎨 Frontend

Technology Version Purpose
βš›οΈ React 18.2 UI framework
πŸ”€ React Router DOM 6.22 Client-side routing
πŸ“Š Recharts 2.10 Radar & bar charts
🎬 Framer Motion 11.0 Animations
🌐 Axios 1.4 HTTP client with JWT interceptor
⚑ Vite 5.0 Build tool & dev server

βš™οΈ Backend

Technology Version Purpose
🐍 Python 3.10+ Runtime
πŸš€ FastAPI 0.111 REST API framework
πŸ¦„ Uvicorn 0.29 ASGI server (-B flag, no bytecode cache)
πŸ—„οΈ SQLAlchemy 2.0 ORM
πŸ” python-jose 3.3 JWT tokens
πŸ”‘ passlib[bcrypt] 1.7 Password hashing

πŸ€– ML Models Package (ml-models/)

Technology Purpose
πŸ“„ pdfplumber Primary PDF text extraction
πŸ“„ PyMuPDF (fitz) Fallback PDF extraction
πŸ‘οΈ pytesseract OCR fallback for scanned PDFs
πŸ”’ scikit-learn TF-IDF Bigram keyword & semantic similarity
πŸ€— sentence-transformers SBERT all-MiniLM-L6-v2 (optional, switchable)
πŸ“ NumPy Vector math
πŸ—ƒοΈ SQLite Local development database

πŸ“ Project Structure

ResumeIQ_AI/
β”‚
β”œβ”€β”€ πŸ“„ README.md
β”œβ”€β”€ πŸ“„ .gitignore
β”œβ”€β”€ ▢️  run-backend.ps1              # python -B -m uvicorn (no bytecode cache)
β”œβ”€β”€ ▢️  run-frontend.ps1
β”‚
β”œβ”€β”€ 🎨 frontend/
β”‚   β”œβ”€β”€ πŸ“„ index.html
β”‚   β”œβ”€β”€ πŸ“„ vite.config.js
β”‚   β”œβ”€β”€ πŸ“„ package.json
β”‚   └── src/
β”‚       β”œβ”€β”€ πŸ“„ main.jsx             # BrowserRouter + AuthProvider
β”‚       β”œβ”€β”€ πŸ“„ App.jsx              # Routes + Protected wrapper
β”‚       β”œβ”€β”€ πŸ“„ AuthContext.jsx      # JWT auth state
β”‚       β”œβ”€β”€ πŸ“„ api.js               # Axios client (JWT + 401 interceptor)
β”‚       β”œβ”€β”€ πŸ“„ styles.css           # CSS variables + utility classes
β”‚       β”œβ”€β”€ components/
β”‚       β”‚   β”œβ”€β”€ πŸ“„ Navbar.jsx
β”‚       β”‚   β”œβ”€β”€ πŸ“„ Blobs.jsx
β”‚       β”‚   └── πŸ“„ ScoreCard.jsx
β”‚       └── pages/
β”‚           β”œβ”€β”€ πŸ“„ Home.jsx
β”‚           β”œβ”€β”€ πŸ“„ Login.jsx
β”‚           β”œβ”€β”€ πŸ“„ Register.jsx
β”‚           β”œβ”€β”€ πŸ“„ Dashboard.jsx    # Radar + bar charts + resume history
β”‚           β”œβ”€β”€ πŸ“„ Upload.jsx       # 3-step: upload β†’ JD β†’ analyze
β”‚           β”œβ”€β”€ πŸ“„ Results.jsx      # Scores + skills by category + roles + suggestions
β”‚           └── πŸ“„ Profile.jsx
β”‚
β”œβ”€β”€ βš™οΈ  backend/
β”‚   β”œβ”€β”€ πŸ“„ requirements.txt
β”‚   β”œβ”€β”€ πŸ“„ .env.example
β”‚   β”œβ”€β”€ πŸ“„ resumeiq.db              # SQLite (auto-created)
β”‚   β”œβ”€β”€ uploads/                    # UUID-prefixed PDFs
β”‚   └── app/
β”‚       β”œβ”€β”€ πŸ“„ main.py              # FastAPI app + CORS
β”‚       β”œβ”€β”€ πŸ“„ database.py          # SQLAlchemy engine
β”‚       β”œβ”€β”€ πŸ“„ models.py            # User, Resume, Analysis ORM models
β”‚       β”œβ”€β”€ πŸ“„ auth.py              # register / login / me
β”‚       β”œβ”€β”€ πŸ“„ resume.py            # upload / analyze / results / resumes / suggestions / roles
β”‚       └── ai/
β”‚           └── πŸ“„ pipeline.py      # Delegates to ml-models; inline fallback if import fails
β”‚
β”œβ”€β”€ πŸ€– ml-models/                   # Standalone ML package (imported by pipeline.py)
β”‚   β”œβ”€β”€ πŸ“„ __init__.py
β”‚   β”œβ”€β”€ πŸ“„ README.md
β”‚   β”œβ”€β”€ embeddings/
β”‚   β”‚   └── πŸ“„ semantic.py          # tfidf_similarity, sbert_similarity, keyword_overlap
β”‚   β”œβ”€β”€ parsers/
β”‚   β”‚   └── πŸ“„ extractor.py         # extract_text, parse_resume, extract_skills_by_category
β”‚   β”œβ”€β”€ scoring/
β”‚   β”‚   └── πŸ“„ ats_scorer.py        # compute_ats_score, score_layout, score_keywords, score_quality
β”‚   └── recommendation/
β”‚       └── πŸ“„ engine.py            # generate_suggestions, recommend_roles, skill_gap_report
β”‚
└── πŸ“š docs/
    └── πŸ“„ synopsis.md

πŸ€– ML Models Package

The ml-models/ directory is a standalone Python package with four modules. The backend pipeline.py adds it to sys.path at runtime and falls back to inline implementations if the import fails.

parsers.extractor

  • 3-layer PDF extraction: pdfplumber β†’ PyMuPDF β†’ pytesseract OCR
  • 100+ skill taxonomy across 6 categories
  • Section detection: summary, experience, education, skills, projects, certifications
  • Contact extraction: email, phone, LinkedIn, GitHub, website

embeddings.semantic

  • tfidf_similarity β€” bigram TF-IDF cosine (default, fast)
  • sbert_similarity β€” SBERT all-MiniLM-L6-v2 (set RESUMEIQ_SEMANTIC_MODE=sbert)
  • keyword_overlap β€” fraction of JD keywords present in resume

scoring.ats_scorer

  • score_layout β€” section coverage (40%) + file size (30%) + word count (20%) + bullet formatting (10%)
  • score_keywords β€” TF-IDF cosine (60%) + skill overlap (40%)
  • score_quality β€” skill density (35%) + action verbs (25%) + content richness (25%) + quantification (15%)
  • compute_ats_score β€” assembles full ATS score with score_breakdown dict

recommendation.engine

  • generate_suggestions β€” prioritized tips, different logic for JD mode vs quality mode
  • recommend_roles β€” matches skills against 14 role profiles (Software Engineer, Data Scientist, DevOps, ML Engineer, etc.)
  • skill_gap_report β€” missing skills with direct learning resource URLs

Skill Taxonomy (100+ skills)

Category Examples
languages python, javascript, typescript, java, go, rust, sql, html, css
frameworks react, fastapi, django, tensorflow, pytorch, scikit-learn, pandas, langchain
databases postgresql, mongodb, redis, elasticsearch, dynamodb, firebase
cloud_devops aws, azure, gcp, docker, kubernetes, terraform, ci/cd, github actions
tools git, graphql, kafka, airflow, tableau, power bi, figma, jupyter
practices machine learning, deep learning, nlp, agile, microservices, mlops, devops

βš™οΈ Installation

Prerequisites

Requirement Version
🐍 Python 3.10 or higher
πŸ“¦ Node.js 18 or higher
πŸ“¦ npm 9 or higher

1️⃣ Clone the Repository

git clone https://github.com/yourusername/ResumeIQ-AI.git
cd ResumeIQ-AI

2️⃣ Backend Setup

cd backend

# Create virtual environment (recommended)
python -m venv .venv

# Activate
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate

# Install dependencies
pip install -r requirements.txt

requirements.txt:

fastapi==0.111.0
uvicorn[standard]==0.29.0
python-multipart==0.0.9
pydantic==2.7.1
sqlalchemy==2.0.30
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
pdfplumber==0.11.0
pymupdf==1.24.0
scikit-learn==1.4.2
numpy==1.26.4
sentence-transformers==2.7.0   # optional β€” SBERT mode

3️⃣ Frontend Setup

cd frontend
npm install

πŸš€ Running the Project

Option A β€” PowerShell Scripts (Windows)

# Terminal 1
.\run-backend.ps1

# Terminal 2
.\run-frontend.ps1

Option B β€” Manual

# Terminal 1 β€” from /backend
python -B -m uvicorn app.main:app --port 8000

# Terminal 2 β€” from /frontend
npm run dev

Important: Use python -B to prevent stale .pyc bytecode from being loaded. The run scripts already include this flag.

🌐 Access the App

Service URL
🎨 Frontend http://localhost:5173 (or 5174)
βš™οΈ Backend API http://localhost:8000
πŸ“– Swagger Docs http://localhost:8000/docs
πŸ“– ReDoc http://localhost:8000/redoc

πŸ”§ Environment Variables

Copy backend/.env.example to backend/.env:

# Database β€” defaults to SQLite, use PostgreSQL URL for production
DATABASE_URL=sqlite:///./resumeiq.db

# JWT secret β€” change in production!
SECRET_KEY=your-super-secret-key-here

# Semantic engine: "tfidf" (fast, default) or "sbert" (accurate, needs ~90MB RAM)
RESUMEIQ_SEMANTIC_MODE=tfidf

πŸ”Œ API Endpoints

πŸ” Authentication β€” /auth

Method Endpoint Description Auth
POST /auth/register Create account ❌
POST /auth/login Login, returns JWT ❌
GET /auth/me Current user profile βœ…

πŸ“„ Resume

Method Endpoint Description Auth
POST /upload-resume Upload PDF βœ…
POST /analyze Run full ML analysis βœ…
GET /results/{id} Stored analysis results βœ…
GET /resumes Resume history βœ…
GET /suggestions/{id} AI improvement suggestions βœ…
GET /roles/{id} Job role recommendations βœ…

πŸ“¦ Analyze Response (full)

POST /analyze  β†’  {
  "ats_score": 72.4,
  "semantic_score": 0.68,
  "keyword_match": 0.71,
  "layout_score": 0.80,
  "jd_provided": true,
  "extracted_skills": ["python", "fastapi", "docker"],
  "skills_by_category": {
    "languages": ["python"],
    "frameworks": ["fastapi"],
    "cloud_devops": ["docker"]
  },
  "missing_skills": ["kubernetes", "terraform"],
  "matched_skills": ["python", "fastapi", "docker"],
  "score_breakdown": {
    "semantic": 0.68,
    "keyword": { "tfidf_cosine": 0.65, "skill_overlap": 0.80 },
    "layout": { "section_coverage": 1.0, "word_count_score": 0.95 }
  },
  "suggestions": ["Add missing skills: kubernetes, terraform..."],
  "role_recommendations": [
    { "role": "Backend Developer", "match_percent": 85.0, "matched_skills": [...] }
  ],
  "skill_gap_report": {
    "gaps_with_resources": [
      { "skill": "kubernetes", "resource": "https://kubernetes.io/docs/tutorials/", "priority": "medium" }
    ]
  },
  "contact_info": { "email": "user@example.com", "github": "github.com/user" },
  "word_count": 412
}

🧠 AI Scoring Logic

ATS Score Formula

ATS Score = (0.50 Γ— Semantic) + (0.30 Γ— Keywords) + (0.20 Γ— Layout)

With Job Description

Component Sub-components Weight
Semantic TF-IDF bigram cosine similarity (or SBERT) 50%
Keywords TF-IDF cosine (60%) + skill overlap (40%) 30%
Layout Section coverage (40%) + file size (30%) + word count (20%) + formatting (10%) 20%

Without Job Description (Quality Mode)

Component Method Weight
Skill Density recognized skills / 15 35%
Action Verbs strong verb count / 10 25%
Content Richness unique word ratio / 0.65 25%
Quantification numbers/metrics count / 5 15%

PDF Extraction Chain

pdfplumber  β†’  PyMuPDF (fitz)  β†’  pytesseract OCR
   (text PDFs)    (complex layouts)    (scanned/image PDFs)

🎨 UI Design System

Color Palette

Token Hex Usage
--primary #6C63FF Buttons, accents, links
--secondary #8B5CF6 Gradients, skill tags
--accent #00D4FF Layout score, highlights
--bg #0F172A Page background
--card rgba(255,255,255,0.06) Glassmorphism cards
--success #10B981 High scores (β‰₯70%)
--warning #F59E0B Medium scores (50–70%)
--danger #EF4444 Low scores (<50%)

Design Features

  • πŸͺŸ Glassmorphism cards β€” backdrop-filter: blur(12px)
  • 🌈 Animated gradient blobs in background
  • πŸ’œ Neon glow buttons with hover box-shadow
  • πŸ“± Fully responsive β€” desktop, tablet, mobile
  • πŸŒ™ Dark theme throughout

πŸ—ΊοΈ Roadmap

  • πŸ” JWT Authentication (register / login / profile)
  • πŸ“€ PDF Resume Upload with drag-and-drop
  • 🧠 TF-IDF Semantic & Keyword Analysis
  • πŸ“Š ATS Score with multi-granularity breakdown
  • πŸ•³οΈ Skill Gap Detection with learning resources
  • πŸ’‘ AI Improvement Suggestions (JD + quality modes)
  • πŸ“ˆ Dashboard with Radar & Bar charts
  • πŸ“‹ Resume history per user
  • πŸ”„ Resume Quality Mode (no-JD standalone scoring)
  • πŸ€– ML Models package (parsers / embeddings / scoring / recommendation)
  • 🎯 Job Role Recommendations (14 role profiles)
  • πŸ“‚ Skills by Category (6 categories, 100+ skills)
  • πŸ“„ Multi-layer PDF extraction (pdfplumber β†’ PyMuPDF β†’ OCR)
  • πŸ”Œ /roles endpoint for role recommendations
  • πŸ€— SBERT deep semantic matching (RESUMEIQ_SEMANTIC_MODE=sbert)
  • πŸ“ Resume Builder with live editing
  • πŸ—£οΈ AI Cover Letter Generator
  • πŸ”— LinkedIn Profile Optimizer
  • 🐳 Docker Compose deployment
  • 🐘 PostgreSQL production database

🀝 Contributing

git checkout -b feature/AmazingFeature
git commit -m 'Add AmazingFeature'
git push origin feature/AmazingFeature
# Open a Pull Request

πŸ“„ License

MIT License. See LICENSE for details.


πŸ‘¨β€πŸ’» Author

Built with ❀️ as a Final Year AI/ML Major Project.

ResumeIQ AI β€” Optimize Your Resume with AI & Beat ATS Systems

GitHub LinkedIn


⭐ Star this repo if you found it helpful! ⭐

About

🧠 ResumeIQ AI is an intelligent resume analysis platform that leverages AI, NLP, and machine learning techniques to evaluate resumes against job descriptions, calculate ATS compatibility scores, identify skill gaps, and provide personalized improvement recommendations.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors