Screen a stack of resumes against one job in about two minutes, and get back a ranked list you can defend.
Reading 200 resumes by hand takes most of a day, and the last twenty get read worse than the first twenty. This scores every candidate against the same rubric in the same way, then shows its working: the skills matched, the ones missing, and the specific things worth a second look.
- Takes the whole stack. PDF, DOCX or TXT, dropped in together.
- Scores against a defined role, not a vibe: required skills, preferred skills, years of experience, salary band, culture keywords.
- Ranks with the reasoning attached. Each candidate carries a score breakdown rather than a bare number.
- Surfaces what a skim misses. Employment gaps, short tenures, and the skills a candidate claims but does not evidence.
- Exports where hiring actually happens. CSV, Excel, PDF, or ATS-shaped JSON.
| Path | What |
|---|---|
backend/ |
FastAPI service: parsing, scoring, export. |
frontend/ |
React and Vite interface: upload, define the role, read the ranking. |
# backend
cd backend
python -m venv venv && venv/Scripts/activate # source venv/bin/activate on macOS or Linux
pip install -r requirements.txt
cp .env.example .env # add your own OpenAI key
python main.py # http://localhost:8000
# frontend, in a second terminal
cd frontend
npm install && npm run dev # http://localhost:3000Then upload resumes, fill in the job, and analyse. Expect 30 to 60 seconds for a batch.
Python · FastAPI · OpenAI · React · Vite · Tailwind.
It ranks against the rubric it is given, so a badly specified role produces a confidently wrong ordering. It reads what a resume claims, and a resume is self-reported. Treat the output as a reading order for a human, not a decision. Anything that filters people out deserves a person looking at what it filtered.