2025 in review

Tradition dictates that I write one of these “year in review” articles in December. Here it goes.
Previous entries:
2012 - 2016 - 2021 - 2022 - 2023 - 2024
Personal stuff
This year was pretty great, until November 22, when my girlfriend and her daughter were in a pretty serious car crash. My girlfriend got multiple fractures in her foot and ankle and is confined to bed, stuck at home. She has an external fixator - a system of pins that go into her bones, connected by metal rods to keep everything in place. It’s not safe for her to leave the house with her leg essentially being a pin cushion. If someone or something were to bump into the pins, that would be pretty horrible.
Her daughter is doing a lot better, with “just” bruises, sprains, and bone bruises. Still, she’s unable to walk without crutches, and that probably won’t change for a few more weeks. So I’ve been taking care of both of them and their dog.
My favorite thing this year was a 10-day road trip through Austria and Switzerland. I especially loved Kandersteg in Switzerland, which completely took my breath away. In fact, after we got back home from our vacation, I was completely unable to put this place out of my mind. Every waking moment I was thinking about Kandersteg; it was all I could think about. I felt a sort of homesickness, if that makes sense, and I got quite emotional with random outbursts of tears.
So, four weeks after our holiday, I went back to Kandersteg for a few days, and luckily that fixed everything. When I got back home again, I just felt content and happy, no longer feeling that hole in my heart.
I also got to see Air, one of my all-time favorite musical artists, and Michelle Wolf, one of my favorite comedians. It was a good year.
Writing for loopwerk.io
I set a new personal record for the number of articles written in a year: 40! I really was on a roll, mainly writing about Django. The most-read article that I wrote this year was Beyond htmx: building modern Django apps with Alpine AJAX.
I also wrote some non-technical articles such as A quarter century of chasing simplicity, Thoughts on Apple, and why I left iOS development behind and An ode to the tester. I think these non-technical articles were more fun to write, but sadly they get barely any views.
My articles were featured in the Django News newsletter 17 times, Python Weekly 4 times, and PyCoder’s Weekly 5 times.
In total this site got 65.2k unique visitors, and 92.2k total pageviews. Last year those numbers were 17.5k and 25.4k, so a massive increase. A huge chunk of this is still coming from one article written in 2024: Poetry versus uv, which was by far the most-read article in 2025.
Open Source
This year I built RSSFilter.com, a tool to create filtered RSS feeds. No more endless Trump and Musk articles in your tech feeds, just filter based on keywords and categories. It’s not getting a ton of usage, but I built it mainly for myself, and I absolutely love it. This project is powered by a new open source Django package django-rss-filter, which does all the filtering work. Check the announcement article for more information.
I also created drf-action-serializers, which makes it easy to use different serializers for different request methods inside of a Django REST Framework ViewSet. I use it for all my DRF projects now. Check the announcement post.
The biggest project of this year, and the one that gained the most stars, was the rebooted django-generic-notifications. It’s a reusable Django app for sending all sorts of notifications to your users. This can be done via email or by using a “Notification Center” on your website. It supports digest emails, grouped notifications by type, and it’s highly extensible and customizable. I’m very proud of this project. Check out the announcement for more information.
Lastly, I created spamusement.cc. I loved spamusement.com, and when it was taken offline, I decided to make an archive using Saga (of course).
Freelance work
I’m still contracting for Sound Radix. This year I added Stripe as a payment provider to the webshop (next to PayPal), added a Rent-To-Own option, and moved all the hosting over to Coolify. I also upgraded to Svelte 5 and its new reactivity system.
I’ve also started working on a brand new project for Sound Radix, which should be announced early in 2026. It uses Django and Alpine AJAX, which is quite exciting to work on.
Besides Sound Radix, I’ve worked on a few small projects. The most interesting of these was implementing django-generic-notifications for dskrpt.de, replacing a complex system built on top of getstream. It’s very cool when a company pays you to implement your own open source software into their project!
Critical Notes
If you read my article My #1 rule for lasting side project passion, you probably know why I didn’t work a lot on Critical Notes this year - just like 2023 and 2024. A side project no longer feels like a fun and creative outlet when it uses the exact same tech stack as your day job. It starts to feel like normal work, and it’s hard to be motivated to work on it after work hours.
I did migrate the site to Svelte 5 this year and had plans to add more features, but then my girlfriend got into the car accident and my plans changed. When I have to make time by giving up something, Critical Notes is a pretty easy sacrifice to make.
Some stats:
- I made €3151 from 94 subscribers (up from €3076 last year)
- Over 7300 users (up from 5500 last year)
- 54k unique visitors and 482k total pageviews (up from 38k and 396k)
So the numbers are increasing, but very slowly. Notably, the revenue isn’t increasing as much as the number of users and visitors. It’s clear that without serious marketing effort, the site won’t grow purely through word of mouth. But it doesn’t make enough money to justify a big marketing budget, and it also doesn’t make enough money for me to structurally work on it one day a week and make bigger changes. Critical Notes is kind of stuck between a small hobby project and a serious side project. I’m not sure what to do about it.
AI
This is the year where I started to use AI in my work. I only use Claude Code via its CLI, and only on isolated features or issues, so that I can keep a very strict overview of every line of code that goes in. AI just isn’t good enough for my standards, and it needs a lot of oversight and constant steering. It’s why I don’t think my job is in danger (yet), as I wrote about in this year’s article Garbage in, garbage out: why good developers are still necessary in the age of LLMs.
Even though I did start to use AI this year, I do count myself as an AI skeptic. I’m worried about the future, especially for upcoming junior developers who’ll have a very hard time finding a job. I’m worried about the impact AI has on climate change. I’m worried about what AI does to our culture and our art. And how an entire generation grows up not knowing how to learn anything.
I hate how AI is now being stuffed into every OS, every app, every feature. Most of it completely useless and infringing on my privacy.
But I also think that AI is a bubble that’ll burst, taking down a lot of businesses, destroying a lot of jobs. Cory Doctorow wrote an excellent article earlier this month that I highly recommend: The Reverse Centaur’s Guide to Criticizing AI.
Games of the year
My most played games this year were Brotato, Monster Train 2, Ghost of Tsushima, God of War Ragnarök, Megabonk, 9 Kings, Escape from Duckov, and ARC Raiders. My game of the year would have to be Megabonk. While I really enjoyed all of these games, Megabonk will probably take Brotato’s role of game I play before going to sleep. It’s perfect for a 30 minute run on the Steam Deck, and after two years of regularly playing Brotato I am quite done with it.
Songs of the year
A new category for my year in review: my most listened-to songs.
- Run The Jewels - Blockbuster Night Pt. 1
- Run The Jewels - Love Again
- Michael Kiwanuka - Final Days
- Lola Young - Messy
- Alison Goldfrapp - Find Xanadu (Röyksopp Remix)
Want to say thanks?
If my articles and/or open source code have helped you this year, please consider sponsoring me on GitHub. Or buy me a coffee. Thanks!
