This Portfolio
A content-driven portfolio built with Next.js 15, the App Router, and MDX. Dark-first, typography-led, 98+ Lighthouse.
Stack
Overview
This site. Built from scratch as a demonstration of what I work with day to day. Every page is statically generated, every interactive piece is a client island, and the content lives in MDX files so adding a project is a git commit, not a CMS login.
Design decisions
I picked a dark-first palette with a single accent colour (electric lime) and monospace typography as the signature. The goal was to feel dev-forward without tipping into terminal-theme cosplay. Generous whitespace, a subtle grid background, and a single big typographic moment per section.
Technical notes
- Next.js 15 App Router with React Server Components by default
- Client components are small islands (nav, contact form, the rotating hero word)
- Animations respect
prefers-reduced-motionthrough Framer'suseReducedMotionhook - Content layer is a tiny custom loader reading MDX files from disk at build time. Could have used a CMS or Contentlayer, neither was worth the dependency weight for a one-person site
- Contact form validated with Zod server-side, honeypot on the client, and a simple in-memory rate limiter
Performance
Pinned the budget at 98+ on Lighthouse across all pages. Hitting that required:
- Subsetting the monospace font to Latin
- Preloading only the fonts used above the fold
- Avoiding any client JS on the homepage below the nav and hero
- Using the built-in
next/fontinstead of loading Google Fonts from their CDN