A web app that scores how well a resume matches a job description and returns actionable feedback. Built with FastAPI + Streamlit, using spaCy and Sentence Transformers for NLP and the Groq API for LLM-generated suggestions.
- Upload a resume (PDF / DOC / DOCX) and paste a job description.
- The backend parses the resume, extracts skills and experience, and compares them to the JD using semantic similarity.
- You get an ATS score, a breakdown by category (formatting, keywords, content, skill validation, ATS compatibility), and LLM-written suggestions for what to improve.
- Past analyses are saved to your account so you can revisit them.
- Frontend: Streamlit
- Backend: FastAPI (Python)
- NLP: spaCy (
en_core_web_md), Sentence Transformers (all-MiniLM-L6-v2) - LLM: Groq API (Llama 3)
- Auth + Database: Supabase (email/password and Google OAuth)
- PDF report export: WeasyPrint + Jinja2
ATS_SCORER/
├── backend/ FastAPI app, NLP services, API routes
├── frontend/ Streamlit app, views, components
├── jupyter notebooks/ Research and dataset prep (not used at runtime)
├── ml model/ Exported ML artifacts
├── requirements.txt Combined backend + frontend dependencies
└── .env.example Template for environment variables
git clone <repo-url>
cd ATS_SCORER
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activatepip install -r requirements.txt
python -m spacy download en_core_web_mdWeasyPrint needs system libraries on Linux:
# Fedora
sudo dnf install -y cairo pango gdk-pixbuf2 libffi
# Debian / Ubuntu
sudo apt install -y libcairo2 libpango-1.0-0 libpangoft2-1.0-0 libffi-devCopy the template and fill in your keys:
cp .env.example .envYou need:
- A Supabase project — grab
SUPABASE_URL,SUPABASE_KEY(service role), andSUPABASE_ANON_KEYfrom Project Settings → API. - A Groq API key from console.groq.com.
- (Optional) Google OAuth set up in the Supabase dashboard if you want Google sign-in.
The Streamlit frontend also reads Supabase config from frontend/.streamlit/secrets.toml. Copy secrets.toml.example to secrets.toml and fill it in.
From the project root:
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000The API is now at http://localhost:8000.
In a new terminal (with the venv activated):
streamlit run frontend/streamlit_app.pyThe app opens at http://localhost:8501.