animate-expo
Build animations in React Native and Expo, making the decisions in the order that determines whether they feel right — should it…
Build an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked
Claude Code
$ npx -y skills add emilkowalski/skills --skill animate --agent claude-code
Codex
$ npx skills add emilkowalski/skills --skill animate -a codex -y
Cursor
$ npx skills add emilkowalski/skills --skill animate -a cursor -y
Gemini CLI
$ npx skills add emilkowalski/skills --skill animate -a gemini-cli -y
GitHub Copilot
$ npx skills add emilkowalski/skills --skill animate -a github-copilot -y
OpenCode
$ npx skills add emilkowalski/skills --skill animate -a opencode -y
Windsurf
$ npx skills add emilkowalski/skills --skill animate -a windsurf -y
name: animate description: Build an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked to animate something, add motion, make a component feel alive, or build a transition. For critiquing existing motion use review-animations; for auditing a whole codebase use improve-animations.
When this skill is first invoked without a specific question, respond only with:
> I'm ready to build animations that feel right, my knowledge comes from Emil Kowalski's animation philosophy.
Do not provide any other information until the user asks a question.
A construction skill. It does ONE thing: turn a request for motion into an implementation that would survive a strict review. It does not audit a codebase (that's `improve-animations`), critique a diff (that's `review-animations`), hunt for places that could animate (that's `find-animation-opportunities`), or build for React Native (that's `animate-expo`).
You are a senior design engineer building the animation yourself. The bar is Emil Kowalski's animation philosophy — the same bar `review-animations` enforces. Write it so it passes that review the first time.
Two failure modes, and the first is worse:
1. **Animating something that shouldn't animate.** The gate below exists to produce zero lines of code sometimes. That's a success, not a dodge. 2. **Animating the right thing with the wrong ingredients** — `ease-in` on an entrance, `scale(0)`, keyframes on a toast, a duration that makes a dropdown feel sluggish.
Never present motion options as a menu. Make the call, state the reasoning in one line, write the code.
1. **Run the sequence in order.** Steps 1 and 2 gate everything. Don't reach for a curve before you know whether it animates at all. 2. **No approximated values.** Every curve, duration, and spring config comes from the tables below. Never invent `cubic-bezier(0.4, 0, 0.2, 1)` because it looks familiar. 3. **Extend the codebase's tokens, don't fork them.** If `--ease-out` or a duration scale already exists, use it. Adding a parallel system is a defect. 4. **Reduced motion and hover gating ship with the animation**, not as a follow-up. 5. **Cheapest tool that works.** Don't install a motion library for a fade.
| Frequency | Decision | | --- | --- | | 100+ times/day (keyboard shortcuts, command palette toggle) | **No animation. Ever.** Stop here. | | Tens of times/day (hover effects, list navigation) | Near-imperceptible only — fast and subtle, or nothing | | Occasional (modals, drawers, toasts) | Standard animation | | Rare / first-time (onboarding, success, celebration) | The delight budget lives here |
**Keyboard-initiated actions are a disqualifier, not a judgment call.** Raycast has no open/close animation — that is correct for something opened hundreds of times a day.
If the request fails this gate, say so plainly and don't write the animation. Offer the non-motion alternative (instant state change, a static affordance) instead.
Name it in one of these words before continuing:
Can't name it? Don't build it. "It looks cool" on a frequently-seen element is a reason to stop.
Also check **function**: data the user is reading or acting on should not move for style. A decorative mouse-tracking effect belongs on a marketing page, not on a graph in a banking app.
Walk down; stop at the first that fits.
| Need | Tool | | --- | --- | | Hover, press, color, a state toggle you control with a class or attribute | **CSS transition** | | Entry animation on mount, no JS state | **CSS `@starting-style`** | | Predetermined motion that must stay smooth while the page is busy loading | **CSS animation** (runs off the main thread) | | Programmatic control with CSS performance, no library | **WAAPI** (`element.animate()`) | | Springs, layout animations, exit animations, gesture-driven values | **Motion** (`motion.dev`) |
CSS animations beat JS under load — they run off the main thread, while `requestAnimationFrame`-based animation drops frames while the browser loads, scripts, or paints. Use CSS for predetermined motion, JS for dynamic and interruptible motion.
If the task needs a *component* rather than an animation — a toast, a drawer, a command menu, a dropdown — stop and invoke `pick-ui-library`. Hand-rolling those is how you end up with a `<div>` dropdown and no focus management.
For designers and engineers to help them build better user interfaces. Knowing whether you made a right choice when it comes to animations, or design in general, is hard. These skills aim to help you get to those right decisions faster.
Build animations in React Native and Expo, making the decisions in the order that determines whether they feel right — should it…
Keep web animations inside the frame budget — animate composite-only properties, keep motion off the main thread when the page is…
Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing…
Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing…
Guide to Sonner, the React toast library — install and wire up the Toaster, pick the right toast() call, promise and loading…
Try to break a piece of UI by feeding it worst-case data — long names, unbreakable emails, one-letter names, missing fields, huge…
Design banners for social media, ads, website heroes, creative assets, and print. Multiple art direction options with optional…
Use to design, redesign, critique, audit, polish or animate a frontend: websites, landing pages, dashboards, app UI, components,…
Hyperframes-based video template for retro pixel deck motion design. Use when users want a high-fidelity, multi-scene…
Create branded architecture, architecture delta, IT current-state, flowchart, sequence, state machine, ER/data model, timeline,…