Automated summary
Generates GPU-accelerated animations with Motion.dev for React, Next.js, Svelte, and Astro projects while incorporating accessibility and performance best practices.
Strengths
- Structured four-step workflow: clarify, plan, implement, verify.
- Clearly scoped with recommended use cases and explicit exclusions.
- Covers entrance animations, gestures, scroll effects, and layout transitions using spring physics.
- Includes concrete quality gates: at least 60fps, CLS of 0, and prefers-reduced-motion support.
Limitations
- Does not provide complete code examples in the supplied content, despite promising production TypeScript/JSX code.
- Intentionally excludes Vue, complex SVG/Canvas animations, and static sites without JavaScript.
- Performance verification relies on external tools such as Chrome DevTools and Lighthouse.
Use it to add UI animations, scroll effects, gestures, or layout transitions to a React, Next.js, Svelte, or Astro application.
Avoid it for simple CSS transitions, Vue projects, complex SVG/Canvas animations, or sites without a JavaScript framework.
Security analysis
CautionThe skill is a legitimate animation guide with no destructive, obfuscated, or exfiltration instructions. Risk is limited to the declared Bash tool, npm installation/network access, and referenced auxiliary scripts/files that are not visible in the supplied content.
- •Declares Bash, Write, and Edit; instructs `npm install motion`, which performs a network package install and may run npm lifecycle scripts. This is legitimate setup but is a supply-chain execution surface.
- •References `./scripts/validate_motion_config.py` and other example/reference/template files not included in the supplied SKILL.md; their contents should be audited before execution.
Examples
Add a subtle whileInView fade-up animation to the feature cards on our Next.js 15 landing page using Motion.dev, with spring physics and prefers-reduced-motion support.Create a draggable card carousel in React with Motion.dev, using spring transitions, whileHover effects, and keyboard accessibility.Implement a parallax hero section and a staggered page transition in an Astro project with Motion.dev, keeping the animation at 60fps or higher and CLS at 0.name: motion-dev-animations description: Creates 120fps GPU-accelerated animations with Motion.dev (Framer Motion successor) for React, Next.js, Svelte, and Astro projects. Use when user requests animation, motion, scroll effects, parallax, hero animations, gestures, drag interactions, spring physics, whileHover effects, whileInView animations, animated UI, micro-interactions, page transitions, or layout animations. Generates production TypeScript/JSX code with accessibility (prefers-reduced-motion) and performance validation (≥60fps). Supports entrance animations, gesture interactions (hover/tap/drag), scroll-based reveals, and layout transitions using spring physics and natural timing. Do NOT use for CSS-only transitions (use native CSS), static sites without JavaScript, Vue animations (use motion-v variant instead), or SVG/Canvas complex animations (GSAP better suited). allowed-tools: Read, Write, Edit, Bash, Glob, Grep metadata: version: "3.0.0" author: "Motion Dev Standards" tags: ["motion", "framer-motion", "animation", "react", "nextjs", "svelte", "astro", "gestures", "scroll", "parallax", "microinteractions", "spring-physics", "layout-animations"] min_claude_version: "3.5" created: "2025-11-07" updated: "2025-11-08" optimization: "Research-backed: imperative language, few-shot (3 examples), layered complexity, progressive loading"
Motion Dev Animations
Motion.dev - 10M+ downloads/month, successor to Framer Motion 120fps GPU-accelerated animations for React, Next.js, Svelte, Astro, Vue
Purpose
Generate production-grade animations using Motion.dev following Apple/Jon Ive principles: Purposeful (serves function) | Smooth (120fps) | Accessible (reduced-motion) | Performant (GPU-only) | Elegant (subtle) | Consistent (unified timing)
When to Use
✅ Use for:
- React 19+/Next.js 15+/Svelte 5+/Astro 4+ animation implementation
- Scroll effects (parallax, reveal), gestures (hover, drag, tap), layout animations
- Hero sections, cards, micro-interactions requiring 60fps+ performance
- Projects needing spring physics, natural motion, accessibility
❌ Don't use for:
- CSS-only transitions (use native
transitionproperty) - Static sites without JavaScript frameworks
- Vue projects (use
motion-vpackage - different API) - SVG/Canvas complex animations (GSAP better suited)
- Form-only CRUD apps (overkill)
Workflow: Clarify → Plan → Implement → Verify
Step 1: Clarify Requirements
Determine project context and animation goals:
- Framework (React 19+, Next.js 15+, Svelte 5+, Astro 4+)
- Animation type (entrance, gesture, scroll, layout)
- Design goal (subtle, prominent, playful, professional)
- Performance constraints (target device, bundle limits, accessibility requirements)
- Trigger mechanism (mount, viewport, user interaction)
Step 2: Plan Animation Strategy
Define implementation approach:
- Components to animate (headers, cards, buttons, sections)
- Motion patterns (fade, slide, scale, spring, parallax)
- Timing specifications (duration, delay, stagger intervals)
- Physics parameters (stiffness: 300-400, damping: 20, mass: 1)
- Accessibility fallbacks (prefers-reduced-motion alternatives)
Step 3: Implement in Phases
Build animations incrementally:
- Setup: Install Motion.dev, configure imports, prepare component structure
- Core Animation: Apply motion properties (initial, animate, transition)
- Refinement: Tune timing, easing curves, spring physics for natural feel
- Accessibility: Add reduced-motion detection, keyboard navigation support
- Optimization: Verify GPU-acceleration, minimize bundle size, test performance
Step 4: Verify Quality Standards
Check against requirements:
- Performance: ≥60fps (Chrome DevTools → Performance tab)
- Layout Stability: CLS = 0 (Lighthouse audit)
- Accessibility: Honors prefers-reduced-motion (system settings test)
- Keyboard Navigation: All interactive elements keyboard-accessible
- Mobile Responsive: Touch-friendly gestures, tested on iOS/Android
Animation Pattern Decision Tree
INPUT: What should animate?
├─ ENTRANCE (page load, mount)
│ → Pattern: initial={{opacity: 0, y: 20}} animate={{opacity: 1, y: 0}}
│ → Timing: 0.6-0.8s, ease: [0.22, 1, 0.36, 1]
│ → Stagger: 0.1-0.2s between elements
│ → Example: ./examples/hero-fade-up.md
│
├─ GESTURE (hover, tap, drag)
│ → Pattern: whileHover={{scale: 1.05}}, whileTap={{scale: 0.95}}
│ → Physics: Spring (stiffness: 300-400, damping: 20)
│ → Timing: Instant response (no duration)
│ → Examples: ./examples/card-hover.md, ./examples/magnetic-button.md
│
├─ SCROLL (reveal, parallax)
│ → Pattern: whileInView + viewport OR useScroll + useTransform
│ → Trigger: viewport={{once: true, amount: 0.3}}
│ → Performance: Transform/opacity only
│ → Examples: ./examples/scroll-reveal.md, ./examples/parallax-layers.md
│
└─ LAYOUT (reorder, expand)
→ Pattern: layout prop (auto FLIP)
→ Shared: layoutId="id" for morphing
→ Caveat: Only animates transforms
API Quick Reference
| Component/Hook | Usage | When |
|----------------|-------|------|
| motion.div | <motion.div animate={{x: 100}}> | Basic animations |
| whileHover | whileHover={{scale: 1.05}} | Hover states (0.2-0.3s) |
| whileTap | whileTap={{scale: 0.95}} | Click feedback |
| whileInView | whileInView={{opacity: 1}} | Scroll reveal |
| drag | drag="x" dragConstraints | Draggable elements |
| layout | <motion.div layout /> | Auto FLIP animation |
| useScroll | Track scroll progress | Parallax, progress bars |
| useTransform | Map values | Scroll-linked effects |
| useSpring | Spring physics | Smooth value changes |
| useInView | Viewport detection | Trigger animations |
Full API: See Complete API Reference
Framework Integration
| Framework | Import | Components | Exit Animations |
|-----------|--------|------------|-----------------|
| React/Next.js | "motion/react" | <motion.div> | <AnimatePresence> |
| Svelte | "motion" | Vanilla API | N/A |
| Astro | "motion" | Client scripts | N/A |
| Vue | "motion-v" | <motion.div> | Similar to React |
Quality Standards
| Category | Requirement | How to Verify | |----------|-------------|---------------| | Performance | ≥60fps | Chrome DevTools → Performance | | GPU-accel | transform/opacity only | No width/height/left/top | | Bundle | <50KB | webpack-bundle-analyzer | | Accessibility | prefers-reduced-motion | System settings test | | Mobile | Touch-friendly | iOS/Android testing | | Layout shift | CLS = 0 | Lighthouse audit |
Examples Library (Progressive Loading)
Load on-demand based on animation type:
Hero Sections
- Hero Fade Up - Classic Apple-style entrance
- Hero Stagger - Orchestrated elements
- Hero Split Text - Character reveal
Scroll Effects
- Scroll Reveal - Intersection Observer fade-in
- Parallax Layers - Multi-speed depth
- Scroll Progress - Reading indicator
Gestures & Interactions
- Card Hover - Elegant lift + shadow
- Magnetic Button - Cursor-following
- Drag Carousel - Touch slider
Layout Animations
- List Reorder - Drag-to-reorder FLIP
- Accordion - Expand/collapse
- Tab Switch - Shared layout
Full examples: All files in ./examples/ directory
Reference Documentation (Load On-Demand)
- Complete API Reference - All components, hooks, props
- Spring Physics Guide - Tuning stiffness, damping, mass
- Performance Optimization - GPU, will-change, lazy loading
- Accessibility Guide - Reduced motion, keyboard, screen readers
- Troubleshooting - Common issues, solutions
- Framer Motion Migration - Upgrade guide
Templates (Production-Ready)
- Next.js Page Template - Hero + features + testimonials
- Component Library - 10+ reusable components
- Scroll Template - Parallax + reveal patterns
- Dashboard Template - Interactive cards, charts
Installation
# React/Next.js/Svelte/Astro
npm install motion
# Vue
npm install motion-v
Common Patterns (Copy-Paste Ready)
Pattern 1: Fade Up Entrance
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6, ease: [0.22, 1, 0.36, 1] }}
/>
Pattern 2: Hover Card
<motion.div
whileHover={{ y: -8, boxShadow: "0 20px 40px rgba(0,0,0,0.12)" }}
transition={{ type: "spring", stiffness: 300, damping: 20 }}
/>
Pattern 3: Scroll Reveal
<motion.div
initial={{ opacity: 0, y: 50 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.3 }}
/>
More patterns: Staggered lists, exit animations, layout transitions → ./examples/ directory
Error Handling
| Issue | Solution |
|-------|----------|
| Animation doesn't trigger | Check initial ≠ animate values |
| Poor performance | Use transform/opacity only + will-change CSS |
| Layout shift | Set explicit dimensions, use layout prop |
| Exit not working | Wrap with <AnimatePresence>, add key prop |
Implementation Best Practices
- Start simple → Build from fade + slide, add complexity incrementally
- Extract variants → Define animation states as named variants for maintainability
- Prefer spring physics → Default to spring transitions (more natural than tween)
- Stagger list items → Use staggerChildren (0.1-0.2s) for rhythm and hierarchy
- Test mobile thoroughly → Verify touch gestures, performance on iOS/Android devices
- Include reduced-motion → Always provide prefers-reduced-motion fallback animations
- Profile performance → Use Chrome DevTools Performance tab, target ≥60fps
Design Philosophy (Apple/Jon Ive Principles)
Apply these design principles to all animations:
- Simplicity: Use 200-400ms durations, minimize simultaneous motion, prefer transform properties
- Natural Physics: Implement spring-based transitions, avoid linear easing, apply mass-based movement
- Purposeful Motion: Guide user attention, provide interaction feedback, establish visual hierarchy
- Elegant Restraint: Apply "less is more" principle, maintain consistent timing, respect user motion preferences
Validation
For structured output validation, see:
- Motion Config Schema - JSON schema
- Validation Script - Automated checks
Metadata
Version: 3.0.0 (Research-Backed Optimization) Optimization: Imperative language, few-shot patterns (3 examples), layered complexity, progressive loading Token Efficiency: 87% core reduction (15K → 2K) + auto-caching Motion.dev: v11+ Frameworks: React 19+, Next.js 15+, Svelte 5+, Astro 4+, Vue 3+ Research: arXiv 2402.07927v1, 2211.01910, 2310.14735v5, PubMed 40334089 License: MIT
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/motion-dev-animations-ms47vom0/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/motion-dev-animations-ms47vom0' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/motion-dev-animations-ms47vom0/download' --output '.skill-downloads/motion-dev-animations-ms47vom0/SKILL.md.part' && mv '.skill-downloads/motion-dev-animations-ms47vom0/SKILL.md.part' '.skill-downloads/motion-dev-animations-ms47vom0/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Tools declared by the author (check availability in your agent): Read, Write, Edit, Bash, Glob, Grep
Original excerpt: Installation
# React/Next.js/Svelte/Astro
npm install motion
# Vue
npm install motion-v
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/motion-dev-animations-ms47vom0/SKILL.md' && test -s '.skill-downloads/motion-dev-animations-ms47vom0/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/motion-dev-animations' && cp -R '.skill-downloads/motion-dev-animations-ms47vom0' '.claude/skills/motion-dev-animations'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/motion-dev-animations-ms47vom0'openskills read 'motion-dev-animations-ms47vom0'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/motion-dev-animations-ms47vom0/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.