interaction-design

wshobson/agents · Agent Skill

Mikro etkileşimleri, hareket tasarımı, geçişleri ve kullanıcı geri bildirimi kalıplarını hoş bir kullanıcı deneyimi için tasarlayıp uygulayın.

Kuruluma geç ↓

Genel bakış

YayıncıwshobsonTopluluk
Depowshobson/agents ↗
Skill klasörüinteraction-design
Yıldız41.779
Fork4.431
Dosyalar4
LisansMIT
Son güncelleme26 Ekim 2026
BağlantılarSkill kaynağı ↗ · Depo ↗

Mozgi kontrolü

Skill dosyalarında bulduklarımız. Ayrıntılar abonelikle.

Güvenlik
düşük risk · belirgin risk bulunamadı — tam rapor ayrıntıları gösterir
Uyumluluk
yalnızca talimatlar — çoğu ajanla çalışır
Benzer skiller
58 benzer skill bulundu
Abonelikte ayrıca

Kurulum

Skill, SKILL.md dosyası içeren bir klasördür. Ajanınızı seçin ve komutları proje kökünde bir terminalde çalıştırın (macOS, Linux veya Windows'ta Git Bash).

Promptu Claude, Codex veya başka bir asistana yapıştırın: skill'i inceleyip sizin için kuracaktır.

Install the “interaction-design” skill from mozgi.io (https://mozgi.io/skills/wshobson-interaction-design/) for me.

1. Download the archive: https://mozgi.io/skills/wshobson-interaction-design/download
   If it fails, take the skill folder from the source: https://github.com/wshobson/agents/tree/main/plugins/ui-design/skills/interaction-design
2. Read SKILL.md and the other files. Check the skill is safe: no hidden commands, no sending data elsewhere, no scripts doing something other than described. If anything looks suspicious, stop and tell me.
3. Put the “interaction-design” folder into your agent's skills folder: .claude/skills/ for Claude Code, .agents/skills/ for Codex, .cursor/skills/ for Cursor, .gemini/skills/ for Gemini CLI. Inside the project if we are in one, otherwise in the home folder (~/.claude/skills/ etc.).
4. Make sure <skills folder>/interaction-design/SKILL.md exists.
5. Briefly tell me what this skill does and offer to try it on my task.

If you cannot do a step yourself, tell me what to click or type.

Kaynak dosyaları

4 dosya ZIP indir

Kurulumdan önce SKILL.md ve eşlik eden dosyaları inceleyin. Önizleme için dosyaya tıklayın.

SKILL.md içeriği

Yazarın orijinal metni · salt okunur

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

/* 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

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

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

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:

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:

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 }}
        exit={{ opacity: 0, y: -20 }}
        transition={{ duration: 0.3 }}
      >
        {children}
      </motion.div>
    </AnimatePresence>
  );
}

4. Feedback Patterns

Ripple effect on click:

function RippleButton({ children, onClick }) {
  const [ripples, setRipples] = useState([]);

  const handleClick = (e) => {
    const rect = e.currentTarget.getBoundingClientRect();
    const ripple = {
      x: e.clientX - rect.left,
      y: e.clientY - rect.top,
      id: Date.now(),
    };
    setRipples((prev) => [...prev, ripple]);
    setTimeout(() => {
      setRipples((prev) => prev.filter((r) => r.id !== ripple.id));
    }, 600);
    onClick?.(e);
  };

  return (
    <button onClick={handleClick} className="relative overflow-hidden">
      {children}
      {ripples.map((ripple) => (
        <span
          key={ripple.id}
          className="absolute bg-white/30 rounded-full animate-ripple"
          style={{ left: ripple.x, top: ripple.y }}
        />
      ))}
    </button>
  );
}

5. Gesture Interactions

Swipe to dismiss:

function SwipeCard({ children, onDismiss }) {
  return (
    <motion.div
      drag="x"
      dragConstraints={{ left: 0, right: 0 }}
      onDragEnd={(_, info) => {
        if (Math.abs(info.offset.x) > 100) {
          onDismiss();
        }
      }}
      className="cursor-grab active:cursor-grabbing"
    >
      {children}
    </motion.div>
  );
}

CSS Animation Patterns

Keyframe Animations

@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes pulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.5;
  }
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

.animate-fadeIn {
  animation: fadeIn 0.3s ease-out;
}
.animate-pulse {
  animation: pulse 2s ease-in-out infinite;
}
.animate-spin {
  animation: spin 1s linear infinite;
}

CSS Transitions

.card {
  transition:
    transform 0.2s ease-out,
    box-shadow 0.2s ease-out;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);
}

Accessibility Considerations

/* Respect user motion preferences */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
function AnimatedComponent() {
  const prefersReducedMotion = window.matchMedia(
    "(prefers-reduced-motion: reduce)",
  ).matches;

  return (
    <motion.div
      animate={{ opacity: 1 }}
      transition={{ duration: prefersReducedMotion ? 0 : 0.3 }}
    />
  );
}

Best Practices

1. Performance First: Use transform and opacity for smooth 60fps

2. Reduce Motion Support: Always respect prefers-reduced-motion

3. Consistent Timing: Use a timing scale across the app

4. Natural Physics: Prefer spring animations over linear

5. Interruptible: Allow users to cancel long animations

6. Progressive Enhancement: Work without JS animations

7. Test on Devices: Performance varies significantly

Common Issues

  • Janky Animations: Avoid animating width, height, top, left
  • Over-animation: Too much motion causes fatigue
  • Blocking Interactions: Never prevent user input during animations
  • Memory Leaks: Clean up animation listeners on unmount
  • Flash of Content: Use will-change sparingly for optimization

Sık sorulan sorular

interaction-design skill'i ne yapar?

Mikro etkileşimleri, hareket tasarımı, geçişleri ve kullanıcı geri bildirimi kalıplarını hoş bir kullanıcı deneyimi için tasarlayıp uygulayın.

interaction-design nasıl kurulur?

Bu sayfadaki “Kurulum” bölümünü açın ve ajanınızı seçin — Claude Code, Codex, Cursor veya Gemini CLI: skill klasörünü doğru yere kopyalayan hazır komutlar orada. Ya da “Asistanla” sekmesindeki promptu kopyalayın; asistan skill'i inceleyip kuracaktır.

interaction-design hangi yapay zekâlarla çalışır?

Skill'ler düz Markdown talimatlarıdır (Agent Skills formatı), bu yüzden interaction-design SKILL.md okuyan her ajanla çalışır: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode ve diğerleri. Model talimatları yalnızca görev skill açıklamasına uyduğunda yükler.

interaction-design ücretsiz mi?

Skill, wshobson tarafından açık olarak yayımlandı (MIT lisansı). Skill'in kendisi ücretsizdir — yalnızca kullandığınız token'lar için yapay zekâ sağlayıcınıza ödeme yaparsınız.

Skill kurmak güvenli mi?

Skill, ajanınızın izleyeceği talimatlardır; kurmadan önce SKILL.md ve eşlik eden dosyaları okuyun. Skill klasöründeki betikler yalnızca ajanınız çalıştırırsa çalışır — ne yaptığını izleyin ve gereksiz izin vermeyin.

Skill, MCP sunucusu veya eklentiden nasıl farklıdır?

MCP sunucusu veya eklenti modele yeni araçlar verir — çalışıp sonuç döndüren kod. Skill ise bilgi ve süreç verir: göreve nasıl yaklaşılacağı, hangi adımların izleneceği ve iyi sonucun neye benzediği. Sunucu veya API anahtarı gerekmez.

Benzer skiller

Tüm skiller →
review-animations Animasyon kalitesini, zamanlamayı ve hareketin tutarlılığını eleştirel bir üretim açısından kontrol edin. emilkowalski49.9k improve-animations Canlandırmanın kod tabanını ve hareket kodunu üst düzey hareket danışmanı olarak gözden geçirin, ardından öncelikli bir denetim ve kendi kendine yeterli uygulama planları oluşturun. Salt okunur kaynak kodu - geliştirmeleri planlar, ancak uygulamaz. Kullanıcı animasyonları geliştirmesini, hareket denetimi yapmasını, uygulamayı daha iyi hale getirmesini veya tek bir diff gözden geçirmesi yerine animasyon düzeltmeleri için bir yol haritası istediğinde kullanın. emilkowalski49.9k find-animation-opportunities İkna edici bir hareket arayüzü için fırsatlar bulun, aynı zamanda gürültü ekleyen veya kullanıcıları yavaşlatan animasyonları reddedin. emilkowalski49.9k animate Sıfırdan bir animasyon oluşturun, hissettirmek için sırayla kararlar alın - gerçekten animasyonlu olması gerekiyor mu, amaç nedir, hangi araç, hangi özellikler, hangi eğri ve süre, nasıl kesintiye uğrar, nasıl çıkar. Gerçekleştirmeyi yazın. Bir şeyi animasyonlu hale getirmek, hareket eklemek, bir bileşeni canlı hale getirmek veya bir geçiş oluşturmak için istediğinde kullanın. Mevcut hareketin eleştirisi için review-animations kullanın; tüm kodun denetimi için improve-animations kullanın. emilkowalski49.9k animation-vocabulary Hareket dilini netleştirmek, animasyon seçimlerinin kasıtlı ve tutarlı görünmesini sağlar. emilkowalski49.9k apple-design Apple'ın arayüz tasarımına ve akıcı fiziksel harekete yaklaşımı, web için tercüme edilmiş hali, dokulu arayüz kullanıcı arabirimi, animasyonları, sürükleme/bırakma/parmak hareketleri ile etkileşimleri, momentum ve kesintiye uğrayan geçişleri, yarı saydam malzemeleri ve derinliği, tipografiyi (optik boyut, takip, aralık) veya temel tasarım ilkelerini (cevap, uzaysal sıralama, sadeleşme) Apple tarzı arayüzler için oluştururken veya test ederken kullanmak için. emilkowalski49.9k