Portfolio  ›  Projects  ›  Resume Analyzer
NLPPythonFastAPISemantic Search

AI Resume Analyzer
& Career Coach

An applicant tracking system rejects most CVs before a person reads one. This tool runs the same kind of checks first, then explains what to change and generates the material to change it with.

◆ Live · deployed on this site
Context: Built for BitWithBite  ·  Role: Sole engineer
Deployment: Live on this site  ·  Running cost: no paid API
300+Skills in database
10API endpoints
3Document formats
$0API cost
🚀 Try the Analyzer📊 What It Checks
Overview

From "why no replies" to a specific fix list

The tool parses a CV out of PDF, DOCX or plain text, extracts the skills it can identify against a categorised database of over three hundred technical terms, and scores the document the way an applicant tracking system would — contact details, section structure, keyword coverage, length and formatting.

Matching is semantic rather than literal, so a CV listing PyTorch is credited against a role asking for deep learning. From the gap between CV and role it generates tailored output: a cover letter, an eight-week learning plan for the missing skills, likely interview questions, and rewrite suggestions shown as before-and-after lines.

A recruiter mode reverses the flow, ranking a batch of CVs against a single job description.

The Problem

The rejection happens before a human is involved

Most applications are filtered automatically, and the filter is not reading for talent — it is reading for structure and keywords. A strong candidate with a badly structured CV loses to a weaker one with a well structured CV, and neither ever learns why.

Generic advice does not help, because the answer depends on the specific gap between one CV and one role. That comparison is mechanical, which makes it a good fit for software.

Technical Approach

Parse, score, then generate the fix

Extraction handles the document formats, skill recognition works against a curated database rather than free-form guessing, and a semantic scorer catches equivalences that exact matching misses. The ATS checks and section scoring are deterministic rules — they produce the same result every time, which matters when someone is acting on the advice.

Only the generative parts — cover letter, roadmap, interview prep, rewrites — use a language model, and it runs locally.

01 PARSEPDF, DOCX or TXT to text
02 EXTRACTSkills against a 300+ term database
03 SCOREATS rules, sections, keyword coverage
04 MATCHSemantic similarity against the role
05 GENERATELetter, roadmap, interview prep, rewrites
Capabilities

What it does

📄

Analysis

  • PDF, DOCX and TXT parsing
  • 300+ skill database, categorised
  • ATS compatibility scoring
  • Per-section scoring
🎯

Matching

  • Semantic skill equivalence
  • Weighted by role type
  • Gap identification against a job description
✍️

Generation

  • Tailored cover letter
  • Eight-week learning roadmap
  • Interview questions from your gaps
  • Before/after rewrite suggestions
Technologies

Actual stack

NLP
spaCysentence-transformersSemantic scoring
Generation
OllamaLocal LLM
Service
FastAPIUvicornEmbeddable UI
Formats
PDFDOCXTXT
Limitations

Where the advice stops

⚠️ Guidance, not a guarantee

Real applicant tracking systems differ between vendors and are not public. The ATS checks encode widely documented conventions — they are a reasonable proxy, not a simulation of any specific system, and no pass-rate figure is claimed.

Skill extraction is bounded by the database: a genuinely novel technology will not be recognised until it is added. Salary estimates are indicative ranges, not offers.

Run your own CV through it

The analyzer is live on this site. Upload a CV and a job description and see the gap analysis it produces.