← All posts

April 15, 2026

Why I Built This Portfolio With Next.js and MDX

A quick look at the technical decisions behind this portfolio — why Next.js 15, Tailwind v4, and MDX for content.

Next.js · MDX · Portfolio · Engineering

Welcome to my corner of the internet. This is the first post on my new portfolio, and I wanted to use it to explain some of the technical choices I made when building this site.

Why Next.js?

Next.js gives me everything I need for a production-grade portfolio:

  • Static generation for blazing-fast page loads
  • App Router for a clean, file-system-based routing model
  • Server Components to keep JavaScript bundle sizes minimal
  • Built-in image optimization via next/image

For a personal portfolio, these are overkill — but they're also zero extra work in Next.js, and they mean the site will be fast and well-structured from day one.

Why MDX for the Blog?

I wanted to write blog posts and updates as markdown files in the repo. MDX gives me:

  1. Markdown syntax for everything simple (headings, lists, code blocks)
  2. React components when I need custom UI inside posts
  3. Frontmatter via gray-matter for post metadata (title, date, tags)
  4. Static generation — every post is rendered at build time, so no CMS required

The tradeoff is that posts need to be deployed with the code. For a personal blog where I'm the only author, that's fine — I just push to the repo.

The Design System

The palette is strictly monochrome: zinc-950 background, zinc-100 foreground, with various zinc grays for muted elements and borders. No color at all. The goal is to let the content speak rather than the design.

Typography is handled by Geist Sans and Geist Mono from Google Fonts, loaded via next/font to avoid layout shift.

What's Next

I plan to write more about:

  • Automation patterns I've found valuable at Factoryze
  • LLM evaluation methodologies from my research work
  • Software architecture decisions and tradeoffs

Thanks for reading.