A personal archive of things I've built. Static, fast, and quiet.
- Framework: Astro (static output, zero client-side JavaScript)
- Hosting: Cloudflare Workers Static Assets (no Worker script, no database, no runtime)
- Styling: Vanilla CSS with design tokens (
src/styles/tokens.css) - Content: Astro Content Layer, Markdown in
src/content/projects/
Interactive tools live on their own subdomains as separate projects, so the main site can keep a strict security policy.
- Node.js
>=24.16.0
| Command | Action |
|---|---|
npm install |
Install dependencies |
npm run dev |
Start the local dev server |
npm run build |
Typecheck, lint, and build to ./dist |
npm run preview |
Serve the built site locally |
npm test |
Run the Playwright end-to-end and accessibility suite against the built site |
npm run buildfails on type errors, ESLint, or Stylelint violations (raw colors are banned outside the token file).- CI runs the build plus Playwright (routes, zero CSP violations, axe-core WCAG 2.2 AA) on every push and pull request.
- Security headers are defined in
public/_headers.
Code is MIT. Written content is CC BY-NC 4.0. See LICENSE.