2026-07-06 Bank statement analyzer

Some time ago, a friend of mine asked if I know an app which could allow him to analyze his spending based on bank statements. I did a quick research and I found a few tools like this, but nothing looked good enough for me to safely recommend it to him. Fortunately for him, he asked me that question in the exact moment in my life when (a) I had a lot of free time and (b) I wanted to spend it learning some potentially useful new skills. It didn’t take me long to decide to code such a tool myself.

After some back and forth with an LLM I settled on Python. I learned a tiny bit of Python in my student years, but never wrote anything more than a few dozen lines. Also, I figured that writing an application from scratch with a coding agent will be a good way to learn to use it. Of course, the risk is that I will just prompt it and repeatedly press enter instead of actually learning Python. That’s why I started with putting this in the instructions for the agent:

# Learning guidance

**IMPORTANT** This is a learning project — the user writes the code
himself.

- When explaining Python concepts, bring up Node.js analogues when
  they help clarify (e.g. "this is like `require.main === module` in
  Node.js")
- Guide and explain rather than writing implementation code unprompted
- Only write code when explicitly asked to.  When the user says "let's
  get coding", "time to code now", or something similar, it means *the
  user* wants to start coding.
- When asked to check or review my code, be critical and honest –
  I want signal, not comfort.  Pay attention to correct but not
  idiomatic code and suggest improvements.

I started with tkinter, but pretty soon migrated to PySide6 because I couldn’t get the coding agent to do what I needed to do in the former. I also added this to the instructions:

- Exception: I don't need to learn UI coding in Python – it's ok and
  in fact desirable for you to edit/code UI parts yourself.

A bit later, I also added this:

# User profile

Even though I develop this on GNU/Linux, assume that the end-user will
be a Windows/Excel user.

I have to say that the about 32 hours I’ve spent on this project, delivering a working prototype (genuinely useful despite some rough edges!) were a very pleasant experience. I learned quite a bit of Python. It turned out that its syntax is even worse than it was two decades ago (and that is quite an accomplishment!), but the standard library is absolutely great (especially compared to Node’s one, although that bar is not particularly high…). Basically, the only external dependencies I needed were PySide6, python-dotenv, pytest and a few developer tools: pyright, Ruff and PyInstaller. Everything else, including SQLite support, parsing and generating csv and timestamp support is built-in. This is in a very stark contrast to Node.js, where you have a ton of, say, CSV parsers on NPM, half of which probably contain some malware, and none built-in…

Still, I missed a few things from the JS ecosystem. For example, hot reload where saving a file immediately updates the web app you are developing is great. A poor man’s version I used was

$ while [ true ]; do uv run python main.py; done

and exiting the app whenever I wanted to see the changes live – but of course it’s far from a real hot reload, where you stay on the same view, with the same data etc. (It was enough for my simple app, though.) I found this project, but haven’t yet had a chance to use it.

Anyway, the app is on GitHub. Expect quite a few rough edges, do not expect I will review (not to mention merge) any PRs etc. – I am really busy these days, and if you happen to need my code, that’s great, but don’t count on me doing any work with it. (That doesn’t mean I won’t – I definitely want to, but without any guarantees.)

See you next week!