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
- Extracts plain text from each uploaded resume (
pdfplumberfor PDFs,python-docxfor DOCX). - 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"). - Scores each resume as
(matched skills) / (skills the job wants) × 100and ranks candidates highest first.
- 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.
├── 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
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
vercel deploy --prod
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).