This FastAPI microservice calculates candidate suitability scores for job postings by evaluating work experience, years of experience, education level, skills, and English proficiency. It then combines these weighted scores into an overall score that reflects the applicant’s suitability for the job posting they have applied to.
- How It Works
- Flowcharts
- Project Structure
- Tech Stack
- Setup and Installation
- API Documentation
- Related Repositories
- Author
The service computes several sub-scores and combines them into a final suitability score:
- Work Experience Similarity: compares embeddings of user work titles/descriptions with job posting vectors (via the Sentence Transformer Model
all-MiniLM-L6-v2). - Years of Experience: uses a scaled sigmoid function against required experience.
- Skill Score: averages proficiency of matched skills weighted by coverage.
- Education Score: selects highest level from a predefined scale.
- English Score: maps proficiency to a numeric scale.
- Final Score: weighted sum of all sub-scores (
40% work experience similarity, 20% experience years needed, 15% education, 15% English, 10% skills).
job-eval-backend-fastapi/
├── api_routes/ # FastAPI route definitions
├── assets/ # Flowcharts and architecture diagrams
├── clients/ # External service clients (e.g., ChromaDB)
├── constants/ # Scoring constants and weight configs
├── core/ # Middleware and security logic
├── data_collections/ # ChromaDB vector collections
├── db/ # Local ChromaDB instance (e.g., SQLite file)
├── schemas/ # Pydantic models for request/response
├── services/ # Business and scoring logic
├── utils/ # Utility functions like preprocessing
├── .env # Environment variables
├── main.py # FastAPI app entry point
├── requirements.txt # Project dependencies
└── README.md # Project documentation
-
FastAPI – High-performance Python web framework
-
Python 3.10+ – Core language
-
Pydantic – Data validation and settings management
-
ChromaDB – Vector store for embeddings
-
Sentence Transformers – Semantic embeddings with all-MiniLM-L6-v2
-
Uvicorn – ASGI server for running FastAPI
-
python-dotenv – Load environment variables from .env
- Clone the repository
git clone https://github.com/rigelHadushiDev/job-eval-backend-fastapi.git
cd job-eval-backend-fastapi- Create & activate a virtual environment
python3 -m venv .venvmacOS/Linux
source .venv/bin/activateWindows (PowerShell)
.venv\Scripts\Activate.ps1- Install dependencies
pip install --upgrade pip
pip install -r requirements.txt- Configure environment variables Copy the example and edit with your values
cp .env.example .envThen open .env and set:
CHROMA_DB_PATH=./db/chroma.sqlite3
ANY_API_KEYS_OR_SECRETS- (Optional) Initialize ChromaDB If you need an empty DB file:
mkdir -p db
touch db/chroma.sqlite3- Run the service locally
uvicorn main:app --reloadOnce running, explore all endpoints via Swagger UI at:
http://localhost:8000/docs#/-
Main Application Backend: job-eval-backend-spring
-
React Frontend (User Interface): job-eval-frontend-react
Developed by @rigelHadushiDev


