Year in Review 2025
Introduction
In Big Fat Quiz of The Year 2016, Mel Giedroyc described her year as:
It was absolutely cracking. Marvellous. Every month rolled by better than the last. May, May was really good. May was a cracker. August, even better than May. September, it was so brilliant.
I want to have even 10% of her positivity.
It’s time for another end-of-year reflection post. I started writing these in 2016 after a friend of mine had started doing the same and they’ve become not only a nice habit to wrap up a year but also a nice time capsule for me. Years go by and over time they meld together and it’s hard to remember what life has brought to me.
So here’s my review of 2025, a year that finally brought some positive hope into life after a few ones I’d rather wish had gone differently.
Sprinkled in are some pictures from throughout the year from important moments.
What I hoped for 2025 last year?
Rather than set up new year’s resolutions, I like to set a few hopes or goals for the year — some of them I complete and others not so much.
I want to become a better writer. I haven’t quite figured out the metrics for that yet though. It’s hard to know if my output improves in quality. Over a lunch with a friend, we brainstormed this a bit and one outcome we came up with was to write more long-form stuff this year. Something akin to a book - but probably not an actual book.
My writing goal for this year was not one to be easily measured. The previous year, I set my goal to publishing 100 posts and reached that but I didn’t feel it would be meaningful to raise it from there as that wouldn’t really benefit me.
Instead, I wanted to become better at writing, whatever that would mean.
Recently, over the last couple of years, I’ve noticed more and more that I actual enjoy my own writing and feel proud of my pieces. And I don’t seem to be the only one.
I’ve gotten a lot of positive feedback on my writing too. During the year, my readership has more than doubled: the monthly views have gone from around 150k to 300k and visitors from roughly 20k to 45k per month. What I love more than those numbers going up is meeting people in events and even in the pub every now and then who come talk to me and telling me they enjoy my writing.
And sure, the main goal of 2025 is to find a job. But I hate setting up goals where the outcomes are not in my hands. I can do things to increase the odds but eventually, getting hired is in someone else’s hands and if those hands are not kind, I cannot reach the goal. I don’t have particularly high hopes about 2025 either since the market hasn’t shown much improvement towards the end of this year.
I managed to find a job — or more accurately, a job found me — this year. I was reached out by a recruiter, we talked for a bit, I went through a couple of rounds of interviews and in the end of April, I joined Reaktor as a full-stack developer. I got to join an office with a lot of fantastic people that I knew from before and have been having a great time so far.
In a society where having a job is how people’s worth is measured, it sure is nice to have one.
If I think about the communities I run, they are pretty much in good shape and I’ll keep running them for years to come but they are also reaching the limits of what makes sense in terms of growth or doing more. They need to be at a capacity where they can be run whilst doing everything else in life so I can’t go overboard with them just because I now have more time. I also don’t want them to end up in a situation where nobody else would continue after me because the amount of free labour is too much.
We had really a good year with both Turku ❤️ Frontend (with which we celebrated 10 year anniversary in December) and archipylago.
I also want to have more good discussions with people. To experiment with that, I’ve crafted and designed a year-long project. I want to keep the details still secret but if I succeed in sticking to it, I’ll write about it in-depth towards the end of 2025.
I started the year with a project I called “One email every day” where I wanted to start more discussions with wonderful people. I emailed replies to blog posts, said thanks to people who maintain movements, communities or software that I enjoy. Even though that project didn’t last very long, the spirit of it stayed with me the whole year. I started a ton of great discussions via blogs, emails, social media and in person and I’m so glad I did. I also added a box at the end of each blog posts that reads:
If something above resonated with you, let's start a discussion about it! Email me at juhamattisantala at gmail dot com and share your thoughts. In 2025, I want to have more deeper discussions with people from around the world and I'd love if you'd be part of that.
That got me quite a few good emails as well which started nice discussions.
All in all, I’m really glad with all the four goals for the year.
General thoughts of 2025
Looking back, 2025 was a better year than many of the few previous ones but still at the back of my head, I feel I’m nowhere near where I’d like to be in life. I feel like I’m still not in a driver’s seat of my own life but rather trying to hang on.
Doing this reflection exercise helps notice all the good stuff.
Writing
I published something every week — a streak I’ve managed to keep going since July 2023. Like last year, all but one Wednesday got a blog post.
This year, I started two new main writing projects to accompany my blog: From Juhis with Love newsletter that, once a month, gathers together what I’ve been up to and has links to wonderful, joyful things I’ve come across in the Internet that month and Garden of Learning, my digital garden where I publish my notes.
In this blog, I published 107 blog posts. I wrote and published 12 newsletter issues and published one guest post. I published a bit over 350 notes in the digital garden, 12 of them being my Advent of Code solution explanations.
In August, I took part in Blaugust and despite not having a plan to write that much, ended up with 31 posts in 31 days once again and had a blast. Made a bunch of new writing friends this year again.
Some of my favourite blog posts from the year:
- Human curation over algorithmic recommendations (Jan 2025)
- Be careful with introducing AI into your notes (Jan 2025)
- Explaining it helps you learn it (Feb 2025)
- Redesign and rewrite of playtest printer (Mar 2025)
- “Shrink designing” board games (Mar 2025)
- How I write and publish blog posts in April 2025 (Apr 2025)
- Notifications about (almost) anything with ntfy.sh (May 2025)
- As a developer, my most important tools are a pen and a notebook (May 2025)
- IndieWeb principles and I (Jul 2025)
- Build the forum you want to see in the web (Aug 2025)
- Static sites enable a good time travel experience (Aug 2025)
- My favourite bird Pokémon TCG card arts (Sep 2025)
- PyCon Finland 2025 recap (Oct 2025)
- Improve your programming skills with Advent of Code (Nov 2025)
- I built a tiny RSS generator for my Advent of Code solutions (Dec 2025)
I also had writing projects that got scrapped or postponed: in the spring I had plans to write a small book but then I got a job and that got sidetracked. I started writing a technical guide that is still on my holiday backlog, maybe I’ll get to start the new year with it. About 50 blog post drafts didn’t see the light of day but they live in my notes and might resurface.
I’ve learned to let go of old projects that never became anything. I used to stress about them and see them as failures but now I’m just happy I have a lot of ideas and that the best ones come through and the rest can be let go.
Communities, events and speaking
This year was a great one for communities I was involved with. With Turku ❤️ Frontend we organised 8 meetups and one official afterwork and with archipylago we ran 5 meetups and 3 sprints. I stepped down from admin position at Koodiklinikka but remained active and ran some community projects like our annual NHL Bracket Challenge where I finished 3rd. In May, we organised another Future Frontend conference which was a blast.
I got on stage 18 times this year to talk about debugging, Django, documentation, blogging, prototyping, building developer portfolios and building communities. And I hosted a pub quiz in our company winter party which was fun.
Due to early year unemployment and then starting a new job, I didn’t have the opportunity to visit any conferences abroad but my highlight of the year was speaking in PyCon Finland in Jyväskylä.
Seth Larson launched Fedi Donut Friday initiative and I ate donuts and pastries every other Friday and invited others in Mastodon to join me to celebrate their weekly wins. I made a couple of new online friends through that.
I played more Pokémon TCG in person this year, participating in leagues and retro nights but also ran a Progression Series for our group playing through all sets of Scarlet & Violet block. In 4.5 months, we opened 16 sets, built 15 decks each and battled against each other after each set.
Projects
Garden of Learning
As I mentioned in writing section, in January I started publishing my notes in Garden of Learning, my digital garden. It took a bit of time to figure out some of the technical bits but I managed to end up with a flow that works really nice.
I’ve really enjoyed having a place for writing that is not quite blog-like. Notes like 1001 Albums You Must Hear Before You Die, Scarlet & Violet Progression Series and 2025 Christmas Movie tracking are good examples of notes that I’ve updated over time.
There has been a lot of moments when I’ve considered building my own tool for building websites from Obsidian. So far, I’ve managed to get by with Quartz but there are a few things I would wish to customise and maybe clean up some of the output code.
It’s one of those projects where it feels like a “quick weekend project” in my head but I’ve been around the neighbourhood enough to know that they never are such. Let’s file that into the “one day” part of the backlog.
Progression Series website
In September, our local Pokémon TCG play group started a Progression Series and to keep track of matchups and scores, I built a website for us. Using Eleventy’s custom data file format, I managed to build a nice scores website that I was able to update directly via GitHub. Once people reported their match scores, I could open the repository on GitHub’s mobile app, add a line to the data file and the site would recalculate scores and update it.
At one point, I started adding deck images (for the future, I need to figure out a better way to provide them in accessible way by asking players to submit decklists and not just images) for each set.
Advent of Code
My usual December joy is to solve Advent of Code puzzles and write explanations of my Python solutions to help people learn programming. This year had 24 puzzles in 12 days and the new shorter calendar was a great thing. I was able to get all the stars for the first time and didn’t have to make difficult decisions about how to spend the few last days leading into Christmas.
I wrote a retrospective of the month and the wonderful new people who I discovered through their solutions.
Playtest printer
One of my beloved hobbies is playing TCGs and prototyping board games and I redesigned my playtest card printer to finally give it some polish and new features.
It’s one of those small apps I enjoy to use and occasionally work on. Over the years, I used it to also print a lot of card sized info cards. I printed a double-sided reminder card for chess board starting assembly and the Cow opening and a couple of rule-reminder / custom player aid cards for other games I own but don’t want to carry manuals with me.
I play chess rarely enough to remember whether A1 is black or white and in which order the Queen and King are placed at the start.
Pokémon Toolkit
Over the year, multiple things led me to start building a self-hosted Pokémon TCG toolkit: a collection of tools that enable me to do all sorts of things. It’s running in my bedroom for local access only because I don’t want Pokémon Company’s lawyers knocking on my door.
PokemonTCG.io API started having problems early on and I had to figure out a backup plan so I started building a custom API to power up my hobby projects. It’s still missing some key features like a really good search but it’s good enough that I was able to start building the other bits.
I used to have my collection inventory in pkmn.gg but they started to have more and more features behind a paywall and their focused seemed to move to a direction I don’t want to follow. The final trigger for building my own was when I realised they didn’t have a way for me to export my data. I knew I needed to start building my own sooner than later, otherwise it would be a massive undertaking to rebuild the collection later. With that, I’m in a stage that has all the features I needed from the site but has some added features like a trade feature and changelog.
As we started playing the Progression Series, I realised the amount of cards grew really fast and I needed a better way to manage my card pool than having an evergrowing list of cards. I built a script that takes an export from the virtual booster opening simulator and stored the cards in a database. I then built a UI that shows the cards I have, sorted by card type (Pokémon, Items, Stadiums, Supporters and so on) and displayed by evolution lines.
Finally, I started building a tool to manage future Progression Series. It’s still a work in progress but it allows league admins to create a series, select which sets are part of it, invite players by email and track scores and card pools.
In the future, once everything else moves forward a bit, I’ll integrate my earlier deck builder project into the toolkit.
Building this has been some of the most fun I’ve had writing software in ages. I’ve built it with Django and htmx which has turned out to be an excellent tech stack for a project like this.
Homelab
I have two Raspberry Pis and a NAS running in my bedroom that I’ve configured with a few self-hosted homelab projects: Home Assistant to run my smart home, paperless-ngx to keep my digital documents in order, Jellyfin for my personal media collection, a VS Code Server for editing my projects on the Raspberry Pi and the aforementioned Pokémon Toolkit.
I also have a couple of RSS proxies running there. Either to take an existing RSS and modify it before it reaches my reader or to run custom RSS builders for sites that don’t provide RSS themselves.
I also have some scripts there that I can trigger from my iPad with a Shortcut: for example, I can choose an action from the iOS’s Share menu to send the current page URL to my homelab and depending on where that link points to, the bash script does different things.
It’s a growing collection as I discover new services. One of those is BookLore, an ebook manager that I had been looking at for a while. I installed it and added most of my collection over the Christmas holidays.
Games, books, podcasts and so on
Games
I wrote a separate review post about some of my favourite games I played this year.
Books, podcast and other media
Most of my recommendations are scifi or solarpunk adventures. I finally read Becky Chambers’ Monk and Robot duology and it was brilliant. I loved both books: I read the one in English and the other translated to Finnish as it was translated by my favourite translator and both were excellent.
Nnedi Okorafor’s Binti was another excellent scifi story.
This Is How You Lose the Time War had a lot of good in it but it was bit too abstract and dragged along a tid bit too much to find a permanent spot in my bookshelf but it had its moments.
Katja Kontturi’s Ankkalinna - Portti kahden maailman välillä is a Finnish book about Don Rosa’s comics. It’s a casual reader’s version of Kontturi’s PhD thesis and I got to meet the author in October and got my book signed as well. As a comic book geek, it was really nice to peek into the more analytical side of how Rosa crafted his stories.
My #1 podcast of the year was once again Tom Scott’s Lateralcast because it’s just that good. Some new, interesting ones were Northwoods Baseball Sleep Radio which is a fictional sportscast of baseball games spoken in slow soft tones, perfect for falling asleep. Breaker Whiskey is a lovely daily microfiction audio drama / podcast that I enjoyed in the fall. Individual episodes are only a couple of minutes long and they follow a story of a woman in a post-apocalyptic USA.
To my Finnish speaking nerd audience, find Lohikäärmeradio wherever you find your podcasts. It’s a monthly podcast about fantasy and scifi books.
Towards the end of the year, I discovered PagedOut! magazine. It’s a experimental one page == one topic technical magazine and I’ve enjoyed reading through the archives and have started drafting an article to submit there as well.
What’s up with 2026?
Over the past years, I’ve enjoyed setting up goals for myself, just to give some structure. This year, I don’t feel like having any. I don’t believe that goals are really needed for good things to happen. Especially in personal life: I’ll work on things that I enjoy and believe will lead to good things, goals or no goals.
But there’s one major thing I want to do next year.
I want to decide it’s gonna be a good year.
Ever since the pandemic started, I’ve been struggling with how life has turned out. The pandemic and what followed kind of destroyed my career, took a huge toll on my mental and physical health and social life.
I’m tired of waiting.
Maybe it’s not up to some external factors to change but rather my look on life.
It’s time to take action and decide it’s good and focus on the positive aspects of life and make the most out of them.
If something above resonated with you, let's start a discussion about it! Email me at juhamattisantala at gmail dot com and share your thoughts. In 2025, I want to have more deeper discussions with people from around the world and I'd love if you'd be part of that.