Why I moved the site to Next
The site was a Vite + React SPA, served as static files. It worked, but every new screen idea turned into friction.
I moved it to a single Next (App Router) app that acts as a platform: the blog is the first new screen, and admin/dashboards come later without a new repo.
Routing per language
Each language has its own URL, with hreflang:
export function generateStaticParams() {
return locales.map((lang) => ({ lang }))
}Post content lives in MDX, versioned alongside the code.