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
182.8
pages
87
commit
7ea02c4

Page weights

PageHTMLCSSJSTotal (gzip)
/ 78.3 59.3 68.3 205.9
/about 35.0 14.3 55.8 105.1
/experience 20.3 59.3 61.1 140.6
/projects 10.8 14.3 56.4 81.5
/awards 25.2 14.3 55.8 95.3
/volunteering 48.5 14.3 55.8 118.6
/blog 12.1 14.3 56.4 82.9
/colophon 7.1 14.3 55.8 77.2

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

Built
2026-11-11 15:32 UTC
Commit
7ea02c4
Build time
2.3 s
Astro
7.4.5
Node
v24.22.2
Files in the build
347
Build folder, uncompressed
18.4 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.