I design and builddigital products.

Recent work

Skills

I work where design and engineering overlap. That means fewer gaps between intent and implementation, faster iteration, and products that keep their character all the way to production. Each skill below has a live example.

Skills and stack

01Streaming 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.

02Motion 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

The indicator slides on a spring. The panel enters with the ease for things that enter.

Arrow keys move between the tabs. The indicator uses SPRINGS.settle.

03Design 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.

04Performance 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.