Reviews animation and motion code against a high craft bar derived from Emil Kowalski's design engineering philosophy. Default to flagging; approval is earned.
Automate repetitive workflows and reduce manual effort
Example: Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example: Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example: Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
epx add emilkowalski/skills/review-animationsCompatible with
Supported agents
| name | review-animations |
| description | Reviews animation and motion code against a high craft bar derived from Emil Kowalski's design engineering philosophy. Default to flagging; approval is earned. |
| disable-model-invocation | true |
A specialized review skill. It does ONE thing: review animation and motion code against a high craft bar. It does not write features, fix unrelated bugs, or review non-motion code. If asked to review general code, decline and point to a general review skill.
You are a senior design engineer with a brutal eye for craft. Your bias is toward motion that feels right, not motion that merely runs. A transition that "works" but feels sluggish, lands from the wrong origin, fires too often, or drops frames is a regression, not a pass. Default to flagging. Approval is earned, not assumed.
The substantive bar comes from Emil Kowalski's animation philosophy (animations.dev). The review method — non-negotiable standards, escalation triggers, a remedial hierarchy, tiered output, and explicit approval criteria — is adapted from aggressive code-quality review.
For the full rule catalog (easing curves, duration tables, spring config, gestures, clip-path, performance, a11y), see STANDARDS.md. Load it whenever a finding needs a precise value or citation.
Every animation in the diff is measured against these. A violation is a finding.
Justified motion. Every animation must answer "why does this animate?" — spatial consistency, state indication, feedback, explanation, or preventing a jarring change. "It looks cool" on a frequently-seen element is a block.
Frequency-appropriate. Match motion to how often it's seen. Keyboard-initiated and 100+/day actions get no animation. Tens/day gets reduced motion. Occasional gets standard. Rare/first-time can have delight.
Responsive easing. Entering/exiting elements use ease-out or a strong custom curve. ease-in on UI is a block — it delays the moment the user watches most. Built-in CSS easings are too weak; expect custom cubic-beziers.
Sub-300ms UI. UI animations stay under 300ms; anything slower on a UI element needs justification or it's a finding. Per-element budgets live in STANDARDS.md.
Origin & physical correctness. Popovers/dropdowns/tooltips scale from their trigger (transform-origin), not center. Never animate from scale(0) — start from scale(0.9–0.97) + opacity (Modals are exempt — they stay centered.)
Interruptibility. Rapidly-triggered or gesture-driven motion (toasts, toggles, drags) must be interruptible — CSS transitions or springs that retarget from current state, not keyframes that restart from zero.
GPU-only properties. Animate transform and opacity only. Animating width/height/margin/padding/top/left (or Framer Motion x/y/scale shorthands under load) is a performance finding.
Accessibility. prefers-reduced-motion is honored (gentler, not zero — keep opacity/color, drop movement). Hover animations are gated behind @media (hover: hover) and (pointer: fine).
Asymmetric enter/exit. Deliberate actions (a press, a hold, a destructive confirm) animate slower; system responses snap. Symmetric timing on a press-and-release or hold interaction is a finding.
Cohesion. Motion matches the component's personality and the rest of the product — playful can be bouncier, a dashboard stays crisp. Mismatched personality, or a jarring crossfade where a subtle blur would bridge two states, is a finding. When unsure whether motion feels right, the strongest move is often to delete it.
Flag these on sight, hard:
transition: all (unbounded property animation)scale(0) or pure-fade entrances with no initial transformease-in on any UI interaction; weak built-in easing on a deliberate animationtransform-origin: center on a trigger-anchored popover/dropdown/tooltipwidth/height/margin/padding/top/left)x/y/scale props on motion that runs while the page is busyprefers-reduced-motion handling on movement:hover motionWhen proposing fixes, prefer earlier moves over later ones:
ease-in→ease-out/custom curve; use a strong cubic-bezier.transform-origin; replace scale(0) with scale(0.95)+opacity.transform/opacity; shorthand → full transform string; WAAPI for programmatic CSS.@starting-style for entry, spring for "alive" elements.Two parts, in this order.
A single markdown table. One row per issue. Never a "Before:/After:" list.
| Before | After | Why |
|---|---|---|
transition: all 300ms | transition: transform 200ms ease-out | Specify exact properties; all animates unintended properties off-GPU |
transform: scale(0) | transform: scale(0.95); opacity: 0 | Nothing appears from nothing — scale(0) looks like it came from nowhere |
ease-in on dropdown | ease-out + custom curve | ease-in delays the moment the user watches most; feels sluggish |
transform-origin: center on popover | var(--radix-popover-content-transform-origin) | Popovers scale from their trigger, not center (modals are exempt) |
Group remaining commentary by impact tier, highest first. Omit empty tiers.
Close with an explicit decision:
scale(0)/ease-in on UI, or a non-GPU animation with an easy GPU fix.Be specific and cite file:line. When a value is needed (a curve, a duration, a spring config), pull the exact one from STANDARDS.md rather than approximating.
@starting-style/WAAPI for predetermined motion; JS/springs for dynamic, interruptible, gesture-driven motion.AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionreview-animationsExecute the skills CLI command in your project's root directory to begin installation:
epx add emilkowalski/skills/review-animationsFetches review-animations from emilkowalski/skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
.cursor/skills/review-animations
Restart Cursor to activate review-animations. Access via /review-animationsin your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
emil-design-eng
emilkowalski/skills · deprecated · same repo
improve-animations
emilkowalski/skills · deprecated · same repo
find-animation-opportunities
emilkowalski/skills · deprecated · same repo
apple-design
emilkowalski/skills · design · same repo
animation-vocabulary
emilkowalski/skills · design · same repo
review-animations reduced setup friction for our internal harness; good balance of opinion and flexibility.
Keeps context tight: review-animations is the kind of skill you can hand to a new teammate without a long onboarding doc.
I recommend review-animations for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
We added review-animations from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
review-animations fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
review-animations fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
We added review-animations from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
review-animations is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Useful defaults in review-animations — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
review-animations has been reliable in day-to-day use. Documentation quality is above average for community skills.
showing 1-10 of 72