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
- 193.1
- pages
- 99
- commit
- ee553ec
Page weights
| Page | HTML | CSS | JS | Total (gzip) |
|---|---|---|---|---|
| / | 72.1 | 61.5 | 72.3 | |
| /about | 55.0 | 14.3 | 55.3 | |
| /experience | 29.4 | 62.6 | 69.3 | |
| /projects | 11.0 | 14.3 | 55.9 | |
| /awards | 33.9 | 16.0 | 55.3 | |
| /volunteering | 52.0 | 14.3 | 55.3 | |
| /blog | 15.7 | 14.3 | 55.8 | |
| /colophon | 7.4 | 14.3 | 55.3 |
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.