A resume parser/ATS simulation to show you what the machine sees and give actionable quality and bias exposure mitigation insights
- python 3.9+
- Ollama (for local LLM inference)
git clone https://github.com/yourusername/ResumeSight.git
cd ResumeSight# create
python -m venv .venv
# activate
source .venv/bin/activate pip install -r requirements.txtpython -m spacy download en_core_web_smbrew install ollama
# can also download from https://ollama.com/downloadollama serveNote: Keep this running in a separate terminal.
# recommended default
ollama pull phi4
# other options available in the UI
ollama pull phi3
ollama pull gemma2:2b
ollama pull llama3.2
ollama pull llama3.2:1b
ollama pull qwen2.5:1.5b
ollama pull mistralstreamlit run app.pyThe app will open in your browser at http://localhost:8501
ResumeSight aims to helps job seekers/students better understand how their resume could be perceived by an ATS system. In particular the system aims to help users:
- Identify information that could lead to discrimination (gender, age, race, political views, social class, etc.)
- Get a score for their resume using a mathematical scoring system (0-100)
- Get actionable feedback on resume quality and structure
- Identify skill gaps for specific target roles
- Visualize issues with highlighted PDF annotations
All analysis runs locally using Ollama and SpaCy, ensuring your resume data never leaves your machine and doesn't end up in a recruiter's hands before it's ready!
- streamlit monolith:
app.pyorchestrates upload, analysis, rendering, and UI toggles - pdf layer:
utils/pdf_processor.pyextracts text, finds coordinates, renders annotated pages to images - fast NER:
utils/ner_processor.pyuses spacy for explicit PII and nationality/age indicators - LLM layer:
utils/llm_engine.pyuses langchain-ollama for bias, quality, and skill-gap analysis with pydantic validation - scoring:
utils/scorer.pyapplies deterministic checklist weights for quality and bias risk - evidence:
utils/checklist_finder.pyfinds evidence for checklist items to box in the PDF - runtime: local-only, Ollama + SpaCy model, no external calls
ResumeSight/
├── app.py # streamlit UI and orchestration
├── requirements.txt # Python dependencies
├── README.md # this file
├── spec.txt # project specification
├── assets/ # static assets (images)
├── check_ollama.py # connection checker script
└── utils/
├── __init__.py
├── pdf_processor.py # PyMuPDF text/coords/render
├── llm_engine.py # LangChain + Ollama prompts/parsing
├── scorer.py # deterministic scoring
├── ner_processor.py # spacy NER/regex PII detection
└── checklist_finder.py # evidence boxing for checklist items
- Imported libraries: streamlit, PyMuPDF (fitz), Pillow, spacy, langchain, langchain-ollama, ollama, thefuzz + python-Levenshtein, pydantic. All used under their standard licenses, no third-party application code was copied
- Significant changes vs. base libs: none of these libraries were forked, all behavior customizations are done via code in this repo (parsing, scoring, PDF rendering, UI)
- New code implemented here:
app.py: full streamlit UI, two-page flow, toggles, rendering paths, score display, bias/quality/skills tabsutils/pdf_processor.py: PDF text extraction, coordinate search, server-side annotation rendering (boxes, highlights, underlines) to imagesutils/llm_engine.py: structured LLM prompts for bias, quality, skills. As well as pydantic models, robust JSON cleaning/parsing, Ollama connectivity checksutils/ner_processor.py: spacy NER with regex filters, tech blocklist, foreign location detection, age indicatorsutils/scorer.py: deterministic scoring for quality and bias risk using checklist weightsutils/checklist_finder.py: logic for finding evidence snippets for checklist items to box on the PDFcheck_ollama.py: basic cli tool to verify Ollama installation, server, models, and inferenceREADME.md,assets/: documentation and diagrams; design_guidelines/dataflow images
- Ollama — local LLM inference
- Streamlit — python web framework
- PyMuPDF — PDF processing
- SpaCy — NLP and NER
- LangChain — LLM orchestration
- thefuzz — fuzzy string matching
- Pydantic — schema validation for LLM outputs
I intend to maintain this project in a runnable state for some time, if you encounter issues please document them in a github issue and I will do my best to address them promptly :)
Built as a Final Project for CMU's 05-318: Human-AI Interaction

