Motion/animation design skill with 3-designer lens (Emil Kowalski, Jakub Krehel, Jhey Tompkins). Two modes: Create and Audit. Complements frontend-design (broad) with deep motion expertise. Integration points: - skills-external/design-motion-principles/ — skill files + references - link.sh EXTERNAL_SKILLS — symlink to ~/.claude/skills/ - install-plugins.sh step 8c — presence check - update-all.sh step 7.2 — sync from GitHub - profiles: design, full, web, web-full — listed as external - plugin-advisor — decision table, recommended sets, conditional rules - design-gate — symlink check + non-blocking warning if missing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.0 KiB
Workflow: Create Mode
Build interactive components with purposeful motion. Light discovery, then generate against the cookbook.
Required Reading
Read before generating:
references/motion-cookbook.md— the recipe source for all motion codereferences/accessibility.md—prefers-reduced-motionis mandatory in everything you generatereferences/creation-gotchas.md— Claude's failure modes when writing motion; self-check against these
STEP 1: Light Discovery
Establish two things — project context and designer weighting — before generating. Keep it to 1-2 questions.
Infer First, Ask Second
Check what you can already see:
- The request — what component, what interaction, what stack (React / Framer Motion / CSS / HTML)?
- CLAUDE.md, package.json, existing components — project type and existing animation conventions (durations, easing, libraries)
Propose Context + Weighting
Map the project type to a perspective weighting using the Context-to-Perspective Mapping table in SKILL.md. State your inference in one short block:
Building: [what — e.g. "a notification toast, React + Framer Motion"]
Project context: [inferred — e.g. "productivity SaaS dashboard"]
Proposed weighting: Primary [Designer] · Secondary [Designer]
If AskUserQuestion is available and the weighting is genuinely ambiguous, offer:
- Confirm — proceed with the proposed weighting
- Adjust — change primary/secondary designer
Otherwise ask in plain text: "Does this weighting sound right, or should I adjust?"
Wait Gate
For non-trivial components, confirm context before generating. For a small, well-specified request ("add a press-scale to this button"), state the inference in one line and skip straight to STEP 3 — don't manufacture a question.
STEP 2: Load Weighted Knowledge
Based on the confirmed weighting, read the relevant designer file(s):
- Read
references/emil-kowalski.mdif Emil is primary/secondary — restraint, the frequency rule, when NOT to animate - Read
references/jakub-krehel.mdif Jakub is primary/secondary — production polish judgment, subtlety bar - Read
references/jhey-tompkins.mdif Jhey is primary/secondary — playful expression, what motion could become
The designer files give you the judgment (should this animate, what feel). The cookbook gives you the code.
If the component involves complex or numerous animations, also read references/performance.md.
STEP 3: Generate
Build the component. Apply, in order:
- The frequency gate (Emil) — Should this animate at all? High-frequency or keyboard-initiated interactions get minimal or no motion. Decide before adding anything.
- Recipes from the cookbook — Use the weighted designer's patterns. Enter = opacity + translateY + blur. Exit subtler than enter. Custom easing or springs, never bare
ease. - Accessibility — Every animation ships with
prefers-reduced-motionhandling, in the same code. No exceptions, no follow-up. - Performance — Animate
transform/opacity/filteronly. Neverwidth/height/top/left. - Context-appropriate timing — Emil-weighted → under 300ms. Jakub → 200-500ms polish. Jhey → whatever serves the effect.
STEP 4: Self-Check
Before presenting, verify the generated code against every item in references/creation-gotchas.md. Fix anything that matches a gotcha.
Then briefly tell the user the motion decisions you made and why — which designer weighting drove the timing, easing, and whether something was deliberately left un-animated.
Success Criteria
- Context and weighting confirmed (or inference stated for trivial requests)
- Frequency gate applied — motion is purposeful, not decorative-by-default
- Recipes drawn from the cookbook, matched to the designer weighting
prefers-reduced-motionhandled in all generated motion- Only
transform/opacity/filteranimated - Code self-checked against creation-gotchas.md
- Motion decisions explained to the user