A portfolio-ready FastAPI backend that extracts text from PDF, DOCX, and TXT resumes, detects technical skills, compares a resume with a job description, calculates a match score, identifies missing skills, and returns actionable recommendations.
- User registration and JWT authentication
- PDF, DOCX, and TXT resume uploads
- Resume text extraction
- Technical skill detection
- Job-description keyword matching
- Match score and missing-skills analysis
- Saved analysis history
- SQLite by default; SQLAlchemy can use PostgreSQL
- Docker, pytest, Swagger UI, and GitHub Actions CI
Python, FastAPI, SQLAlchemy, JWT, SQLite/PostgreSQL, Docker, pytest, GitHub Actions, pypdf, and python-docx.
git clone https://github.com/YOUR_USERNAME/ai-resume-analyzer.git
cd ai-resume-analyzer
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env
uvicorn app.main:app --reloadOpen:
- API: http://127.0.0.1:8000
- Swagger: http://127.0.0.1:8000/docs
- Health: http://127.0.0.1:8000/health
- Register at
POST /api/v1/auth/register. - Log in at
POST /api/v1/auth/login. - Copy the token and click Authorize in Swagger.
- Upload a resume at
POST /api/v1/resumes/analyze. - Optionally include a target job description.
{
"email": "gerald@example.com",
"full_name": "Gerald Evan Johnson",
"password": "StrongPass123!"
}pytest -qCopy-Item .env.example .env
docker compose up --buildcd ai-resume-analyzer
git init
git add .
git commit -m "Build AI resume analyzer API"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/ai-resume-analyzer.git
git push -u origin mainReplace YOUR_USERNAME with your GitHub username. GitHub will request your username and personal access token if you use HTTPS authentication.
app/
├── api/routes/
├── core/
├── db/
├── models/
├── schemas/
├── services/
└── main.py
tests/
.github/workflows/ci.yml
Dockerfile
docker-compose.yml
requirements.txt
HANDSHAKE_PROJECT_DATA.txt
Change SECRET_KEY before deployment, never commit .env, use HTTPS, and add rate limiting and malware scanning before accepting public uploads.
MIT