Bye Next.js, Hi TanStack

Done it.
Moved this entire blog off Next.js and onto TanStack Start.
Why?
It isn't that Next.js is bad. It's that the App Router increasingly felt like wrestling the framework — "use client", server components, caching semantics, generateStaticParams, Metadata, a pile of edge cases to keep in your head. Every time I sat down to write a post, I first had to recall what the framework was thinking.
TanStack Start is more plain about it:
- Routes are files.
src/routes/posts.$slug.tsx. No[slug]syntactic sugar wrapped around it. - Want it on the server?
createServerFn. Obvious at a glance — no guessing where a piece of code runs. - Vite underneath, so dev starts fast and HMR is stable.
- Still deployed on Vercel: nitro emits
.vercel/output/, fed straight into the Build Output API v3.
Once the migration was done I redid the visuals too. The old look — white background, huge black type, tracking-tighter — read as a Vercel template from a mile off, which sat badly under a blog whose masthead says it's better to burn out than to fade away.
The new one is called Editorial Noir: ink-paper ground, vermilion lacquer accents, serif type paired with brush-written Chinese, a masthead reading Anno MMXXVI · № V, section numbers in Roman numerals. Chinese plays the decorative lead; English is the skeleton.
There's no ROI in this sort of thing.
But it means that every time I open my own blog, I still want to write one more post.
That's enough.
