Skip to content

sameervb/jd-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 JD Fit Analyzer

Upload your resume, paste any job description — get an AI-powered fit score, skill gap cards, ATS keyword audit, and a tailored cover letter. No account. No data stored.

Python Streamlit Ollama Plotly License

Portfolio · Soul Spark · LinkedIn · GitHub


What It Does

JD Fit Analyzer closes the loop between your resume and a job posting. Paste both in and get a structured breakdown: a 0–100 weighted fit score, colour-coded skill gap cards, an ATS keyword audit, and an Ollama-powered strategic analysis. When you're ready to apply, generate a tailored cover letter with tone and length controls — downloadable as .txt.

No NLP libraries. No external APIs for parsing. Everything runs in-process.


Features

Tab What you get
📄 Resume Parse PDF, DOCX, or plain text. Extracts skills by cluster, experience timeline, quantified achievements, and an overall completeness score.
📋 JD Fit Paste any JD. Weighted fit score (0–100), skill match chart, gap cards by severity (critical / partial / bonus), ATS keyword audit.
🤖 AI Analysis Full Ollama report: strengths, critical gaps, red flags, salary negotiation range, and 5 concrete tailoring actions.
✍️ Cover Letter AI-written cover letter with tone (formal / conversational / assertive), length, and focus controls. Downloadable as .txt.
ℹ️ About Project context and links.

Fit Score Algorithm

Score = 50% skill match + 30% role-family alignment + 20% seniority match

Skill match:       canonical alias map — "py", "python3" → "Python"
Role-family:       JD keywords mapped to 12 families (engineering, analytics, PM, etc.)
Seniority match:   years of experience vs. JD-stated requirement

Gaps are ranked Critical (must-have skills missing) → Partial (partial overlap) → Bonus (nice-to-have). ATS audit flags exact keywords the JD expects that aren't in your resume.


Tech Stack

Layer Technology
UI & hosting Streamlit
Resume parsing Pure Python — regex + heuristics, no NLP dependencies
JD parsing Pure Python — keyword extraction and role-family mapping
File formats pdfplumber (PDF) · python-docx (DOCX) · plain text
Visualisations Plotly gauge, skill match bars, cluster breakdown chart
AI Ollama (local LLM) via Cloudflare Tunnel
Language Python 3.10+

Quick Start

git clone https://github.com/sameervb/jd-analyzer
cd jd-analyzer
pip install -r requirements.txt

cp .streamlit/secrets.toml.example .streamlit/secrets.toml
# Edit secrets.toml — Ollama URL is optional

streamlit run app.py

Secrets

# .streamlit/secrets.toml

# Optional — enables AI Analysis and Cover Letter tabs
OLLAMA_BASE_URL = "https://your-tunnel.trycloudflare.com"
OLLAMA_MODEL    = "llama3.1:8b"

Ollama is optional. Resume parsing, JD fit scoring, and all visualisations work without it. AI tabs show a graceful "Connect AI" prompt when Ollama is unavailable.


Deploying to Streamlit Cloud

  1. Fork / push this repo to GitHub
  2. Go to share.streamlit.io → New App → select this repo
  3. Under Advanced settings → Secrets, paste:
OLLAMA_BASE_URL = "https://your-cloudflare-url.trycloudflare.com"
OLLAMA_MODEL    = "llama3.1:8b"

Cloudflare Tunnel — expose local Ollama to the cloud

# Run on your machine while Ollama is running on port 11434
cloudflared tunnel --url http://localhost:11434

Paste the generated *.trycloudflare.com URL as OLLAMA_BASE_URL in Streamlit Cloud secrets.


Architecture

Browser → Streamlit Cloud
    │
    ├── Resume tab ──── pdfplumber / python-docx
    │               └── Pure Python parser → Skills / Experience / Profile
    │
    ├── JD Fit tab ──── Pure Python parser
    │               └── Gap cards / Fit score / ATS audit / Plotly charts
    │
    ├── AI Analysis ─── Cloudflare Tunnel ──→ Ollama (your machine)
    │                                        └── Streamed strategic report
    │
    └── Cover Letter ── Cloudflare Tunnel ──→ Ollama (your machine)
                                             └── Streamed cover letter

No user data stored. No login required.
Parsing runs entirely in-process — your resume never leaves the browser session.

Project Context

Built as a standalone portfolio app, part of a series extracted from Soul Spark — a local-first personal intelligence platform integrating finance, health, career, and growth into a unified conversational AI advisor.

Related apps in this series:


Built by Sameer Bhalerao · Senior Analytics & AI Product Leader · Amazon L6 BIE · Luxembourg

About

Paste a job description, get a structured breakdown of fit, gaps, keywords

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages