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
β
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
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
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
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
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
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
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
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
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
cd backend
# Create virtual environment (recommended)
python -m venv .venv
# Activate
# Windows:
.venv\S cripts\a ctivate
# 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
Option A β PowerShell Scripts (Windows)
# Terminal 1
.\run- backend.ps1
# Terminal 2
.\run- frontend.ps1
# 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.
π§ 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
π Authentication β /auth
Method
Endpoint
Description
Auth
POST
/auth/register
Create account
β
POST
/auth/login
Login, returns JWT
β
GET
/auth/me
Current user profile
β
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
}
ATS Score = (0.50 Γ Semantic) + (0.30 Γ Keywords) + (0.20 Γ Layout)
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)
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%)
πͺ 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
git checkout -b feature/AmazingFeature
git commit -m ' Add AmazingFeature'
git push origin feature/AmazingFeature
# Open a Pull Request
MIT License. See LICENSE for details.
Built with β€οΈ as a Final Year AI/ML Major Project.
ResumeIQ AI β Optimize Your Resume with AI & Beat ATS Systems
β Star this repo if you found it helpful! β