
Interaction Design
Add purposeful motion, loading states, toasts, and gesture feedback so shipped UI feels responsive and clear without decorative animation overload.
Overview
Interaction Design is an agent skill most often used in Build (also Ship launch polish, Launch distribution pages) that defines microinteraction, motion timing, and feedback patterns for delightful usable UI.
Install
npx skills add https://github.com/wshobson/agents --skill interaction-designWhat is this skill?
- Four motion principles: feedback, orientation, focus, and continuity
- Timing table from 100–150ms micro-feedback through 500ms+ choreographed motion
- Easing and CSS guidance for hovers, modals, and page transitions
- Checklist-driven use cases: skeletons, toasts, drag-and-drop, scroll-triggered animation
- Explicit 'purposeful motion' rule—motion communicates, not decorates
- Timing guidelines table spans 100–150ms through 500ms+ use cases
- 4 core purposeful-motion principles
Adoption & trust: 9.1k installs on skills.sh; 36.5k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your app functions but clicks feel dead, loaders are jarring, and transitions confuse users about what changed.
Who is it for?
Indie builders polishing dashboards, onboarding, and marketing UI in React, Next.js, or Tailwind stacks where motion and feedback were an afterthought.
Skip if: Brand-only visual identity work with no implementation, or pure backend/API tasks with no user-facing surface.
When should I use this skill?
Adding polish to UI interactions, implementing loading states, or creating delightful user experiences with motion and feedback.
What do I get? / Deliverables
You implement consistent timing, easing, loading states, and feedback patterns so agents ship UI that communicates state changes clearly.
- Motion and timing spec applied to components
- Loading/skeleton and notification interaction patterns
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Build / frontend is the canonical shelf because most patterns are implemented in components, CSS, and motion libraries during product construction. Frontend covers microinteractions, transitions, skeletons, and hover/focus states that live in the UI layer agents edit daily.
Where it fits
Add skeleton screens and 200–300ms dropdown transitions to a settings panel before beta.
Standardize modal enter/exit motion and button press feedback before public release checklist.
Improve scroll-triggered reveals and hover states on a marketing landing page for clearer CTAs.
Tune in-app notification toasts and empty-state transitions for onboarding drip campaigns.
How it compares
Skill for motion and feedback semantics—pair with a component library skill rather than replacing UX research or full design systems.
Common Questions / FAQ
Who is interaction-design for?
Solo developers and designers shipping with AI agents who need concrete rules for transitions, loaders, toasts, and gestures without hiring a motion specialist.
When should I use interaction-design?
During Build when adding UI polish; during Ship before launch prep when hardening loading and error states; during Launch when improving landing and signup flows; during Grow when refining lifecycle emails and in-app nudges.
Is interaction-design safe to install?
It is guidance-only with no mandatory network or shell side effects; confirm bundle provenance via the Security Audits panel on this Prism page.
SKILL.md
READMESKILL.md - Interaction Design
# Interaction Design Create engaging, intuitive interactions through motion, feedback, and thoughtful state transitions that enhance usability and delight users. ## When to Use This Skill - Adding microinteractions to enhance user feedback - Implementing smooth page and component transitions - Designing loading states and skeleton screens - Creating gesture-based interactions - Building notification and toast systems - Implementing drag-and-drop interfaces - Adding scroll-triggered animations - Designing hover and focus states ## Core Principles ### 1. Purposeful Motion Motion should communicate, not decorate: - **Feedback**: Confirm user actions occurred - **Orientation**: Show where elements come from/go to - **Focus**: Direct attention to important changes - **Continuity**: Maintain context during transitions ### 2. Timing Guidelines | Duration | Use Case | | --------- | ----------------------------------------- | | 100-150ms | Micro-feedback (hovers, clicks) | | 200-300ms | Small transitions (toggles, dropdowns) | | 300-500ms | Medium transitions (modals, page changes) | | 500ms+ | Complex choreographed animations | ### 3. Easing Functions ```css /* Common easings */ --ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* Decelerate - entering */ --ease-in: cubic-bezier(0.55, 0, 1, 0.45); /* Accelerate - exiting */ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* Both - moving between */ --spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* Overshoot - playful */ ``` ## Quick Start: Button Microinteraction ```tsx import { motion } from "framer-motion"; export function InteractiveButton({ children, onClick }) { return ( <motion.button onClick={onClick} whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} transition={{ type: "spring", stiffness: 400, damping: 17 }} className="px-4 py-2 bg-blue-600 text-white rounded-lg" > {children} </motion.button> ); } ``` ## Interaction Patterns ### 1. Loading States **Skeleton Screens**: Preserve layout while loading ```tsx function CardSkeleton() { return ( <div className="animate-pulse"> <div className="h-48 bg-gray-200 rounded-lg" /> <div className="mt-4 h-4 bg-gray-200 rounded w-3/4" /> <div className="mt-2 h-4 bg-gray-200 rounded w-1/2" /> </div> ); } ``` **Progress Indicators**: Show determinate progress ```tsx function ProgressBar({ progress }: { progress: number }) { return ( <div className="h-2 bg-gray-200 rounded-full overflow-hidden"> <motion.div className="h-full bg-blue-600" initial={{ width: 0 }} animate={{ width: `${progress}%` }} transition={{ ease: "easeOut" }} /> </div> ); } ``` ### 2. State Transitions **Toggle with smooth transition**: ```tsx function Toggle({ checked, onChange }) { return ( <button role="switch" aria-checked={checked} onClick={() => onChange(!checked)} className={` relative w-12 h-6 rounded-full transition-colors duration-200 ${checked ? "bg-blue-600" : "bg-gray-300"} `} > <motion.span className="absolute top-1 left-1 w-4 h-4 bg-white rounded-full shadow" animate={{ x: checked ? 24 : 0 }} transition={{ type: "spring", stiffness: 500, damping: 30 }} /> </button> ); } ``` ### 3. Page Transitions **Framer Motion layout animations**: ```tsx import { AnimatePresence, motion } from "framer-motion"; function PageTransition({ children, key }) { return ( <AnimatePresence mode="wait"> <motion.div key={key} initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }}