Projects

Selected work

Two projects I can talk about in more depth than a CV line.

Personal project

töökratt

Job boards dump hundreds of listings on you. I wanted something I could ask in plain language (backend in Denmark, remote ok) and get answers grounded in real posts, with a way to say I don't know instead of inventing roles.

I built a RAG pipeline: ingest jobs from The Hub API, embed them in Qdrant, and chat over the index (FastAPI, Gemini 2.5 Flash) with citations. The first production request OOMed because the embedding model loaded in-process on a 512MB box. I moved embeddings to Qdrant Cloud Inference, benchmarked two free models on the real 1,015-document corpus, rejected one because its scores couldn't support a hard cutoff, and reindexed without taking search down.

The copilot is live. I also run evals (unit, retrieval, generation) and Grafana/Loki, including an alert on prompt-injection attempts.

PythonFastAPIQdrantGeminiRAGGrafana

DevOps

athme

athme is a sports community app. People find games, host events, and pay. I took over DevOps when deploys were still manual and the stack lived on DigitalOcean.

I set up CI/CD for the different services so nothing ships by hand. Also database migrations and backups, plus a pipeline that distributes content to LinkedIn. I've been moving the infrastructure from DigitalOcean to AWS.

Deploys run in the pipeline. Backups and migrations are routine. The AWS move is underway, and the app just kicked off in Valencia.

AWSCI/CDDigitalOcean