// latest post
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.
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.