Personal Expense
Tracker
A full-stack app for recording expenses and seeing where the money goes. An ASP.NET Core API, a React and TypeScript frontend, and sign-in through Keycloak. Each user only ever sees their own data.
Explore source code
-
Data isolation
Every query is scoped to the user in the validated Keycloak token. Another user's expense returns
404, so its existence isn't revealed. Two-user integration tests verify it. -
Server-side querying
Search, filters, sorting and capped paging compile into one EF Core query, projected to DTOs and backed by a composite
(UserId, ExpenseDate)index. -
Dashboard in SQL
Totals and category breakdowns are aggregated in SQL. The trend chart picks daily, weekly or monthly buckets from the range length.
-
Tested for real
API tests run on PostgreSQL in Testcontainers with the real migrations, not an in-memory fake. CI builds, tests and publishes Docker images.
- Backend
- C#, .NET 10, ASP.NET Core, EF Core
- Frontend
- React, TypeScript, TanStack Query, Recharts
- Data & auth
- PostgreSQL, Keycloak, OIDC + PKCE
- Tooling
- xUnit, Testcontainers, Vitest, Docker, GitHub Actions