In the Skill's Own Terms
A construction skill for motion in React Native and Expo. It turns a request for animation into an implementation that survives review on a real device, making the decisions in the order that determines whether they feel right: should it animate at all, which thread it runs on, which properties, spring or timing, how the gesture hands off, how it degrades.
Everything follows from three mobile facts: there is no hover, there are two runtimes, and the user's finger is on the element. It is for anyone animating an Expo app, adding gestures, sheets, screen transitions, press feedback or haptics, or fixing motion that stutters on device. The code is written with Reanimated, Gesture Handler, Expo Router and expo-haptics.
What it produces
- The implementation code itself, written directly rather than offered as options.
- A short gate result stating the frequency tier and named purpose, including what was rejected and why.
- The ingredients line: tool, properties, spring or curve plus duration, and which runtime the work happens on.
- A list of what to feel-check on a device, since gesture handoff and haptic timing cannot be read off the code.
How It Works
- 01Gate the Animation Before Anything Else
A frequency table decides whether motion happens at all; the top tier stops and writes no code. Tab switches never slide because tabs are peers, not a hierarchy.
- 02Name the Purpose in One Word
The skill forces a single-word intent before continuing — feedback, spatial consistency, state indication, preventing a jarring change, explanation, or delight, the last only for rare first-time moments.
- 03Pick the Cheapest Tool That Works
Walk down a table and stop at the first row that fits: CSS transition, CSS keyframes, layout animation, shared value plus Gesture, then native stack, formSheet, NativeTabs, Link.Menu, RefreshControl, Lottie or Skia.
- 04Restrict the Animated Properties
Transform and opacity cost nothing; everything else forces a layout pass that re-runs Yoga on the node and its siblings every frame.
- 05Choose Spring or Timing from the Finger
Any interaction a finger drove gets a spring so velocity carries through an interruption; everything else uses a timing curve, never ease-in.
- 06Keep the Frame Off the JS Thread
Shared values feed useAnimatedStyle instead of React state, and RN-runtime calls are pushed to onEnd or a threshold reaction rather than fired inside a gesture update.