I design and builddigital products.

Recent work

Skills

I work where design and engineering overlap, so products keep their character all the way to production. Each skill below has a live example.

Skills and stack

Streaming state

I model every state a screen can enter: loading, streaming, interrupted, error and done. Typed state machines keep the interface correct when the network is slow or the user stops halfway.

Force each state in the Lab

Press Stream to start an answer.

Idle. No answer.

The chat’s real state machine and a fake stream. Esc stops it.

Motion and interaction

Spring physics, resizers, drawers and layout transitions that keep their state. Every motion has a keyboard path and respects reduced-motion settings.

Try the interactions

Card in the top left corner.

Throw the card: it lands where its momentum points. Arrow keys move it.

Design systems

Tokens, shadcn/ui and Base UI components, and written rules, so designers, engineers and coding agents build inside one system.

Read the design system

bg-brand · bg-card · text-fg-muted

The same tokens in both color schemes. The design rules are on /design.

Performance and accessibility

Screen-reader announcements, visible focus and Core Web Vitals that I measure on real visits. I measure a screen before I call it fast.

See the measurements
LCP
—Loading
INP
—Loading
CLS
—Loading
The 75th percentile of real visits to this site, from the last 28 days.

New notes are in progress. Check back soon.

Hard problem, high bar? That’s my favorite kind.