Group trip expenses
Closed source
Shared trip costs, settled in as few payments as possible
Log what each person paid, split it any way you like, and the app works out who pays whom. A .NET modular monolith with a separate Vue client.
ASP.NET Core, PostgreSQL, Vue 3, Docker
How it's built
Architecture
- Three modules, each with its own schema. No joins between them.
- Modules talk only through MediatR, for example to check the payer is in the trip.
Authentication
- JWT for 30 minutes, refresh token for 7 days, rotated on every use.
- Known gap: tokens sit in localStorage. Next step is an httpOnly cookie.

