Back to Work
IntelliTalent - Resume to Job Matching
AI / ML

IntelliTalent - Resume to Job Matching

End-to-end resume-to-job matching platform using PyMuPDF parsing, GPT-4o-mini skill extraction over a FAISS-backed RAG pipeline, and hybrid 60% cosine / 40% skill-overlap scoring on live listings.

2026
PythonGPT-4o-miniFAISSPyMuPDFMongoDBAWS EC2GCP Cloud Run

Overview

An NLP-driven platform that matches resumes to live job listings. Resumes are parsed with PyMuPDF, skills extracted using GPT-4o-mini via a FAISS-backed RAG pipeline, and jobs ranked with a hybrid score of 60% cosine similarity and 40% skill overlap over listings scraped from Apify. Latency is optimized with regex taxonomy matching (50ms vs. 5+ seconds per-job LLM calls) and batched OpenAI embeddings with vectorized NumPy cosine similarity. Deployed across AWS EC2 and GCP Cloud Run with O*NET role clustering and MongoDB text search.

Problem Statement & Approach

Job seekers waste time manually scanning listings that turn out to be irrelevant. Keyword-based search produces both false negatives and noise, and gives no clarity on how well a resume actually qualifies for a role.

Approach: Parse the PDF resume with PyMuPDF, extract structured skills with GPT-4o-mini over a FAISS-backed RAG index, scrape live listings from LinkedIn and Indeed via Apify, embed everything with OpenAI's text-embedding-3-small, and rank with a hybrid score of 60% semantic similarity plus 40% skill overlap — returning ranked matches with skill-gap analysis.

System Architecture

A multi-stage pipeline moves a resume from upload to ranked matches: PDF upload → PyMuPDF extraction → GPT-4o-mini skill extraction via FAISS RAG → Apify job scraping → batch embeddings → vectorized cosine similarity → hybrid scoring → MongoDB storage → a web dashboard of ranked matches.

Key Features

  • FAISS-backed RAG for GPT-4o-mini skill extraction
  • Hybrid job ranking: 60% semantic similarity + 40% skill overlap
  • Regex taxonomy matching replaces per-job LLM calls (~50ms vs. 5+ sec per job)
  • Batch OpenAI embeddings with vectorized cosine similarity
  • O*NET role clustering with GPT-generated role suggestions
  • Bcrypt auth with OTP verification and brute-force protection
  • MongoDB TTL indexes auto-expire scraped listings after 7 days

Technical Stack

LLM & Embeddings

GPT-4o-minitext-embedding-3-smallLlama 3.3 70B (Groq)

Core

LangChainFAISSPyMuPDFMongoDB 7.0

Data

Apify ActorsO*NETOpenAI embeddings

Deployment

DockerAWS EC2GCP Cloud Run

Security

AWS SSM Parameter StoreGCP Secret ManagerBcrypt

Deployment

Containerized with Docker and deployed through AWS (deploy_aws.sh) and GCP Cloud Run (deploy_gcp.sh) scripts, with secrets managed via AWS SSM Parameter Store and GCP Secret Manager.

Challenges & Solutions

Challenge: Per-job LLM calls made ranking too slow — 5+ seconds per listing.

Solution: Regex taxonomy matching replaced per-job LLM calls, cutting skill matching to ~50ms per job.

Challenge: Feeding the full skill taxonomy to the model added heavy token overhead.

Solution: FAISS-injected RAG context supplies only the relevant taxonomy slice per resume.

Challenge: Scraped job listings went stale and bloated storage over time.

Solution: MongoDB TTL indexes automatically expire listings after 7 days.

Improvements

  • Application tracker to manage jobs a user has applied to
  • Resume quality scoring with actionable feedback
  • Cross-user alerts when strong new matches appear
  • A personal analytics dashboard for search activity
NLPRAGLLMJob Matching