Most of my ideas start on the trail and take shape in the terminal.

I love hiking, trail running, and lately, riding my e-bike.I love hiking + trail running + my e-bike.

Scroll

Open toProduct design + creative tech roles.Fully remote, or hybrid in San Francisco for the right team.Client work through planetbased.ioMaster’s in interaction design, 2026

Neon-lit orchid blooming
// a 63-frame cursor scrub on canvas -- no video, no gif
const FRAME_COUNT = 63;
let current = 0, target = 0;

// cursor Y sets the target frame (top = closed, bottom = open)
onpointermove = (e) => target = clamp(e.clientY / innerHeight, 0, 1);

// every frame (rAF): ease toward target, crossfade the two nearest
current += (target - current) * 0.10;
const f = current * (FRAME_COUNT - 1);
const i = Math.floor(f);

ctx.clearRect(0, 0, W, H);
ctx.globalAlpha = 1;
ctx.drawImage(frames[i], 0, 0);
ctx.globalAlpha = f - i;
ctx.drawImage(frames[i + 1], 0, 0);

An orchid that blooms with your cursor

Config 2025 keynote stage at Moscone Center
Config 2025 · Moscone · SF