Colophon · measured at build time
How this site is built.
Every number on this page is written by the build itself: an Astro integration walks the output folder after astro build, gzips every file and stamps the commit. Nothing here is typed by hand.
- kB gzip, start page (HTML, CSS, JS)
- 205.9
- kB gzip JavaScript, whole site
- 182.8
- pages
- 87
- commit
- 7ea02c4
Page weights
| Page | HTML | CSS | JS | Total (gzip) |
|---|---|---|---|---|
| / | 78.3 | 59.3 | 68.3 | |
| /about | 35.0 | 14.3 | 55.8 | |
| /experience | 20.3 | 59.3 | 61.1 | |
| /projects | 10.8 | 14.3 | 56.4 | |
| /awards | 25.2 | 14.3 | 55.8 | |
| /volunteering | 48.5 | 14.3 | 55.8 | |
| /blog | 12.1 | 14.3 | 56.4 | |
| /colophon | 7.1 | 14.3 | 55.8 |
kB, gzip level 9. HTML + CSS + JS the page loads (images and fonts not included).
Stack
- Astro 7Static pages, content collections, image pipeline. No server at runtime.
- WebGL2, hand-writtenOne canvas: 4 shapes of up to 24,000 particles, morph and pulses in the vertex shader, a post pass for grain, vignette and a scroll-driven colour split. No three.js.
- GSAP + ScrollTriggerScroll-linked chapters, odometers, pinned work reel; Lenis for smooth scroll on the same ticker.
- TypeScriptEvery script; the graph layout runs in the Astro build, not in the browser.
- Archivo VariableWidth axis 62–125 for the kinetic type; Instrument Sans and Geist Mono for text and data.
- CloudflareStatic hosting at the edge.
Principles
- 01Content is complete without JavaScript; effects are an enhancement.
- 02prefers-reduced-motion and the FX switch turn every animation off; WebGL falls back to an SVG of the same graph.
- 03The canvas caps device pixel ratio at 1.5, drops resolution and particle count when frames run long, and stops when off screen.
- 04Every number carries a date and a source; demos say that they use sample data.
- 05No tracking, no cookies, no third-party requests.