REST API for Kappa, a cluster-based comic recommender using K-Means/DBSCAN + KNN.
kappa-backend/
src/
kappa/ # App code (Flask routes + ML pipeline)
scripts/ # Maintenance scripts (migration)
tests/ # Pytest suite
wsgi.py # Gunicorn entrypoint
run.sh # Prod runner
*.csv # Seed data files
uv venv
uv pip install -r requirements.txt
uv pip sync uv.lock
export PYTHONPATH=./src
python src/scripts/migrate.py
python wsgi.pymake venv
make sync
make migrate
make runuv venv
uv pip install -r requirements.txt
uv pip sync uv.lock
pytestbash run.shdocker build -t kappa-api .
docker run -p 80:80 kappa-apiGET /->WELCOME TO KAPPAGET /health->OKPOST /api/kmeans-> recommendations via K-MeansPOST /api/dbscan-> recommendations via DBSCAN
GET /api/comics-> list comicsGET /api/comics/<id>-> comic detailsPOST /api/comics-> insert/update comicsPOST /api/comics/genres-> insert/update genre flagsPOST /api/ratings-> insert ratings
POST /api/precompute-> compute clustering cachesGET /api/precompute/status-> last compute timestamps
Recommendation requests expect a JSON array with comic_id (or id) and rating:
[
{"comic_id": 44489, "rating": 5},
{"comic_id": 72025, "rating": 4}
]- Recommendations require precomputed data. Call
POST /api/precomputeafter seeding or data changes. - The SQLite database path is controlled via
KAPPA_DB_PATH(default:kappa.db).