Skip to content

Repository files navigation

Intelligent Resume Screening System

Paste a job description, upload resumes (PDF/DOCX), and instantly get candidates ranked by how many of the job's required skills each resume matches.

Live demo: https://resume-screening-system-indol.vercel.app

How it works

  1. Extracts plain text from each uploaded resume (pdfplumber for PDFs, python-docx for DOCX).
  2. Scans both the job description and each resume against a known-skills list using word-boundary regex matching (so "git" doesn't match inside "digital").
  3. Scores each resume as (matched skills) / (skills the job wants) × 100 and ranks candidates highest first.

Tech stack

  • Backend: Python, Flask, deployed as a Vercel serverless function (api/analyze.py)
  • Frontend: plain HTML/CSS/JS, no framework or build step (index.html)
  • Parsing: pdfplumber, python-docx

A standalone Streamlit version (streamlit_app.py) is also included for local use.

Project structure

├── index.html              # frontend UI
├── api/
│   ├── analyze.py          # Flask app — serves index.html and POST /api/analyze
│   └── skills_list.py      # known-skills list (self-contained copy for the function)
├── streamlit_app.py         # local Streamlit version
├── skills_list.py           # known-skills list (used by streamlit_app.py)
├── pyproject.toml           # Vercel Python build config
├── requirements.txt         # deploy dependencies
└── requirements-dev.txt     # adds streamlit + pandas for local Streamlit use

Running locally

Flask + Vercel dev server (matches production):

npm i -g vercel
vercel dev

Streamlit version:

pip install -r requirements-dev.txt
streamlit run streamlit_app.py

Deploying

vercel deploy --prod

Adding skills

Edit the KNOWN_SKILLS list in both skills_list.py and api/skills_list.py (kept in sync manually — the API function bundles its own copy).

About

Intelligent Resume Screening System

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages