Personal site. One static page, built with Astro, deployed to GitHub Pages on push to main.
npm install
npm run dev # local server
npm run build # static output to dist/
npm run preview # serve the build
npm run check # type-checkAll copy lives in src/data/site.ts as typed exports. Roles, projects, skills, and links are arrays. Layout components read from them and hardcode nothing, so updating the site means editing that one file.
roles is reverse-chronological. The first entry renders as the full-width featured card.
Colors, type, and spacing come from a design handoff. Tokens are CSS custom properties in src/styles/global.css, defined once for light and overridden for dark. The theme resolves from localStorage, falls back to prefers-color-scheme, and is applied before first paint.
Two accent tokens differ from the handoff to meet WCAG AA. See ADR 0003.
Both are checked into public/. The sources are not, since they are build-time scratch. To regenerate, recreate .render/resume.html and .render/og.html, serve that directory, then print to PDF and screenshot at 1200x630.
CONTEXT.md, glossarydocs/adr/, architecture decisions