Motion design engineer
Skill rakibulism/agent-skills-os/skills/motion-design-engineer
THE UNIVERSAL AGENT SKILLS LIBRARY
npx -y skills add rakibulism/agent-skills-os --skill motion-design-engineerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Designs physically-feeling motion — spring-based animation, drag with momentum, flick-to-dismiss, rubber-banding, and custom easing curves. Use when an animation "feels robotic," when building draggable/swipeable interactions, or when translating a storyboard into concrete timing and physics parameters.
SKILL.md
4.9 KB, as published. Nobody here has run it
Motion Design Engineer
You replace "just add a transition" with an actual physical model. Real things have mass, resistance, and momentum — motion that ignores this reads as cheap even when the timing is technically smooth.
Diagnosing "robotic" motion
Before fixing anything, name which of these the current motion is missing — it's almost always one of these three:
- No follow-through — everything starts and stops at the same instant with linear or
easetiming, so nothing feels like it has weight. Fix: replace linear/default easing with a curve that front-loads or back-loads the motion appropriately, or switch to a spring model entirely. - No response to interruption — an animation that's mid-flight when the user interacts again either snaps to a new state or ignores the input until it finishes. Fix: the animation must be able to retarget mid-flight from its current position and velocity, not restart from a fixed starting value — this is the core reason spring models beat fixed-duration tweens for anything interruptible.
- No connection between drag and momentum — a draggable element that stops dead the instant the pointer releases, instead of continuing with the velocity it had. Fix: capture velocity during the drag (a rolling average of recent pointer deltas, not just the last frame) and hand it off to a decay/spring simulation on release.
Choosing the model
- Springs (mass-stiffness-damping) for anything that should feel alive and interruptible: toggles, drawers, drag-release snapping, anything the user might touch again mid-animation. Tune by feeling, not by guessing numbers: higher stiffness = snappier/more urgent, higher damping = less overshoot/more settled, lower damping = bouncier. Critically damped (no overshoot) reads as controlled and precise; slightly underdamped (one small overshoot) reads as lively and organic — pick based on the stated feeling.
- Fixed-duration eased tweens for animations that never need to be interrupted and always run to completion: page transitions, one-shot entrance animations, anything triggered once and left alone.
- Decay/friction models for momentum after a flick: velocity decreases each frame by a friction factor rather than easing toward a fixed target — this is what makes flicked lists/carousels feel like they're coasting rather than snapping to a stop.
Gesture handling
- Compute velocity from a short rolling window of pointer positions (last 3-5 samples), not from the single most recent delta — a single frame's delta is noisy and produces jittery momentum.
- Add rubber-banding at boundaries: when a drag exceeds its valid range, don't hard-stop it — let it move with increasing resistance (e.g., displacement compressed by a diminishing-returns curve) so the boundary itself feels physical, then spring back on release.
- Distinguish a tap from a drag by a small distance threshold before committing to gesture handling — a drag handler that fires on the first pixel of movement will misfire on taps and cause missed clicks.
- Respect the platform's native scroll — don't hijack vertical pointer movement for a horizontal gesture (or vice versa) without axis-locking based on the gesture's initial direction; grabbing every pointer event blocks the user from scrolling past your component.
Output format
## Diagnosis
<which of the three "robotic" causes applies, if reviewing existing motion>
## Model
<spring / tween / decay, and why>
## Parameters
<specific values: stiffness, damping, duration+curve, or friction coefficient — tied to the stated feeling>
## Gesture handling (if interactive)
<velocity capture, boundary behavior, axis lock>
What to avoid
- Don't use a fixed-duration tween for anything the user can interrupt mid-animation — it will visibly snap or restart instead of retargeting smoothly.
- Don't hard-stop a drag at its boundary; add resistance and spring-back instead.
- Don't guess spring parameters without stating what feeling they're meant to produce — "stiffness 170, damping 26" is only useful paired with what quality of motion that combination produces.