Most resumes are filtered by ATS software before a human ever reads them. This project is a backend API that checks how well a resume matches a job description and suggests how to improve it.
What it does
- PDF resume parsing: extracts text from uploaded resumes using pdfplumber
- ATS keyword matching: compares the resume against a job description and calculates a match score
- Smart suggestions: generates actionable tips to improve the resume for a specific role
- JWT authentication: secured endpoints with role-based access for Job Seekers and Recruiters
- Batch scoring: recruiters can score many resumes at once, handled in the background by Celery + Redis
Tech stack
| Layer | Technology |
|---|---|
| Backend | Python, FastAPI |
| Auth | JWT (python-jose, passlib) |
| Database | MySQL 8.0, SQLAlchemy ORM, Alembic |
| Task queue | Celery + Redis |
| PDF parsing | pdfplumber |
| DevOps | Docker, Docker Compose, AWS EC2 |
| CI/CD | GitHub Actions |
| Testing | Pytest |
Design highlights
- Background processing: batch scoring runs through a Celery queue, so the API stays responsive while many resumes are processed.
- Role-based access: Job Seekers and Recruiters get separate permissions on the same API.
- Reproducible setup: the whole stack (API, MySQL, Redis) starts with a single Docker Compose command.
- Automated deployment: a GitHub Actions pipeline deploys automatically to AWS EC2.
- Database migrations: schema changes are managed with Alembic.
Source code
https://github.com/priyadharshiny13/ats-resume-scorer
Feedback is welcome. If you were using a tool like this, what would matter more: a more accurate match score or more detailed improvement suggestions?
Top comments (0)