
EXP-08 · TypeScript · SVG · Pointer events
Founding Member
TapBill's first-member card. Type your name and it fills in, sign it with a finger or a mouse, and it tilts toward you.
There’s so much going on in the world, and so much of it is moving. My job as a developer is to take all of that noise, information and chaos, and stay focused on building meaningful things.
All the colours, all the ideas, all at once. They find their streams, come together, and blur into one soft field. Then the mark arrives, sharp and still.
You’ll find it in What’s with all the balls?, standing in for all the noise.
// Soft: the same dot, swelling and fading at its edge.
const rad = r0 * (1 + b * 2.4);
const outer = rad + reach; // reach = b × 15% of the field
const g = ctx.createRadialGradient(x, y, 0, x, y, outer);
g.addColorStop(0, `rgba(${rgb},${a})`);
g.addColorStop((rad * (1 - b)) / outer, `rgba(${rgb},${a})`);
g.addColorStop(1, `rgba(${rgb},0)`);
TapBill's first-member card. Type your name and it fills in, sign it with a finger or a mouse, and it tilts toward you.

A 90s basement with a closet of jerseys. Open the closet, flip a jersey, watch the play on the TV.