Lab · 06 experiments
Small things, tuned until they feel right.
Every tile below is live React, not a video. Poke at them. Each one respects reduced-motion settings and works with touch, mouse and keyboard.
react 19 · motion 12
no canvas, no WebGL
Magnetic button
01Pointer pull with a damped spring; a plain press on touch.
tap to feel the press
spring(260, 18) · pull 0.28
Card stack
02Drag the top card sideways to send it to the back.
01 / 04Tokenscolor · type · space
02 / 04Components31 primitives
03 / 04Motionspring(400, 32)
04 / 04Docswritten for humans
drag x · threshold 70px
Spring toggle
03Same switch, three springs. Feel the difference.
spring(180, 14)
layout · 3 presets
Disclosure
04Height to auto without measuring, icon turns into a close.
Code. Figma is where I think; the pull request is what I deliver.
320ms · ease-out-expo
Odometer
05Each digit is its own reel; numbers never jump.
0123456789012345678901234567890123456789
per-digit spring(260, 26)
Copy command
06Icon swap with pop layout, resets itself after 1.6s.
$ npx relay@latest init180ms · popLayout