Side Projects in 2025

Similar to last year’s post about the value of side projects, this post is a tour of the side projects I shipped (and abandoned) in 2025. So let’s go back and start with my favorite time of the year for side projects: the Christmas holidays.

LLM Quiz Game

I attempted to build another game, again in Elixir. The initial plan was to learn Go, but I gave up after two weeks. I just couldn’t get used to the language. Anyway, the quiz idea was simple:

  • Every player puts in themes at the beginning of the game.
  • An LLM generates a pool of questions out of these themes.
  • The player with the fastest correct answers wins.

Game development is exciting because of the immediate feedback. Unfortunately, the game was only fun for the first few rounds. Afterwards, we lacked creativity in finding new themes.

No problem, we can iterate. So I added a theme generator. This extended the fun for a few more rounds, but in the end there was still a lack of variation in the generated questions.

As with many side projects, I stopped working on it. I still like the idea of choosing your very own topics for a quiz. But I also gifted myself a trombone for Christmas, so my next side project was around the corner.

Trombone practice tool

Learning to play trombone was one of my personal highlights of the year. But I struggled in the beginning reading bass clef notes again and rewiring my brain to think in slide positions on the trombone instead of a piano claviature.

So I built a small tool to help me with that. First, it checked whether my pitch was correct (which was not easy in the beginning). And second, it trained me on different scales and connecting notes to slide positions.

Based on the screenshot, you might notice that I vibe coded the project – because it looks like every other vibe coded site. The code was also … let’s say questionable. The basics worked, but it fell apart in the details. The pitch detection wasn’t very good and I had to find a replacement. This led me into an interesting rabbit hole of different pitch detection algorithms.

Eventually I got better at reading sheet music, and so I never need to look at that code again. Also, spring came along, and with it a constant discussion I have with my partner.

Collie Scout

For the last few years, my partner has tried to convince me to get a dog. She got me from a “Definitely No” to a “Yes, Maybe”. We also thought a lot about the breed and would like to have a Border Collie, Australian Shepherd, or Sheltie. (Yes, we know. It can be tough with these breeds).

We started looking around at different animal shelters, and quickly got annoyed monitoring the websites for new dogs. It was the perfect project to build a scraper. And we found the perfect name: Collie Scout.

Again, a nearly vibe-coded project because I didn’t want to dig into every shelter’s website HTML structure. It also has a Telegram bot that sends us the new dogs every day. 10 am is now our favorite time to get a Telegram message, since we know it could potentially be our new dog. (Or 11 am during summer, because there is of course a daylight saving time bug in the code).

”The Stack”

We’re now in summer 2025. I had a longer summer PTO (yay), and was stuck in bed with COVID (nay). So I started tinkering on my next project and immediately bought a new .com domain (but had to ditch the idea the following day).

It got me thinking about a question that I have struggled with for years now: why am I buying domains before writing a line of code? Just joking, I know that it’s a lack of patience.

The actual question was: what’s the best tech stack to build my projects?

Exploring the frameworks

I started looking into Next.js and was immediately underwhelmed. While I appreciated the goal of combining server and client, I lost track of which part gets rendered where.

Then I tried it with tRPC, Fastify and Prisma, only to realize that it was a real pain to get everything working well together. Node.js for the backend felt brittle, especially for ORMs. I started to appreciate ActiveRecord afterwards, which says a lot.

DHH always shouts on stage that Rails is the only “One Person Framework”. So I gave full-stack Rails a try again. Of course, I am way more proficient with Ruby/Rails than with any other language or framework, so it was fast to build something.

But one of my requirements for “The Stack” was full typing from backend to frontend. Since Elixir is on the way to introducing types, and is my favorite language right now, I went with Elixir in the end.

Finding the stack

I invested a few weekends and built myself “The Stack”: Elixir on the backend with Phoenix, an OpenAPI spec for the API, and a React app with TanStack. It worked pretty well and so I had to use it for my next project.

Photowalk

It’s a shame that I barely use my lovely Fuji X100V camera. Outside of trips, I just let it collect dust. But then things changed. A close friend of mine also got a Fuji and proposed to go on a photowalk together.

The concept is simple: everyone has a theme assigned for the walk, with the hope that the constraint fuels creativity. For example, in the screenshot you see above, everyone got assigned a different color to focus on that day.

During the first walk we knew that we needed a way to share our photos afterwards. Some people from our group proposed boring solutions like “use Dropbox”. Well, with just boring solutions, I wouldn’t have a side project to build with my new Stack!

So, of course there was no other way than to spend the next weekends building a web application to upload, share, and like the photos of our photowalks. “The Stack” turned out to work pretty good. I am able to iterate and ship quickly without major compromises.

Of course, all of these projects need to live somewhere.

Hosting and deployment

I realized that I can’t live off fly.io’s free plan anymore. So I made a big investment and I am now the proud owner of a shared cost-optimized Hetzner machine. 4GB of memory for less than 5 EUR per month is really unbeatable.

Anyway, it also meant I had to deal with deployments myself. I started with Coolify but as I said, I only have 4GB of memory. So I had to scale down to have more space for my apps and switched to Dokku. I wouldn’t trust my Docker and Linux skills to run a larger production app on this stack, but it will work for a long time.


Closing notes

Looking back, I am really proud to see all these projects. Not because I earned any money, or because they were technically challenging. But because programming is my hobby, and with each of these projects, I connected my hobby with my passions.

While this all sounds great, I also have a demanding full-time job, a few more hobbies than learning trombone, and a social life. AI coding tools make it more feasible to ship more projects, but these late-night sessions and weekends can be exhausting over time. They still give me more energy than they take away, but it’s something to be aware of.

One Last Thing

If you read the post from last year, you might wonder what happened to “PostClub”. (Okay, I don’t expect you to remember this or care, but let’s pretend). I stopped working on PostClub, but kept using it daily. And, in the past few weeks I picked up development again by rewriting it using “The Stack”. Perfect is the enemy of the good, but this time (for real), I want to release it. I hope I can share more about it soon.