~/thoughts

// latest post

2 min read

Why This Blog Runs on Next.js

I moved from a static site generator to Next.js — not because static was broken, but because I wanted room to grow.

nextjswebmeta

For years my site was a pile of markdown compiled into static HTML. It was fast, cheap, and boring in the best way. So why move it to Next.js?

Short answer: I wanted the option of doing more without rewriting everything the day I needed it.

What stayed the same

The thing I liked most about static generation is still here. Posts are plain markdown files with a frontmatter block:

---
title: "Why This Blog Runs on Next.js"
date: "2026-06-14"
tags: ["nextjs", "web", "meta"]
---

A small content layer reads them at build time and turns them into pages. No database, no CMS, no runtime surprises.

What I gained

The difference is that the same project can now do three things instead of one:

Strategy When it runs Good for
Static once, at build posts, about — content that's set
Dynamic every request a /now page, personalized views
Client in the browser search, theme toggle, forms

I don't have to pick one for the whole site. I pick per page. The post you're reading was rendered once at build; the /now page renders fresh every time you load it.

The one new idea to learn

The mental shift is deciding where each piece of code runs. By default a component runs on the server. Add one directive and it runs in the browser instead:

"use client";

export function ThemeToggle() {
  // hooks, onClick, localStorage — all browser stuff
}

That boundary is the whole game. Once it clicked, everything else fell into place.

The best tool isn't the one with the most features. It's the one that lets you start simple and grow without starting over.

So far, no regrets.

full archive →

thoughts