Centwise
People around me at Home Groningen kept telling me the same thing about budgeting apps: they tried one, it felt like bookkeeping, they stopped. Centwise starts somewhere else. You export a CSV from your bank, drop it in, and see where your money went, without linking an account or setting anything up first.
- Client
- Home Groningen community
- Role
- Design and development
- Year
- 2025–2026
- Stack
- Next.js, TypeScript, Tailwind CSS, Supabase, Postgres, Recharts
- Site
- centwise.homegroningen.nl
The brief
Most budgeting apps ask for a lot before they give anything back: link your bank, build a budget, categorise every transaction. The people I spoke to wanted the answer first. What did I spend last month, and on what?
That set the scope: one import, an overview that makes sense straight away, and enough control to correct what the app gets wrong.
What I built
- CSV import for Dutch bank exports, handling both comma- and semicolon-separated files.
- Automatic categorisation into eleven categories, with a manual override on every transaction.
- Tag rules that users write themselves: a pattern such as a shop name, applied to every matching transaction.
- Charts per month and per category, built with Recharts.
- Row-level security on every table in Supabase, so each user's data is isolated by the database itself.
Decisions
A CSV import instead of a bank connection
Every Dutch bank lets you export a CSV, and people understand what that file is. Linking bank accounts would have meant a third-party aggregator and asking for a lot of trust up front. The import kept the first version small and the privacy story simple.
Letting people correct the machine
Automatic categories are fast, but they get some transactions wrong, and one wrong guess is enough to make people doubt every number on the screen. So any transaction can be recategorised by hand, and users can write tag rules for things only they know about, like a holiday or a recurring payment to a friend.
Security enforced by the database
Financial data needs isolation that doesn't depend on every query being written correctly. Row-level security policies in Postgres tie each row to the signed-in user, so a bug in the app can't show one person another person's transactions.
Outcome
I demoed Centwise during a Sunday service at Home Groningen, and people signed up the same morning. Members of the church use it, and what they ask for decides what I build next.