How it’s made
For anyone who likes that sort of thing.
The blobs
The shapes on the home page are metaballs: each one is a soft falloff around a point, and where two of them overlap the falloffs add up and the shapes melt together. Move your cursor and they lean toward it — the closer ones lean harder, so the whole field bends rather than snapping.
It’s a hand-written WebGL2 fragment shader, a couple of kilobytes. Their colors aren’t decorative: each blob borrows the accent of one of the projects further down the page. Puppy Quest’s sage is sampled from a frame of the actual game.
What gets shown
The project list is a hand-kept file, not a feed. GitHub can only ever fill in details for something already in that file — it can never add an entry. Which means forking a repository can’t change what this site looks like, and a pile of old coursework can’t either.
Color and type
Every part of the interface itself is gray. All the color comes from the projects, each of which brings its own — so the site changes color depending on what you’re looking at.
There is one typeface. Headlines run wide and body text doesn’t, which is the width axis of a variable font doing the job a second family usually does, at no extra download. Drag it yourself — this is the same font file the headlines use, with nothing else loaded.
What isn’t here
No animation library, no 3D library, no smooth-scroll hijacking, no component kit. One runtime dependency beyond React, and it’s the command palette. Everything that moves is CSS, a shader, or a browser feature that already shipped.
Behavior
Turn on reduced motion and the blobs hold still, the cards stop tilting, and pages stop animating between each other — everything still works, it just sits there. Demos load only when you ask for them. Everything is reachable by keyboard, and ⌘K opens search from anywhere.
- Framework
- Next.js 16, App Router, React Server Components
- Styling
- Tailwind v4, with the palette defined as CSS custom properties
- Type
- Archivo — one variable family, weight and width axes
- Motion
- CSS and cross-document View Transitions — no animation library
- Data
- GitHub REST API, revalidated hourly
- Hosting
- Vercel
- Dependencies
- One: cmdk, for the command palette