Hello, Next.js

June 22, 2025 · 782 words · 4 min read

Why I ditched my custom setup and let Next.js run the boring parts.

This site just moved to Next.js.

For a long time it ran on a custom static site generator I wrote myself. Routing, markdown, templates, assets, the whole thing! The logic at the time was that if I was going to have a personal site, I had to "really" build it.

And the custom generator sort of made sense at the start. I wanted a playground and full control over every layer and I got exactly that. I find there's a lot of joy in building things from scratch, especially early on. You get to touch everything, you learn a lot, you fail, and when it finally works you feel clever. Then about three years went by and what used to be a fun weekend hacking session turned into maintenance that I'd just keep postponing. Adding a new page meant remembering how the system worked, fixing whatever I'd break by touching it again, and then maybe writing the actual page if I still had the energy. More time on the tool, less time on anything visible. I didn't really need my own build pipeline just to publish a paragraph. It had become habit, and any PM worth their salt will tell you habit is a terrible reason to keep complex systems alive.

Meanwhile, work changed too. My days are now fuller, my evenings got shorter in turn, so now when I finally sit down at the computer at night, I want to use my tools, not debug them. The custom generator had to go.

I had two favourites. Astro and Next.js. Both are good, both popular enough that I don't have to worry about them disappearing next week, both pretty overqualified for a personal site. I also happened to be working on a small project at my company with two versions that shared almost the same content type, so I just built one in each to see how they actually felt.

Astro feels really good when you're mostly focused on content. You write, you organise, you keep things tidy and it just nudges you toward calm. You're building a site, not an app, and that's fine with Astro. Next.js feels different, because once you start adding interactive components, it makes sense very quickly. Since you're already thinking in React, you're already one step away from the "this is just a little app now" feeling.

Somewhere in that process I realised this didn't feel like a framework comparison, but more a test of what aligned with my instincts. Sometimes I want stillness. Write an idea, polish it, publish it, be done, move on. Other times I want motion and control. Build fast, hook things together, watch stuff change on screen, iterate until something interesting emerges. Astro rewards the calm side. Next.js rewards the control side. Both instincts are me, just not at the same time, and I don't want two platforms for two moods!

This site has never been just a calm blog, it's always been both a journal and a sandbox. If all I wanted was a quiet place to write, I'd use Wordpress or Bear and never think about build tools again. But some days I want to try a small UI idea, or wire up a weird little feature that doesn't justify its own project. Next.js lets me keep calm and control in one place. MDX took some fighting to get working (meh, it has a reputation, and I can confirm it), but once it was set up it stayed out of the way and gave me exactly what I wanted. Long form writing plus the ability to drop in components whenever an idea needs more than text.

I don't need to rebuild routing or markdown pipelines just to feel like the work is "real", and I also don't have infinite evenings anymore, and that's okay! Part of this shift is that I'd rather accept that and adjust, rather than pretend I still have the time to maintain something I've clearly outgrown.

So hello, Next.js! And goodbye, Kalimera. And goodbye to the part of me who thought every personal site had to be a full stack project. I'm still optimistic about the web, I still like late night ideas, I still think small personal sites matter. I just want my setup to support that optimism instead of draining it.

If you're reading this, you're catching the site at the start of its Next.js phase. There's still a pile of old posts in the old system that need migrating, but past me invented enough custom syntax to make that just manual enough to be annoying. They'll make their way over, one evening at a time. We'll see how long this one lasts.