AI Resume Matching: Best-Fit Jobs, Skill Gaps by Mojtaba KarimiabdarAI Resume Matching: Best-Fit Jobs, Skill Gaps by Mojtaba Karimiabdar

AI Resume Matching: Best-Fit Jobs, Skill Gaps

Mojtaba Karimiabdar

Mojtaba Karimiabdar

The real analytics dashboard on the platform's 10 bundled demo postings: top skills, languages, frameworks, databases, clouds and hiring companies.
The real analytics dashboard on the platform's 10 bundled demo postings: top skills, languages, frameworks, databases, clouds and hiring companies.

The challenge

Matching people to jobs by hand is slow: recruiters and job seekers read long postings, compare them with a resume and guess what is missing. Keyword search misses good matches, and job data from many sources is messy and full of duplicates.

The solution

I built an AI job-matching platform in Python. It collects job postings, cleans them and removes duplicates, extracts the skills each job asks for, then lets you search in plain language or paste a resume to get ranked matches, missing skills, a learning roadmap and a salary range.

The real run

On the platform's 10 bundled demo postings, the search "remote python jobs with fastapi and postgresql" ranked the Senior Python Backend Engineer role first.
A one-paragraph backend resume: 8 skills and 5 years of experience read. The best match (a Django backend role, score 0.62) was missing only Django; the next one listed Celery, Kubernetes and Redis.
The learning roadmap put Kubernetes first (asked for by 4 jobs), and the salary estimate was USD 125k to 215k, median 152.5k, from the 5 postings that list a salary.
Six steps from job postings to career advice, a real plain-language search and the learning roadmap for the same resume.
Six steps from job postings to career advice, a real plain-language search and the learning roadmap for the same resume.

How it works

Collect: pluggable job sources through a polite HTTP client: robots.txt, rate limits, retries with backoff and incremental crawling.
Clean: text normalised, and exact and near-duplicate postings merged before anything is counted.
Extract: skills and technologies read against a curated taxonomy (languages, frameworks, databases, clouds), optionally enriched with spaCy.
Search: plain-language queries ranked by TF-IDF by default, or by sentence-transformer embeddings with FAISS when installed.
Match and advise: resume parsing, match scores with matched and missing skills, a learning roadmap, salary prediction and career-path suggestions.
Analytics and export: a live dashboard of top skills, remote share, salaries by currency and top companies and countries, plus CSV, JSON or Excel export.
Accounts and roles, brute-force limits and safe exports, checked on a live run. 187 tests at 89% branch coverage.
Accounts and roles, brute-force limits and safe exports, checked on a live run. 187 tests at 89% branch coverage.

Security and quality

Accounts and roles: JWT bound to issuer and audience, bcrypt passwords and role-based access. On the live run, resume matching and export without a token returned 401.
Brute force stopped: a separate login budget (after 10 attempts in 5 minutes the next one got 429) plus a per-account lockout.
Safe by default: a strict Content Security Policy with a fresh nonce on every response, exports that cannot run spreadsheet formulas, and a production mode that refuses to start with placeholder secrets.
Tested on a live run: it found a dashboard bug the tests had missed (every skill bar drew empty). It is fixed, with a test that fails without the fix.
187 automated tests at 89% branch coverage, plus ruff and mypy, and pip-audit, Bandit, Gitleaks, Trivy and CodeQL in CI.
Tech stack: Python, FastAPI, SQLAlchemy, SQLite or PostgreSQL, TF-IDF or sentence-transformers with FAISS, APScheduler or Celery with Redis, and Docker.
Need resume matching or job-market insights from your own job data? Send me a message with where your jobs or resumes come from.
Like this project

Posted Oct 15, 2026

Paste a resume; AI reads its skills, ranks the best-fit jobs, shows what is missing and suggests what to learn next. 187 tests.