Gestures are what make elements feel alive: the user acts, and the interface responds the way the physical world would.
Summary
Motion extends React's event system with hover, tap, pan, drag, focus and inView, each available as a while- prop or as an event handler. Jakub goes through what every gesture is for and how to make the interface answer it properly. Tap cancels itself if the pointer travels too far, so it never fights a drag, and it works from the keyboard as well. The real reason he prefers Motion over plain CSS here is springs, which are difficult to express in CSS and often look more natural. Performance is close to identical, since transform, clipPath and filter still run on the compositor thread.
View full writingGoes well with
emil-design-eng
The design-engineering house style behind Sonner and Vaul.
Emil's main skill. Mostly animation, with the UI-polish and component judgement that surrounds it: what to build, how far to push it, and when to stop.
npx skills add https://github.com/emilkowalski/skills
animate
Builds an animation from scratch, decisions in the order that matters.
Should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Then writes the implementation.
npx skills add https://github.com/emilkowalski/skills --skill animate
review-animations
Reviews your motion strictly, against Emil's rules.
A production-critical pass over animation quality, timing and consistency in a diff. Pairs with improve-animations, which does the same for a whole codebase.
npx skills add https://github.com/emilkowalski/skills --skill review-animations