review-animations
Skill3 starsChanged 28 days agoMITView on GitHub
Reviews animation and motion code against a high craft bar derived from Emil Kowalski's design engineering philosophy. Default to flagging; approval is earned.
We split this skill into the rules it gives an agent
5 rules. 4 are common, 0 are distinctive, and 1 is very specific to this project.
4
Common
Most of the 52 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 21
Every animation in the diff is measured against these.
- Common: line 23
Justified motion: Every animation must answer "why does this animate?" — spatial consistency, state indication, feedback, explanation, or …
- Common: line 64
When proposing fixes, prefer earlier moves over later ones:
- Very specific: line 111
Prefer CSS transitions/@starting-style/WAAPI for predetermined motion.
- Common: line 112
When unsure whether motion feels right, recommend reviewing it in slow motion / frame-by-frame and with fresh eyes the next day rather than …
“Common” is measured: kept by at least 6 in 10 of the 52 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Reviewing Animations
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.
Operating Posture
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.
The Ten Non-Negotiable Standards
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-outor a strong custom curve.ease-inon 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 fromscale(0)— start fromscale(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
transformandopacityonly. Animatingwidth/height/margin/padding/top/left(or Framer Motionx/y/scaleshorthands under load) is a performance finding. - Accessibility.
prefers-reduced-motionis 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.
Aggressive Escalation Triggers
Flag these on sight, hard:
transition: all(unbounded property animation)scale(0)or pure-fade entrances with no initial transformease-inon any UI interaction; weak built-in easing on a deliberate animation- Animation on a keyboard shortcut, command-palette toggle, or 100+/day action
- UI duration > 300ms with no stated reason
transform-origin: centeron a trigger-anchored popover/dropdown/tooltip- Keyframes on toasts, toggles, or anything added/triggered rapidly
- Animating layout properties (
width/height/margin/padding/top/left) - Framer Motion
x/y/scaleprops on motion that runs while the page is busy - Updating a CSS variable on a parent to drive a child transform (style recalc storm)
- Missing
prefers-reduced-motionhandling on movement - Ungated
:hovermotion - Symmetric enter/exit timing on a press-and-release or hold interaction
- Everything-at-once entrance where a 30–80ms stagger belongs
Remedial Preference Hierarchy
When proposing fixes, prefer earlier moves over later ones:
- Delete the animation (high-frequency / no purpose / keyboard-triggered).
- Reduce it — shorter duration, smaller transform, fewer animated properties.
- Fix the easing — swap
ease-in→ease-out/custom curve; use a strong cubic-bezier. - Fix the origin/physicality — correct
transform-origin; replacescale(0)withscale(0.95)+opacity. - Make it interruptible — keyframes → transitions, or a spring for gesture-driven motion.
- Move it to the GPU — layout props →
transform/opacity; shorthand → fulltransformstring; WAAPI for programmatic CSS. - Asymmetric timing — slow the deliberate phase, snap the response.
- Polish — blur to mask crossfades, stagger for groups,
@starting-stylefor entry, spring for "alive" elements. - Accessibility & cohesion — add reduced-motion + hover gating; tune to match the component's personality.
Required Output Format
Two parts, in this order.
Part 1 — Findings table (REQUIRED)
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(--transform-origin) (Base UI) | Popovers scale from their trigger, not center (modals are exempt) |
Part 2 — Verdict (REQUIRED)
Group remaining commentary by impact tier, highest first. Omit empty tiers.
- Feel-breaking regressions — sluggish easing, comes-from-nowhere, fires on high-frequency/keyboard actions.
- Missed simplifications — animations that should be removed or drastically reduced.
- Performance — non-GPU properties, dropped-frame risks, recalc storms.
- Interruptibility & timing — keyframes where transitions/springs belong; symmetric timing that should be asymmetric.
- Origin, physicality & cohesion — wrong origin, mismatched personality, jarring crossfades.
- Accessibility — reduced-motion and pointer/hover gating.
Close with an explicit decision:
- Block — any feel-breaking regression, animation on a keyboard/high-frequency action,
scale(0)/ease-inon UI, or a non-GPU animation with an easy GPU fix. - Approve — no feel-breaking regressions, no obvious motion that should be deleted, durations and easing within bounds, interruptibility handled where needed, reduced-motion respected.
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.
Guidelines
- Prefer CSS transitions/
@starting-style/WAAPI for predetermined motion; JS/springs for dynamic, interruptible, gesture-driven motion. - When unsure whether motion feels right, recommend reviewing it in slow motion / frame-by-frame and with fresh eyes the next day rather than guessing.
Other versions80 projects use a version of this.
Word for word · 26
- spree/spree★ 16k100% same
- mengxi-ream/read-frog★ 10k100% same
- usekaneo/kaneo★ 9.7k100% same
- classroomio/classroomio★ 1.7k100% same
- termio-sh/termio★ 751100% same
- base/docs★ 344100% same
- arcboxlabs/linkcode★ 147100% same
- julianromli/faiz-skills★ 16100% same
- Adhamxon/claude-code-skills★ 2100% same
- idexal/idexal-skills★ 2100% same
16 more not listed
Edited · 50
- emilkowalski/skill★ 53k96% same
- emilkowalski/skills★ 53k96% same
- 1weiho/open-slide★ 9.6k99% same
- ArcReel/ArcReel★ 6k96% same
- legions-developer/evilcharts★ 3.2k99% same
- wxyhgk/retain-pdf★ 2.7k99% same
- owid/owid-grapher★ 1.6k99% same
- leepokai/Codync★ 1.4k96% same
- AgentWorkforce/relay★ 1.1k99% same
- skopevoj/spoti.pw★ 73296% same
40 more not listed
Wrote their own version · 4
- ahonn/dotfiles★ 62same name
- kv0906/cc-skills★ 16same name
- Aleksandr-Litvinenko/ladny-interface★ 6same name
- BUGLAN/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use pick-ui-library, animate-expo and 6 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
cal1888Skillpick-ui-library
Pick the right library for a given frontend task from a curated, opinionated list — numbers, OTP inputs, charts, command menus, virtualization, drag and drop, toasts, state, styling, and more. Only runs when explicitly invoked; it does not trigger on its own.
Also in 41 projects that use this
sanmidableSkillanimate-expo
Also in 21 projects that use this
sanmidableSkillask-sonner
Also in 22 projects that use this
jtfasulo7Skillanimation-performance
Apply when building scroll-scrubbed animations, marquees, continuous SVG/canvas animations, or fixing reports of "laggy", "stuttering", "doesn't render", "disappears and reappears", "jumps". Encodes the perf rules learned from the realtor-website rebuild.
Also in 13 projects that use this
desktop-commanderSkillextract-design-system
Extract design primitives from a public website and generate starter token files for your project.
Also in 4 projects that use this
AnasX7Skillbrandkit
Premium brand-kit image generation skill for creating high-end brand-guidelines boards, logo systems, identity decks, and visual-world presentations. Trained for minimalist, cinematic, editorial, dark-tech, luxury, cultural, security, gaming, developer-tool, and consumer-app brand systems. Optimized for intentional logo concepting, refined composition, sparse typography, strong symbolic meaning, premium mockups, art-directed imagery, and flexible grid layouts.
Also in 14 projects that use this
- +1 more from sanmidable
In this repository11 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- animateSkill
- animation-vocabularySkill
- apple-designSkill
- clique-motionSkill
- clique-release-checkSkill
- clique-three-surfacesSkill
- emil-design-engSkill
- find-animation-opportunitiesSkill
- improve-animationsSkill
- drive-cliqueSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

