Back to Blog

I haven't written code in years—but I still built this app

·4 min read

For years, keeping track of my money meant a Google Sheet. One tab per month, expenses on the left, income on the right, a few formulas at the bottom doing the arithmetic. It worked. It also nagged at me every single time I opened it.

The nagging was small but constant. Adding an expense on my phone meant pinching and scrolling around a grid built for a laptop. Comparing this month to last meant flipping between tabs and squinting. This is not what I would call a good experience.

What I wanted was obvious to me: a proper mobile-first dashboard that I could load from my phone, and read back something that actually told me how the month was going.

Putting my vibe coder hat on

I know a bit of HTML, CSS and JavaScript, but it's like a language you stop speaking: leave it long enough and the words just don't come. After not touching any of it in over 5 years, I was rusty to say the least. But as a technical writer who spent a lot of time in the past year or so tinkering with AI and learning how it behaves, what it can and cannot do, I knew that vibe coding might get me where I wanted to go.

I built this the way I build everything now: I describe what I want to an AI agent, it lays out the options and the trade-offs, and I decide. People call it vibe coding, and the name makes it sound more careless than it is. The vibe is mine. The judgement about what to build, what to skip, and what's good enough is mine. The AI is like having a really good coding partner who knows the syntax I was never that good at. So I like to think of myself as a kind of project manager who guides the AI towards a goal, instead of letting it run free.

How it works

I'll stay high level, because the point isn't the plumbing. But "how" matters, so here's the shape.

The whole thing lives on Netlify. The part you see is a single page of plain JavaScript, no framework, with charts drawn by a small library. When I add an expense or open the dashboard, that page talks to a handful of small serverless functions, and those functions read and write my data to a simple key-value store that Netlify provides. No spreadsheet to export, no CSV to re-parse. The data just persists, and it's there on every device.

The monthly view gives me what the spreadsheet never could at a glance: income versus expense, my savings rate, how each category is tracking against its budget, and which things moved the most since last month. There's a yearly view with a spending heatmap, and a section that tracks net worth. My partner and I can both reach it from our phones. Boring, in the best way.

Security first

Now, a budget app is a toy right up until you remember what's inside it. This one holds a running picture of every euro my household has. So while it serves an audience of two, I treated the security as if it served strangers.

That meant a real login page, not a flimsy gate. Passwords and keys live in the host's environment, never in the code. If someone gets the password wrong a few times, their address is locked out for a while, so nobody can sit there guessing. Every piece of data that comes in gets checked and cleaned before it's stored, including a nasty little trick where a value typed into a spreadsheet field can turn into a formula that runs when you export it. And the whole site is backed up automatically, every day, to a separate private place, so a bad afternoon can't erase years of records.

I knew to ask for these things, and to push back when the first version was too relaxed, because asking the follow-up questions is the same instinct I've used in writing for years. Assume the first draft is wrong and go find the proof. That instinct survives the jump from prose to code intact, and honestly it's the most useful thing I brought to the whole project.

What this actually changed

I keep coming back to one thing. A few years ago, this exact app would have stayed an idea. I would have grumbled at the spreadsheet, maybe paid for an off-the-shelf budgeting service I didn't quite trust with my numbers, and carried on pinching at a grid on my phone.

The AI didn't make me an engineer. It did something I find more interesting: it turned building into something I actually reach for. These days I'm always half-looking for the next project, the next small itch worth scratching, because vibe coding feels like having a giant box of Lego. If I can picture the thing, I can usually build the thing. The budget dashboard just happened to be the one I wanted badly enough this time.

The spreadsheet is retired now. I don't miss it.