Responsible for the backend and monitoring in a three-person team. My work also included API contracts, authentication, endpoint tests, container workflows, Kubernetes deployment and the metrics, logs and tracing stack.
A cooking assistant built with two teammates for a DevOps course at the Technical University of Munich (TUM). The application combines a web client, a Kotlin/Spring API, PostgreSQL and two Python AI services. It generates recipes and cooking help, with saved recipes and user preferences behind the API.
The team’s responsibility split was client, server and GenAI. I was responsible for the server, and worked extensively on the surrounding build, deployment and monitoring infrastructure.
An API between three parts of the application
The public OpenAPI contract describes communication between the browser and the server. A separate internal contract describes requests to the AI services, including the user information the server adds. Generated models and clients help keep those boundaries consistent.
My backend work included user registration and authentication, database integration, recipe creation, updates and deletion, and forwarding requests to the AI services. Later changes tightened request validation, improved error responses, invalidated tokens on logout and added more useful event logging. Endpoint tests exercise the server’s API behaviour.
Local development and deployment
Docker Compose brings up the application locally, with watch rules for rebuilding components during development. The repository also contains an Azure deployment using Terraform, Ansible and Compose, alongside the Kubernetes deployment on TUM’s cluster.
I added the Kubernetes manifests and deployment workflow, and worked on component build jobs, registry publishing, coverage reports and deployment fixes. The frontend also has a pull-request preview workflow.
Metrics, logs and traces
The observability work grew beyond a single health endpoint:
- Prometheus scrapes application metrics.
- Grafana presents dashboards and alerting.
- Alloy and Loki collect and store logs.
- Tempo stores traces, with instrumentation in the services and trace context passed to outgoing AI-service requests.
That makes it possible to follow a request across components and distinguish API, downstream-service and deployment problems. My commits include the instrumentation, Kubernetes monitoring configuration, dashboards, log collection and progressively more detailed tracing spans.
The repository includes the architecture diagrams, API specifications, tests and deployment instructions. Its README documents the course deployments; their continued availability depends on the student infrastructure and cloud credits. I finished the course with a grade of 1.7 (1.0 is best).