About CraneAi

The story behind the app, and the experiment behind the story

Why I built this

Honestly? I wanted to see what happens when someone who doesn't write code tries to build a real product using AI. Not a toy project, not a tutorial follow-along — an actual application that solves a real problem, with authentication, a database, payment tiers, and all the things that separate a side project from something you'd let other people use.

The tool I chose was Claude Code. The hypothesis was simple: could I go from an idea to a working SaaS application by describing what I wanted and letting AI write all the code? Not just the happy path, but the messy parts — debugging, merge conflicts, security hardening, responsive design, the works.

Twelve days later, the answer turned out to be yes. 18 database tables, 28 schema migrations, 30+ files refactored in a single conversation, and three AI integrations. Not because I'm a fast coder — I'm not a coder at all — but because Claude Code turned out to be a surprisingly good design partner, debugger, and architect.

Why personal finance

I was once a Microsoft Money user. The kind who tracked every penny, reconciled every account, and felt a genuine sense of satisfaction when the balance matched to the cent. Life was simpler then — one country, one bank, not many assets or liabilities. Upload a CSV or QIF file, categorise a few transactions, done. It was almost meditative.

Then life got busy. Career grew. Moved countries. Picked up accounts in different currencies. Suddenly personal finance wasn't a relaxing Sunday activity — it was a chore I kept putting off. I tried several popular apps over the years. They all wanted the same thing: connect your bank, sync your transactions, balance your accounts, categorise everything.

But I didn't want to balance my accounts. I didn't want to categorise every coffee. I just wanted to know, roughly, where my money was going. Am I spending more than I earn? Is my net worth heading in the right direction? Which categories are getting out of hand? That's it. The big picture.

So I built the app I actually wanted. CraneAi does category-level tracking — not penny-level. You enter rough monthly totals, or upload a bank statement and let AI sort it out. No reconciliation, no double-entry accounting, no guilt when you don't log something for three weeks. Just enough financial awareness to make better decisions, without it becoming a second job.

Building with Claude

I'll be upfront: Claude wrote every line of code in this application. The TypeScript, the SQL migrations, the API routes, the React components, this very page — all of it. My job was to describe what I wanted, test what came out, report what was broken, and make decisions when there were trade-offs.

Some of those conversations were straightforward. “Add a sidebar.” Done. Others were genuinely collaborative. When we needed a chat interface, Claude proposed four different approaches — a side panel, a navbar item, a sticky input bar, and a floating bubble — complete with ASCII wireframes and trade-off analysis. We went back and forth, tried two of them, and landed on a floating bubble for desktop with a pull-up drawer on mobile. That's not code generation. That's design partnership.

The debugging was equally impressive. At one point, users reported three separate bugs: chat corrections not refreshing, deleted transactions still getting committed, and wrong results in search. Claude traced all three symptoms to a single root cause — a stale React closure in a memoised callback. The kind of thing that takes a senior engineer an hour to track down.

My favourite moment was the PDF processing pivot. We started with a text extraction library to parse bank statements, but it kept crashing. Three layers of debugging later, I'd had enough — I suggested we ditch Claude's API for this part and try plugging in Gemini instead. That's when Claude, perhaps slightly motivated by professional pride, pointed out that it could read PDFs natively. “Why are we extracting text at all?” We removed the library entirely and sent the PDF straight to Claude's API. Fewer dependencies, better results. Sometimes the best fix is removing the problem, not solving it — and sometimes it takes threatening to hire the competition to get there.

Was it perfect? No. Long sessions lost context. Claude would occasionally over-engineer things — building feature flags and error handling for scenarios that didn't exist yet. Theme changes looked great in dark mode but washed out in light mode on the first pass. Merge conflicts between branches needed careful coordination.

But the iterative loop worked: build, test, report, fix. Don't try to get it perfect the first time. Treat Claude as a fast iteration partner, not an oracle. Share the “why” behind your requests, not just the “what.” Let it ask clarifying questions. And always test on mobile.