Building This Portfolio
A look at the stack and decisions behind this site — Next.js, Tailwind, and MDX.
nextjs
portfolio
mdx
This portfolio is built with a few deliberate choices aimed at keeping things fast, maintainable, and easy to extend.
The stack
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| Styling | Tailwind CSS v4 |
| Components | Radix UI + custom primitives |
| Content | MDX files in content/blog/ |
| Hosting | Vercel |
Why MDX for the blog
MDX gives me the best of both worlds: write in Markdown, drop in React components when needed. Posts live as plain files in the repo — no CMS, no database, version-controlled alongside the code.
The rendering pipeline uses next-mdx-remote with a few plugins:
- remark-gfm for tables, task lists, and strikethrough
- rehype-slug for heading anchor links
What's next
Some ideas for future posts:
- How the photography gallery pulls from Vercel Blob storage
- Animations with Framer Motion without hurting performance
- Lessons from five years of React development
If there's something specific you'd like me to write about, get in touch.