1. Project Overview & Quickstart (srbhr/Resume-Matcher)
[!IMPORTANT]
The project needs your help and support. If you can donate a small amount, that will help me to continue developing and improving Resume Matcher.
Getting Started
Resume Matcher works by creating a master resume that you can use to tailor for each job application. Installation instructions here: How to Install
How It Works
- Upload your master resume (PDF or DOCX)
- Paste a job description you're targeting
- Review AI-generated improvements and tailored content
- Cover Letter and optional interview preparation for the job application
- Customize the layout and sections to fit your style
- Export as a professional PDF with your preferred template
Stay Connected
Join our Discord for discussions, feature requests, and community support.
Follow us on LinkedIn for updates.
Star the repo to support development and get notified of new releases.
Sponsors
Resume Matcher is free and open-source, kept alive by its sponsors and backers. If it helps you, please consider supporting its development.
Companies backing Resume Matcher
Sponsor at a company tier and your logo + link + blurb lands here โ in front of a community of 27k+ stars and 4.9k forks, featured on Trendshift and the Vercel OSS Program.
| Sponsor | Description |
|---|---|
| Apideck | One API to connect your app to 200+ SaaS platforms (accounting, HRIS, CRM, file storage). Build integrations once, not 50 times. ๐ apideck.com |
| Vercel | Resume Matcher is a part of Vercel OSS // Summer 2025 Program ๐ vercel.com |
| Cubic.dev | Cubic provides PR reviews for Resume Matcher ๐ cubic.dev |
| Kilo Code | Kilo Code provides AI code reviews and coding credits to Resume Matcher ๐ kilo.ai |
| ZanReal | ZanReal is an AI-driven development company building scalable cloud solutions, from strategy and UX to DevOps, helping teams ship faster and turn ideas into production. ๐ zanreal.com |
| โฆ Your company here | Reach 27k+ developers and 4.9k forks. Become a sponsor โ |
Read the Sponsorship Guide for tiers and details. Sponsors get a special thank-you in the README and on our website.
Support as an individual
Every bit keeps Resume Matcher free and funds new features โ and you'll be thanked in the README and on our website.
| Platform | Link |
|---|---|
| GitHub | |
| Buy Me a Coffee |
Creators' Note
Thank you for checking out Resume Matcher. If you want to connect, collaborate, or just say hi, feel free to reach out!
~ Saurabh Rai โจ
You can follow me on:
- Website: https://srbhr.com
- Linkedin: https://www.linkedin.com/in/srbhr/
- Twitter: https://twitter.com/srbhrai
- GitHub: https://github.com/srbhr
Key Features
Core Features
Master Resume: Create a comprehensive master resume to draw from your existing one.
Resume Builder
Paste in a job description and get AI-powered resume tailored for that specific role.
You can:
- Modify suggested content
- Add/remove sections
- Rearrange sections via drag-and-drop
- Choose from multiple resume templates
Cover Letter Generator
Generate tailored cover letters based on the job description and your resume.
Interview Preparation
Generate structured, resume-grounded interview prep for saved tailored resumes. Use the Builder's Interview Prep tab on demand, or enable automatic generation in Settings.
Resume Scoring & Keyword Highlighting
Analyze your resume against the job description with a match score, keyword highlighting, and suggestions for improvement.
PDF Export
Export your tailored resume and cover letter in PDF.
Templates
| Template Name | Preview | Description |
|---|---|---|
| Classic Single Column | A traditional and clean layout suitable for most industries. ๐๐ข๐๐ฐ ๐๐๐ | |
| Modern Single Column | A contemporary design with a focus on readability and aesthetics. ๐๐ข๐๐ฐ ๐๐๐ | |
| Classic Two Column | A structured layout that separates sections for clarity. ๐๐ข๐๐ฐ ๐๐๐ | |
| Modern Two Column | A sleek design that utilizes two columns for better organization. ๐๐ข๐๐ฐ ๐๐๐ |
Internationalization
- Multi-Language UI: Interface available in English, Spanish, Chinese, Japanese, and Portuguese (Brazilian)
- Multi-Language Content: Generate resumes and cover letters in your preferred language
Roadmap
If you have any suggestions or feature requests, please feel free to open an issue on GitHub or discuss it on our Discord server.
- AI Canvas for crafting impactful, metric-driven resume content
- Email template generator for job applications
- Multi-job description optimization
How to Install
For detailed setup instructions, see SETUP.md (English) or: Espaรฑol, ็ฎไฝไธญๆ, ๆฅๆฌ่ช.
Prerequisites
| Tool | Version | Installation |
|---|---|---|
| Python | 3.13+ | python.org |
| Node.js | 22+ | nodejs.org |
| uv | Latest | astral.sh/uv |
Quick Start
Fastest for MacOS, WSL and Ubuntu users:
# Clone the repository
git clone https://github.com/srbhr/Resume-Matcher.git
cd Resume-Matcher
# Backend (Terminal 1)
cd apps/backend
cp .env.example .env # Configure your AI provider
uv sync # Install dependencies
uv run app
# Frontend (Terminal 2)
cd apps/frontend
npm install
npm run devOpen http://localhost:3000 and configure your AI provider in Settings.
Supported AI Providers
| Provider | Local/Cloud | Notes |
|---|---|---|
| Ollama | Local | Free, runs on your machine |
| OpenAI | Cloud | GPT-5 Nano, GPT-4o |
| Anthropic | Cloud | Claude Haiku 4.5 |
| Google Gemini | Cloud | Gemini 3 Flash |
| OpenRouter | Cloud | Access to multiple models |
| DeepSeek | Cloud | DeepSeek Chat |
Docker Deployment
Official Docker images are published for linux/amd64 and linux/arm64 on:
ghcr.io/srbhr/resume-matchersrbhr/resume-matcher
Run on a single public port (3000) with API available at /api:
docker run --name resume-matcher \
-p 3000:3000 \
-v resume-data:/app/backend/data \
ghcr.io/srbhr/resume-matcher:latestPrefer pinning a version in production, for example ghcr.io/srbhr/resume-matcher:1.2.0 orghcr.io/srbhr/resume-matcher:1.2.
Endpoints:
- App: http://localhost:3000
- API health check: http://localhost:3000/api/v1/health
- API docs: http://localhost:3000/docs
Using Ollama with Docker? Use
http://host.docker.internal:11434as the Ollama URL instead oflocalhost.
Tech Stack
| Component | Technology |
|---|---|
| Backend | FastAPI, Python 3.13+, LiteLLM |
| Frontend | Next.js 16, React 19, TypeScript |
| Database | TinyDB (JSON file storage) |
| Styling | Tailwind CSS 4, Swiss International Style |
| Headless Chromium via Playwright |
Join Us and Contribute
We welcome contributions from everyone! Whether you're a developer, designer, or just someone who wants to help out. All the contributors are listed in the about page on our website and on the GitHub Readme here.
Check out the roadmap if you would like to work on the features that are planned for the future. If you have any suggestions or feature requests, please feel free to open an issue on GitHub and discuss it on our Discord server.
Contributors
Star History
Resume Matcher is a part of [Vercel Open Source Program](https://vercel.com/oss)
2. Official Technical Reference & Guides (srbhr/Resume-Matcher-docs)
The Resume Matcher takes your resume and job descriptions as input, parses them using Python, and mimics the functionalities of an ATS, providing you with insights and suggestions to make your resume ATS-friendly.
The process is as follows:
Parsing: The system uses Python to parse both your resume and the provided job description, just like an ATS would. Parsing is critical as it transforms your documents into a format the system can readily analyze.
Keyword Extraction: The tool uses advanced machine learning algorithms to extract the most relevant keywords from the job description. These keywords represent the skills, qualifications, and experiences the employer seeks.
Key Terms Extraction: Beyond keyword extraction, the tool uses textacy to identify the main key terms or themes in the job description. This step helps in understanding the broader context of what the resume is about.
Vector Similarity Using Qdrant: The tool uses Qdrant, a highly efficient vector similarity search tool, to measure how closely your resume matches the job description. This process is done by representing your resume and job description as vectors in a high-dimensional space and calculating their cosine similarity. The more similar they are, the higher the likelihood that your resume will pass the ATS screening.
On top of that, there are various data visualizations that I've added to help you get started.
Introduction
This guide is intended for anyone who wants to download and install Resume-Matcher
Follow these steps to setup the environment and run the application
QuickStart
Fork the repository here.
Clone the forked repository.
bashgit clone https://github.com/<YOUR-USERNAME>/Resume-Matcher.git cd Resume-MatcherCreate a Python Virtual Environment:
Using virtualenv:
Note: Check how to install virtualenv on your system here link.
bashvirtualenv env
OR
Create a Python Virtual Environment:
bashpython -m venv env
OR
Create a Python Virtual Environment:
bashpy -<YOUR_VERSION_OF_PYTHON> -m pip install virtualenv
After you create your Virtual environment you should have a folder in your repo that looks something like myenv
Activate the Virtual Environment.
On Windows.
bashenv\Scripts\activateOn macOS and Linux.
bashsource env/bin/activate
Install Dependencies:
bashpip install -r requirements.txtPrepare Data:
- Resumes: Place your resumes in PDF format in the
Data/Resumesfolder. Remove any existing contents in this folder. - Job Descriptions: Place your job descriptions in PDF format in the
Data/JobDescriptionfolder. Remove any existing contents in this folder. - Initially the folders should look like belwo
- Resumes: Place your resumes in PDF format in the
Parse Resumes to JSON:
pythonpython run_first.pyRun the Application:
pythonstreamlit run streamlit_app.py
Note: For local versions, you do not need to run "streamlit_second.py" as it is specifically for deploying to Streamlit servers.
Additional Note: The Vector Similarity part is precomputed to optimize performance due to the resource-intensive nature of sentence encoders that require significant GPU and RAM resources. If you are interested in leveraging this feature in a Google Colab environment for free, refer to the upcoming blog (link to be provided) for further guidance.