This site is built with Next.js 14 and TypeScript using the App Router. Content is stored as MDX files and compiled by Contentlayer at build time, this gives me type safety, automatic slug generation, and all the benefits of static generation.
The design is minimal. Dark mode by default. Subtle animations (particles on homepage, scroll reveals as you navigate) enhance without distracting. The whole site is fast because it's pre-rendered static HTML served from Vercel's CDN.
Frontend Architecture
App Router with dynamic route segments for project pages. Server components for fetching and rendering content, client components only where interactivity is needed. Tailwind CSS for styling. Framer Motion for animations.
Content Layer
Project metadata and content live as .mdx files in /content/projects. Contentlayer compiles them at build time, generating a type-safe allProjects array. Add a new .mdx file and it's automatically available in the site—no need to manually register routes.
Performance
Pre-rendered static HTML means instant page loads. Incremental Static Regeneration means I can update project descriptions and the site rebuilds in the background. Automatic preview deployments on every commit mean I catch mistakes before they hit production.
