Taste Motion logo

Taste Motion

Community
madebymustafa
taste-motion

Motion craft for agent-built interfaces: duration and easing tokens, entrance choreography, hover/active micro-interactions, scroll-driven reveals, layout transitions, and prefers-reduced-motion compliance. Prevents the two AI-motion crimes: nothing moves at all, or everything moves forever. Stack on the design-taste core skill.

Overview

Publishermadebymustafa
Repositorydesign-taste
Skill nametaste-motion
Stars
198
Forks
10
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by madebymustafa on GitHub. Read the source before you install it.

Installation

Install the Taste Motion AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/madebymustafa/design-taste/tree/main/skills/taste-motion
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/madebymustafa/design-taste.git /tmp/design-taste
mkdir -p .claude/skills
cp -r /tmp/design-taste/skills/taste-motion .claude/skills/taste-motion
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Taste Motion in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Taste Motion on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Taste Motion is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

taste-motion

Motion's job is to explain the interface, not decorate it. Every animation must answer: what happened, where is it, what do I do next.

1. THE DURATION SCALE (Fixed Tokens)

TokenDurationUse for
--dur-fast100–150mshovers, pressed states, focus rings
--dur-base200–300mssmall entrances, state changes (toggle, open/close)
--dur-slow400–600mssection reveals, page-level transitions, dialog open
--dur-hero600–900msthe ONE hero entrance sequence

Under 100ms reads as a blink (unless it's a snap, which brutalist packs do deliberately). Over 900ms reads as a slow website.

2. THE EASING TOKENS (Fixed)

  • Standard (UI states): cubic-bezier(0.4, 0, 0.2, 1) — fast in, calm out. Default for hovers and toggles.
  • Emphasized (entrances/reveals): cubic-bezier(0.22, 1, 0.36, 1) — long calm tail. Premium feel.
  • Exit: cubic-bezier(0.4, 0, 1, 1) or faster — exits are snappier than entrances.
  • Spring/overshoot (playful packs only): cubic-bezier(0.34, 1.56, 0.64, 1) — max once per element, never on loops.
  • Never use ease-in-out as a catch-all. Never use linear except for marquees/progress.

3. WHAT TO ANIMATE (And What Not To)

Animate: transform and opacity. That's it. 60fps guaranteed.

Never animate: width/height (layout jank — use transform: scale), margin, top/left (use transform), box-shadow at large sizes (use a pre-blurred pseudo-element), filter: blur on large surfaces.

4. CHOREOGRAPHY (Entrances)

  • One scene per section: on scroll reveal, the section's elements enter in 2–3 stages (heading → body → CTA), 60–120ms apart, same duration and easing. Stagger is hierarchy.
  • Distance ≤ 20px for reveals (translateY 8–16px) + opacity. Bigger distances look like PowerPoint.
  • Scale entrances ≤ 0.96→1 and only on dialogs/popovers, never on full sections.
  • Hero: one sequence, 600–900ms total, elements entering once. No looping float, no repeating wave.
  • Loop allowance: exactly one class of loops allowed per page — ambient status indicators (live dots, loaders, spinners). Everything else loops = error.

5. MICRO-INTERACTIONS (Hover, Press, Focus)

  • Hover: 100–150ms, standard easing, one property change (bg tone, border, translateY −1 to −3px). Never both color AND position AND shadow at once.
  • Pressed: inverse of hover (translate down, shadow off), 80–120ms.
  • Focus-visible: 2px ring, 3:1 contrast, outline-offset: 2px, animated in with 100ms fade — never outline: none without replacement.
  • Disabled: no hover states at all — the element must look inert (opacity 0.4–0.5, no pointer change).
  • Transitions on load/state-change only where the state is visible; a transition nobody can perceive is dead code.

6. SCROLL & LAYOUT

  • Scroll-triggered: IntersectionObserver (or CSS animation-timeline where supported), one reveal per element, then done. No elements that re-animate on every scroll pass.
  • Sticky: allowed for nav and section labels; sticky + animation = performance risk, keep the animation out.
  • View transitions / page transitions: 300–500ms, shared-element moves where they earn it (list → detail). Disabled entirely under prefers-reduced-motion.
  • Layout transitions: FLIP pattern (transform-based), never re-layout animations.

7. REDUCED MOTION (Non-Negotiable)

css
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
  • Above the CSS gate, zero motion by default when the media query matches: no parallax, no auto-scroll carousels, no marquees.
  • Animate presence only: content appears without motion (opacity 0→1 over 1 frame).

8. CHECKLIST (Fail the Page If…)

  • Any element animates for more than ~1.5s (outside loops/loaders).
  • More than one looping element per viewport.
  • Any width, height, margin, or top animation.
  • Reveal distances beyond 20px.
  • ease-in-out used as the global easing.
  • Every element on the page animates on load (bounce-entrance festival).
  • No prefers-reduced-motion handling exists at all.

If you can't explain an animation in one sentence, delete it.

Frequently asked questions

What does the Taste Motion AI skill do?

Motion craft for agent-built interfaces: duration and easing tokens, entrance choreography, hover/active micro-interactions, scroll-driven reveals, layout transitions, and prefers-reduced-motion compliance. Prevents the two AI-motion crimes: nothing moves at all, or everything moves forever. Stack on the design-taste core skill.

Why use Taste Motion on TypingMind?

Because you install it once and use it with any model. Taste Motion is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Taste Motion in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/madebymustafa/design-taste/tree/main/skills/taste-motion. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Taste Motion?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Taste Motion?

As many as you like. As long as a model supports skills, you can use Taste Motion with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Taste Motion AI skill free?

Yes. It is published on GitHub by madebymustafa under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇