Skip to main content
skill CX Codex

ux-friction — Claude Code skill: animation that gets in the way

A skill that diagnoses animations which make users wait, get confused or abandon a task. Useful when transitions slow the interface down.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add dylantarre/animation-principles --skill ux-friction -a claude-code
Open on GitHub

What ux-friction does

The skill walks through animation principles and names the usual failure behind each one. A transition runs too long, so it no longer matches what the user meant to do. Something changes with no warning, because nothing prepared the user for it. Motion stops abruptly and the element never settles. The important change happens outside where the user is looking, and nothing guides the eye there. An animation has no reason behind it, so people ask why it bounces.

It starts from problem indicators: users waiting for animations to finish, confusion about what happened, repeated clicks mid-animation, abandoned tasks. Then come quick fixes — make animations skippable on click, cut the duration, add a progress indicator for anything over 400ms, drop decorative motion. The code sample shows how to restore pointerEvents and how to finish every running animation through getAnimations() on click.

An eight-point checklist closes it out, from whether users can interact during the animation to testing with people who click rapidly. The skill suggests 100–200ms for micro-interactions and 200–400ms for transitions. If an animation blocks input in your project, that is the first thing worth checking.

What it helps with

  • find the animation that makes users wait for it to finish
  • explain why repeated clicks during a transition do nothing
  • cut transition duration to fit the context
  • add a progress indicator to a long animation
  • remove decorative motion that distracts from the task

Example prompts for the agent

  • Check the modal animation with the ux-friction skill — users say they don't understand what happened
  • Run the task list transitions through ux-friction and tell me what to shorten
  • Why do clicks during the animation not register? Walk through it with ux-friction

How to install ux-friction

1Skills CLI (Vercel)

npx skills add dylantarre/animation-principles --skill ux-friction -a claude-code

2Manually: put the files in place

~/.claude/skills/ux-friction/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/ux-friction/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about ux-friction

How do I install ux-friction in Claude?

Run npx skills add dylantarre/animation-principles --skill ux-friction -a claude-code. The skill lands in ~/.claude/skills/ux-friction/SKILL.md.

What does ux-friction do?

It diagnoses animations that block, confuse or frustrate users, then suggests fixes built on timing, anticipation, follow through, staging and appeal.

Which platforms does the skill support?

Claude, Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode, each with its own install command.

Source text

SKILL.md · MIT
---
name: ux-friction
description: Use when animation causes user confusion, delays task completion, or creates frustration
---

# UX Friction

Diagnose animations that block, confuse, or frustrate users.

## Problem Indicators
- Users wait for animations to finish
- Confusion about what happened
- Repeated clicks/taps during animation
- Users skip or abandon tasks
- "Where did that go?" moments

## Diagnosis by Principle

### Timing
**Issue**: Animation too slow for the context
**Fix**: Match duration to user intent. Micro-interactions: 100-200ms. Transitions: 200-400ms. Never block input.

### Anticipation
**Issue**: Action happens without warning
**Fix**: Add subtle anticipation cues before significant changes. A button press should show feedback before the result.

### Follow Through
**Issue**: Animation ends abruptly
**Fix**: Let elements settle naturally. Sudden stops feel broken. Add slight overshoot and settle.

### Staging
**Issue**: Important changes happen outside focus
**Fix**: Draw attention to where change occurs. If content moves, guide the eye with motion.

### Appeal
**Issue**: Animation feels arbitrary
**Fix**: Every animation should have clear purpose. If users question "why does this bounce?", remove it.

## Quick Fixes

1. **Make animations skippable** - Click/tap should complete or skip
2. **Reduce duration by 30%** - Most animations are too slow
3. **Add progress indicators** - For anything over 400ms
4. **Animate in user's focus area** - Don't move things peripherally
5. **Remove decorative animations** - If it doesn't help, it hurts

## Troubleshooting Checklist

- [ ] Can users interact during animation?
- [ ] Is duration under 400ms for transitions?
- [ ] Does animation communicate state change?
- [ ] Is the animation skippable if lengthy?
- [ ] Does motion guide attention correctly?
- [ ] Is there feedback for user input?
- [ ] Would removing animation hurt understanding?
- [ ] Test with impatient users (click rapidly)

## Pattern

```js
// Allow interaction during animation
element.style.pointerEvents = 'auto';

// Make animation skippable
element.addEventListener('click', () => {
  element.getAnimations().forEach(a => a.finish());
});
```

© dylantarre · MIT · dylantarre/animation-principles

Similar skills

Everything for Frontend and UI →

From the same set86

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor