Wallet
A personal finance web app built as a set of microservices for my bachelor's thesis at HAMK, then tested by breaking it on purpose.
- Context
- Bachelor's thesis, HAMK
- Year
- 2025
- Stack
- React · Spring Boot · NestJS · FastAPI · Kubernetes · Chaos Mesh

Wallet is a web app for keeping track of income, expenses and savings. I built it for my bachelor’s thesis at Häme University of Applied Sciences (HAMK) in Finland: From monolith to microservices: building scalable applications with Kubernetes, CI/CD and chaos engineering.
What I built
I wrote both the front end and the back end. A React front end sends its requests to a Spring Cloud Gateway, which routes them to three services: users in Spring Boot, finances in NestJS and insights in FastAPI. Each service has its own database (MariaDB, MongoDB and PostgreSQL). Sign-in goes through Google OAuth2. The whole application ran on a local k3s cluster, deployed with Helm and GitHub Actions and monitored with Prometheus and Grafana.

Breaking it on purpose
The second half of the thesis used Chaos Mesh to inject faults: stopped pods, network delay, and CPU and memory pressure. This found problems that unit and integration tests would likely not have caught. With extra network delay, two login attempts at the same moment created the same user twice. Under memory pressure, the Java services crashed, while the NestJS service and PostgreSQL kept running. Kubernetes restarted the failed pods as expected.
What I learned
Kubernetes can restart a service that crashes, but it cannot make that service handle failure. Timeouts, retries and safe handling of concurrent requests have to be part of the services themselves, and resource limits belong in the deployments.