Overview
This portfolio replaces my old React SPA with a fully static Next.js site. Every page, including this one, is pre-rendered at build time and served from Vercel's CDN.
The Challenge
Keeping the maintenance cost at zero while still having a proper blog and project showcase with individual detail pages.
What I Built
Content lives in .mdx files committed to Git. fumadocs-mdx compiles them
at build time into typed collections. No CMS dashboard, no database, and no
monthly bill.
Images are stored on Cloudflare R2, which has free egress, unlike S3.
Lessons Learned
Tailwind v4's @theme directive makes design token management genuinely
pleasant. Everything lives in one CSS file, and every token automatically
becomes a utility class.
