Skip to content
$ ash_
All work
2026/Designer & Developer/live

This Portfolio

A content-driven portfolio built with Next.js 15, the App Router, and MDX. Dark-first, typography-led, 98+ Lighthouse.

Stack

Next.js 15React 19TypeScriptTailwind CSSFramer MotionMDXVercel

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-motion through Framer's useReducedMotion hook
  • 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/font instead of loading Google Fonts from their CDN