My personal website, built with Next.js (App Router), Tailwind CSS and content-collections.
pnpm install
pnpm devAdd WEATHER_API_KEY (weatherapi.com) and LASTFM_API_KEY (Last.fm) to .env.local for the weather and last played widgets.
app/
layout.tsx, globals.css root layout and global styles
api/ weather and last-played route handlers
(site)/ every page, wrapped in the site header and footer
_home/ code used only by the homepage
uses/ page, sections, data and lightbox for /uses
components/
ui/ shadcn components
icons/ SVG icons
layout/ page-building primitives (Stack, SplitSection, Prose)
site/ header, footer, theme toggle and page transition
content/ MDX for projects, notes and the now page
content-collections.ts schemas for everything in content/
lib/ small shared helpers
A file used by one page sits next to that page. A file used by two or more pages, or by the site layout, lives in components/.
Routes that are not ready yet call blockPage() from lib/block-page.ts, which returns a 404 until the call is removed.