Back

How this site is built

January 15, 2026· 6 min read

The short version: Next.js App Router on the frontend, deployed via AWS CDK to S3 + CloudFront, with a custom CI/CD pipeline that is completely unnecessary for a site this size.

That "completely unnecessary" is the point. I wanted to learn CDK properly, and the best way to learn an infrastructure-as-code tool is to use it for something you care about. A personal site is low stakes, visible, and long-lived — a perfect first real project.

Stack

  • Framework: Next.js 15 (App Router), TypeScript
  • Styling: Tailwind, a handful of shadcn primitives, Geist font
  • Motion: Framer Motion for the entrance animations and the image carousel
  • Hosting: S3 + CloudFront, fronted by a Route 53 alias
  • Infra: AWS CDK, with a CodePipeline that builds from this repo on push to `main`
  • Analytics: PostHog, with a light wrapper so components can fire events with typed attributes

What I'd do differently

  • The CDK stack grew organically and could be consolidated. One day.
  • I resisted adding MDX for a long time. Writing posts as TS strings works, but barely — the moment I want code blocks with syntax highlighting, I'll migrate.

If you want to poke around the source, the repo is linked from my GitHub.