Tech Stack
What this siteis actually built from.
Nineteen choices, four layers, and the trade-off each one carries. Pick a layer to narrow the view, open a technology to read why it is here and what it costs.
01Layers
Select a layer to filter, then open any technology for the reasoning behind it.
Every layer at once — the whole build, top to bottom.
02Technologies
18 of 18 shown
- next 16.2.10
The frame: App Router, server components, one build, one deploy.
Shared with Equilibrium
- react 19.2.4react-dom 19.2.4
The UI runtime — server components for the shell, client components for anything with a hand on it.
Shared with Equilibrium
- tailwindcss ^4
The design system: five palettes generated from one set of semantic tokens.
Shared with Equilibrium
- framer-motion ^12.42.2
Every animation on the site, from the headline reveals to the cards that open on this page.
Shared with Equilibrium
- lenis ^1.3.25
Smooth scrolling — the inertia under every page.
Shared with Equilibrium
- three ^0.185.1@react-three/fiber ^9.6.1
The 3D terrain, written as React components instead of imperative scene code.
Shared with Equilibrium
- next-themes ^0.4.6
Palette switching — Paper, Meadow, Forest, Night and Nocturne — as a class on the document.
This site only
- lucide-react ^1.23.0
The icon set: arrows, chevrons and status marks.
This site only
- clsx ^2.1.1tailwind-merge ^3.6.0
Conditional class names, with later utilities correctly beating earlier ones.
This site only
- Platform
Hosting, CDN and deploys. A push to the main branch is a production release.
Shared with Equilibrium
- @vercel/blob ^2.6.1
The private store holding the published content document and the studio's uploaded photographs.
Shared with Equilibrium
- Built in-house
Editing on the live site: sign in, click any sentence, rewrite it in both languages, publish.
This site only
- next-auth ^4.24.14
The Google sign-in that guards the editor — an allowlist of exactly one address.
This site only
- typescript ^5
Dormant. A content studio still mounted on its own route, kept but not used.
Shared with Equilibrium
- eslint ^9eslint-config-next 16.2.10
The language everything is written in — including the shape of the content document.
This site only
- @tailwindcss/postcss ^4
The lint gate, running the framework's own rule set before every pull request.
Shared with Equilibrium
- @types/node ^20@types/react ^19@types/react-dom ^19@types/three ^0.185.1
The single build step between the stylesheet and the browser.
Shared with Equilibrium
- Repository scripts
Types for the libraries that ship none of their own.
This site only
Version numbers on this page are read out of the repository's package.json when the site is built, so they cannot drift from what is actually installed.
03Constraints
The rules underneath the list
- 01One animation library. Never a second one beside it.
- 02Colours are named after their role, never after a hex code — that is how five palettes come out of one set of components.
- 03Every animation has a still version. Reduced motion is a supported way to read this site, not a degraded one.
- 04Every control carries a visible word. Nothing here is an icon you have to decode.
- 05Both languages are real addresses, not a switch in the browser — Dutch pages can be found, linked and indexed.
- 06Nothing merges until the type check, the linter and the production build are all silent.
The same manifest is kept byte-identical in the Equilibrium repository, so either site can be checked against the other. Convergence is the plan; the version gap is the work.
11/18 of these also run on Equilibrium
