I was entering my credit card transactions manually into my personal finance app YNAB*, and got distracted by a mini vibe coding project — what if I made a personal web app to send screenshots of my bills (not the full PDFs of course) to a LLM to get CSVs I could upload into YNAB**?
This led me down a rabbit hole where I ended up making a side app to compare LLM processing speeds on OpenRouter in converting images of credit card transactions to CSV. The “test” was to parse one screenshot of transactions (about 11) into a given format (date, description, memo, incoming, outgoing), timed, and checked against the expected number of transactions and summed total.
Observations and conclusions:
Gemini 2.5 Flash beat the crap out of every other model I tried (the full list: Claude Haiku 3, Mistral Small and Pixtral, GPT 5-mini and 4o-mini, Llama 3.2 Vision and 4 Scout, Gemini 2.5 Flash Lite and Gemma 3, Qwen 2.5VL, Grok 4 Fast, Kimi VL, GLM 4.5V). 4 seconds to parse the page, vs. 10+ for the next nearest model! I’d previously just done this with ChatGPT, but got bored waiting for it to make me a nice Markdown table, and this is blazingly fast in comparison.
Local models are still currently awful. I fed the same prompts to some qwen and llama models and their ilk (whatever can run on my M4 Pro MacBook Pro with 64GB RAM), and they kept making up output or missing results. Maybe I just don’t have enough experience working with local LLMs, but I fear it’ll be a while before they get good enough for anything other than specialised tasks.
I was trying local LLMs because of cost, but each month of credit card bills costs me under 10 cents to process. Worth it!
With all the time I spent doing this, I could have manually entered all my card transactions by now. Cue XKCD comic about “The General Problem”! There’s always an XKCD comic.
The GitHub repo is at yjsoon/ynab-llm-formatter. Upload one or more images, and get back a CSV in the upload format YNAB expects. That’s it! Try it out, and let me know if you actually end up using it. (And if it’s not quite what you need, fork it and send it to your own AI coding agent to edit!)
* It’s designed for automatic transaction imports using Plaid, which… isn’t supported here. Sigh.
** I just re-read the second half of this sentence, and there’s way too many acronyms for this to have made sense.
One issue with AI-assisted coding is how easy it is to just ignore what Codex/Claude Code says. It’s (currently) important to review the code that AI produces, but it’s so tempting to just skim it, assume it’s correct, and pay the technical debt later.
In order to force myself to read the AI’s output, I set up my AGENTS.md/CLAUDE.md files to make the agent swear like a Singaporean Ah Beng when talking to me, and now I can’t help but pay attention to this imaginary platoon-sergeant-turned-coder screaming obscenities while coding. Try this out with whatever amuses you enough to keep you reading!
Grateful to live in a time where I can provide increasingly stupid vibe coding tips 🙏🙏🙏
Half a day into my vibe coding class, I found myself teaching participants about APIs, private keys, databases, CRUD, and edge functions — things I’d only normally cover after 6-10 days of intro web.
And everyone did fine directing their LLMs to set up CRUD, incorporate API keys into the back-end, and much more; all without knowing a lick of HTML, CSS, JS, React, or TypeScript.
Which makes me wonder if programming instructors are like driving instructors at a point in the past. We might be at that point where driving instructors saw their learners taking to driving with automatic transmissions, since all they wanted was to get from Point A to Point B, and didn’t feel the need to learn everything about internal combustion and gear shifts and stalling, even as their instructors wanted to teach them the ALL-IMPORTANT FUNDAMENTALS — conceptual knowledge and practical skills which the instructors loved and enjoyed and had gotten really good at.
So the fundamentals as we know them just… aren’t, any more? That’s quite a shift (sorry) to process. I’m sure we’ll continue to have professional programmers — like how we have professional drivers who understand the ins and outs of torque and transmission — but it’s nice too that everyone else is now enabled to just get where they want to go.
The really rather useless slide I use for getting folks started with vibe coding
A former student posted this heartfelt piece about why they’re leaving Singapore, titled “if you meet the singaporean on the road”. It’s a great read, and resonated strongly with their audience on Twitter.
Preview image of blog post at eigenmoomin.substack.com.
I met up with them for lunch yesterday, amidst the throngs of students leaving school early from their Teachers’ Day celebrations, just to catch up and wish them well on their next step. Afterwards, I just sat for a bit and marvelled at how lucky we are as teachers — to get these precious glimpses of young lives growing and becoming themselves.
Happy Teachers’ Day to all who teach and who’ve taught: my family, friends, colleagues, and of course teachers.
(This student will be in the SF Bay Area, and if anyone in my network is happy to lend them any kind of support, let me know; I’m sure they’d appreciate the connection.)
About a month ago, Lex Fridman released a 6-hour (6-hour!!) long interview with DHH (David Heinemeier Hansson), creator of Ruby on Rails and Basecamp. I’d never watched any of Fridman’s interviews before this, and in recent years, I’ve been finding DHH to be a bit too much of a Loud Opinionated Online Figure for my taste, but I ended up watching all 6 hours (6!! hours!!!) of this.
Some choice notes and quotes, which I’m sure I’ll get back to in future posts.
DHH reminisces about the easy feedback loop of PHP, and this reminds me of how well-designed creative AI apps reduce the distance from intention to output:
In many ways I think the pinnacle of web developer ergonomics is late ’90s PHP. You write this script, you FTP it to a server and instantly it’s deployed. Instantly it’s available. You change anything in that file and you reload, boom, it’s right there. There’s no web servers, there’s no setup.
Jump to timestamp.
On the web getting ridiculously complex in the 2010s — something I experienced firsthand when I stepped away from web development for a few years to come back to React and Node and webpack and whatever else is now “standard”:
You had all of this brain power applied to the problem of how to work with the web, and there were some very smart people — with some I’m sure very good ideas — who did not have programmer happiness as their motivation number one. They had other priorities, and those priorities allowed them to discount and even rationalize the complexity they were injecting everywhere. [… They] sliced the development role job into these tiny little niches. ‘I’m a front-end glob pipeline configurator!’ Timestamp.
On why he — and, I believe, some of my students — feels strongly about not wanting to use AI to code for him:
If you don’t have your fingers in the sauce (the source) you are going to lose touch with it. There’s just no other way. I don’t want that because I enjoy it too much. […] When someone who sits down on a guitar and plays Stairway to Heaven, there’s a perfect recording of that, that will last in eternity. You can just put it on Spotify, you don’t actually need to do it. The joy is to command the guitar yourself. The joy of a programmer, of me as a programmer, is to type the code myself. Timestamp.
DHH and Lex on the non-judgmental nature of AI chatbots:
I’m getting smarter every day because of AI, because I’m using AI to have it explain things to me. Even the stupid questions I would be a little embarrassed to even enter into Google, AI is perfectly willing to give me the ELI5 explanation of some Unix command I should have known already. Timestamp.
It’s a great basically search engine into all kinds of nuances of a particular programming language, especially if you don’t know it that well. Or APIs you can load in documentation, it’s just so great for learning. For me personally, I mean, on the happiness scale, it makes me more excited to program. […] And even if I never use the code it generates, I’m already a better programmer. But actually the deeper thing is, for some reason I’m having more fun. That’s a really, really important thing. Timestamp.
And it makes programming fun again, and gives him confidence to try new things:
What it’s made more fun to me is to be a beginner again. It made it more fun to learn Bash successfully for the first time. […] It gave me the confidence that, you know what? If I need to do some iOS programming myself… I haven’t done that in, probably six years was the last time I dabbled in it. I feel highly confident now that I could sit down with AI, I could have something in the App Store by the end of the week. Timestamp.
How to approach learning programming with AI:
There should be more of the time writing from scratch if you are interested in learning how to program. Unfortunately, you’re not going to get fit by watching fitness videos. You’re not going to learn how to play the guitar by watching YouTube guitar videos. You have to actually play yourself. You have to do the sit-ups. Programming, understanding, learning almost anything requires you to do. […] Now, I understand the temptation, and the temptation is there because vibe coding can produce things perhaps in this moment, especially in new domains you’re not familiar with, tools you don’t know perfectly well, that’s better than what you could do, or that you would take much longer to get at. But you’re not going to learn anything. Timestamp.
And, unrelated to all of the above, on being there for your kids:
I think there’s just some ancient honor in the fact that, again, this DNA that’s sitting on this chair traveled 30,000 years to get here, and you’re going to squander all that away just so you can send a few more emails. Timestamp.
I’m not sure I agree with everything said, but it’s certainly food for thought, and it kept me watching for all 6 hours (6!!!?! hours!!?!!).
If, like me, you’re interested in AI, programming, and learning, and/or you’ve been building for the web from the 1990s till now, I highly recommend the interview. Just tell your partner/friends you have a great movie night pick lined up, and settle in for 6 hours of nerdy conversation!
(Disclaimer: I did not actually attempt to make my wife watch this.)