Why it was needed
Small clubs usually run on a spreadsheet and a group chat. Money gets muddled, nobody can say why a balance changed, and the person holding the spreadsheet becomes a single point of failure.
What we built
We built a proper system around one rule: money must be right. Every balance is calculated from an append-only ledger, corrections are new entries rather than edits, and every change is written to an audit log.
Key features
Immutable ledger
Amounts are stored as integer pence, balances are always derived from the ledger, and mistakes are fixed by adjustment entries, so the full history can always be reconstructed.
Fair cost splitting
Session costs are divided across the people who attended, with leftover pence allocated so the split always sums back exactly.
Per-team roles
Users can belong to several teams with a different role in each. Players can only see and change their own data; managers run the team.
Full audit trail
Who did what, to which record, with before and after values, for every mutating action including money movements.
Reports & notifications
Low-balance alerts, CSV exports and spreadsheet onboarding for clubs moving off their existing records.
Secure by default
Short-lived access tokens with revocable refresh tokens, rate-limited sign-in, and accounts that are deactivated rather than deleted so history never breaks.
Highlights
- pnpm monorepo with shared validation schemas
- Documented REST API ready for a mobile app
- Containerised production deploy with automatic TLS
Built with
- TypeScript
- React
- Vite
- Fastify
- Prisma
- PostgreSQL
- Zod
- OpenAPI
- Docker
- Caddy
- AWS Route 53
Want something like this?
We build secure, maintainable software around how your business actually works.