← All projects

Building Finance System

Part 1

Building Finance System

Personal finance aggregator: Choosing a data provider: TrueLayer vs Enable Banking - Part 1

~10 min read I wanted one place to see everything I was spending, across six accounts at five banks that I actually use day-to-day: a Nationwide current account, a Nationwide credit card, Monzo, Tesco Bank, Virgin Money, and an M&S Bank credit card. None of these banks talk to each other, none of them export in a format the others understand, and I was tired of opening five apps to answer "how much did I actually spend this month." So: a personal finance aggregator. Pull everything into one SQL
Andrew Townsend
Andrew Townsend
7 min read

Part 2

Building Finance System

Personal finance aggregator: Developer access and app setup - Part 2

~10 min read With TrueLayer picked as the data provider (see the previous post), the next step was the unglamorous part every API integration starts with: get an account, register an application, get credentials, and figure out exactly what permissions to ask for. This post is that setup, written down properly so I don't have to reconstruct it from memory the next time I need to do it again - for a second project, or when the production credentials need rotating. Signing up and creating an ap
Andrew Townsend
Andrew Townsend
6 min read

Part 3

Building Finance System

Personal finance aggregator: The first prototype: a CLI script that links a bank - Part 3

~10 min read By this point I had sandbox credentials, a registered redirect URI, and a scope string I'd thought through (see the previous post). What I didn't have was any actual code, and I've learned not to trust an integration design until I've built the ugliest possible version of it and watched it work. So the first real artifact in this project wasn't an API, or a database, or a frontend - it was a single ~180-line script, truelayer_sync.py, that did exactly two things: link <bank> and fe
Andrew Townsend
Andrew Townsend
7 min read

Part 4

Building Finance System

Personal finance aggregator: From script to service - Part 4

~10 min read The CLI prototype proved the OAuth flow worked. It also had a very short list of things it fundamentally couldn't do: run anywhere but my laptop, keep transaction history instead of overwriting it, or be looked at by anything other than cat transactions.json. This post covers the two commits that fixed all three: init: basic backend/frontend, which turned the script into a FastAPI package with SQLite storage and typed settings, and Add TrueLayer web linking, provider/storage packag
Andrew Townsend
Andrew Townsend
9 min read

Part 5

Building Finance System

Personal finance aggregator: Building the frontend: React, routing, and a design system - Part 5

~10 min read For a while, the frontend was one component: log in, see a table of transactions, link a bank from a text input. That was fine for checking the backend actually worked, but it wasn't a tool I wanted to open every day. This post covers turning that single page into a proper multi-page app - Home, Accounts, Transactions, Settings - with real navigation and a design system underneath it, instead of default browser styling on a scattering of <div>s. It's the work of one commit (Add rou
Andrew Townsend
Andrew Townsend
7 min read