LT

The workshop

Things made because they were worth making

Each one runs here — and each one carries the decision that made it hard. A workbench, not a portfolio.

All of it drawn in the browser, frame by frame. Not one image file.

01crush.js

The closing room

A man smoking on a chair while the walls come in. They never open again, and they close all the way.

The wall separation is authored in body-widths, not as a fraction of the room. As a fraction, the whole interesting range — arms reach, arms buckle, ribs go — lands in the last three per cent, and he reads as standing untouched and then vanishing.

Limbs are two-bone IK against fixed bone lengths. jointFor() takes a direction, not a sign: there are always two solutions, and which one is "the elbow bends down" depends on where the limb is pointing.

02showcase.js

Strike

A bowling throw behind a chase camera. It is a strike every time, on purpose.

The pins have an explicit rest state. Restitution alone gives infinitely many ever-smaller bounces, so a pin is still turning slowly when the scene ends, at a random angle and often back upright — which reads as frozen mid-fall rather than down.

USBC pin profile and real lane proportions, recovered from the original cold open at 161e239. A static camera left the pins six pixels tall.