How this siteis built.
The colophon. Every choice on this page, stated plainly, because a site that hides how it is made is making a decision you should know about.
This site is built and run by the same studio that hosts your stuff, on the same kind of machine, under the same rules. Nothing below is a claim to make; it is a list of what is actually true about the pages you are reading.
Stack
- Next.js 16App Router, mostly static. The page you are on is prerendered at build time.
- React 19Server components do the heavy lifting; the browser only receives what moves.
- TypeScriptUsed across the server, the client and the tests.
- Tailwind CSS v4Utility classes in the markup, with the design tokens in one stylesheet.
- GSAP and LenisGSAP runs the animation; Lenis smooths the scrolling and drives it on the same clock.
- three.jsDraws the particle field on the home page, in a single WebGL canvas.
Type
- GeistHeadlines and reading text. One variable font file covers every weight on the site.
- Geist MonoFor numbers, coordinates and labels. Tabular figures, so columns hold still.
Motion
- Headlines rise line by line out of their own mask.
- The home page has one particle field that changes shape as you scroll through it.
- Scrolling is smoothed, and the animation follows the scroll position.
- Turn on reduced motion and all of it stops: the field stands still, scrolling is native and text appears straight away.
Performance
- No CDN, no analytics, no third-party scripts and no third-party fonts.
- Both typefaces are self-hosted at build time, so loading a page makes no request to anyone but us.
- The 3D code loads on the home page only, with fewer particles on phones.
- Everything is served over TLS from a single node, with the certificates renewed by a scheduler.
Accessibility
- WCAG 2.2 AA is the target, and the statement lists what is still unproven.
- A skip link, real focus states, and a keyboard path through everything that is interactive.
- No accessibility overlay widget. There never will be one.
Hosting
- The same node the rest of the site points at: our own hardware in Drenthe, the Netherlands.
- nginx in front, TLS renewed automatically, daily backups to local disks.
Nothing hidden.
If a choice on this page is wrong, or the build changes, this page changes with it. An outdated colophon is worse than none, so we keep this page current.