Skip to content
The Lab

Unfinished,on purpose.

The rest of this site is about order. This is where I let things misbehave: coded experiments, prototypes that never shipped, and ideas I can’t put down.

68%

EXP-001 · Entropy field · Live · you’re in it

Scroll to the bench

The bench

Small, self-contained, and honest about their state. Experiments go live when they run, not when they’re written up.

EXP-003

Load bearing

Companion piece to “Designing for cognitive load”: a page that deliberately overloads you, then repairs itself one decision at a time.

GSAP ScrollTrigger

interactive essayQueued
EXP-004

Sitemap topography

Ten thousand pages as terrain. A crawler's-eye render of a large sitemap as landscape: peaks where content piles up, valleys nobody visits.

Three.js Crawl data

generativeQueued
EXP-005

Agent on a leash

A working bench of agentic UX patterns: approval flows, undo, visible reasoning, trust controls. The patterns I argue for, running.

React Claude API

prototypeQueued
EXP-006

Interpunct

A clock built entirely from the site's label voice: twelve-pixel type, tracked caps, and one coral interpunct keeping the seconds.

CSS A little JS

toyQueued
EXP-007

Desire paths

Your cursor wears a path into the page the way feet wear one across a lawn. Wander long enough and the route you actually take draws itself, right next to the one the designer intended.

Canvas Your cursor

generativeQueued
EXP-008

The homepage treaty

A negotiation you can lose. Every stakeholder wants their thing above the fold. Drag their demands onto the homepage, watch it buckle, then find the treaty that holds.

React Drag physics

toyQueued
EXP-010

Seven, plus or minus two

A working-memory game played against a growing menu. Hold a short list in your head while the navigation keeps adding choices, and feel the exact moment it snaps.

React Miller's law

toyQueued
EXP-011

Dark patterns, x-rayed

A perfectly ordinary checkout flow with an x-ray switch. Flip it and every manipulation lights up in place: the countdown that isn't real, the decoy plan, the guilt-trip decline button.

React GSAP

interactive essayQueued
EXP-012

Say it plain

Paste the labels from your org chart (Bursar, Advancement, Enterprise Solutions) and get back what a human would call them, with a verdict on whether anyone would ever find the original.

Claude API Plain language

prototypeQueued
EXP-013

Wet ink

A pool of ink that never dries. Drag through it and coral blooms into the paper, swirls, marbles, and slowly settles. No goal, no score, just the oldest satisfying thing there is.

WebGL Fluid simulation

generativeQueued
EXP-017

Pendulum wave

Forty pendulums a fraction out of phase, drifting from chaos into patterns and back forever. Turn the sound on and each pass plays a note.

GSAP Web Audio

toyQueued
EXP-018

Scatter type

Type a word and a thousand particles assemble into its letterforms. Then fling them apart with your cursor and watch the word pull itself back together.

Canvas Particle text

toyQueued
EXP-020

Paper plane

Throw it, then keep it flying: catch the updrafts, dive through the gaps, and ride the wind drawn as ink streamlines. Your best flight hangs in the sky as a coral line to beat.

Canvas GSAP

gameQueued
EXP-021

Orbit golf

Golf, but the fairway is space. Sling an ink ball around monoline planets whose gravity bends every shot, and sink the cup in as few throws as you can. Nine holes; your attempts stay drawn on the sky.

Canvas Gravity

gameQueued
EXP-022

Ricochet

One flick per shot. Bank the ball off the walls and clear every coral target in as few shots as possible. A new table every day, the same table for everyone.

Canvas Daily seed

gameQueued
EXP-023

Lights out

You keep the lighthouse. Swing the beam to guide paper boats through fog and rocks to harbor; the boats keep coming and there is only one of you.

Canvas Fog

gameQueued
EXP-024

Plain meter

Paste any paragraph and see what it costs to read: grade level, sentence-length rhythm, and the words doing the least work. Everything runs in your browser; nothing you paste leaves it.

Client-side text stats

toolQueued
EXP-025

SERP mirror

Paste a page title and description and see them the way the world will: as a search result and an AI answer, truncation and all, before you publish.

React Pixel rulers

toolQueued
EXP-026

Sitemap grader

Paste a list of URLs and get an instant read on the architecture: depth histogram, breadth by level, the lonely corners, and an honest verdict on the three-click myth.

Client-side crawl math

toolQueued

Rules of the bench

01Working beats finished
An experiment ships when it demonstrates its idea, not when it's polished. Rough edges are allowed; broken is not.
02Client work stays home
Nothing born inside an engagement appears here unless it's rebuilt from scratch, in the abstract. No exceptions.
03Everything teaches
Each experiment demonstrates a judgment call about structure, behavior, or craft. When it stops teaching, it comes down.

The thinking behind the tinkering.

The Lab is the practice behind an argument I keep making: a working thing settles debates that documents can’t.