DE
Esc

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

PageHTMLCSSJSTotal (gzip)
/ 72.1 61.5 72.3 205.9
/about 55.0 14.3 55.3 124.6
/experience 29.4 62.6 69.3 161.3
/projects 11.0 14.3 55.9 81.2
/awards 33.9 16.0 55.3 105.2
/volunteering 52.0 14.3 55.3 121.6
/blog 15.7 14.3 55.8 85.8
/colophon 7.4 14.3 55.3 77.0

kB, gzip level 9. HTML + CSS + JS the page loads (images and fonts not included).

Built
2026-11-12 01:22 UTC
Commit
ee553ec
Build time
1.4 s
Astro
7.4.5
Node
v24.22.2
Files in the build
463
Build folder, uncompressed
22.1 MB

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

  1. 01Content is complete without JavaScript; effects are an enhancement.
  2. 02prefers-reduced-motion and the FX switch turn every animation off; WebGL falls back to an SVG of the same graph.
  3. 03The canvas caps device pixel ratio at 1.5, drops resolution and particle count when frames run long, and stops when off screen.
  4. 04Every number carries a date and a source; demos say that they use sample data.
  5. 05No tracking, no cookies, no third-party requests.