SmoothUI Component Craft
Orchestrate multiple quality skills through a strict phased workflow to produce polished, accessible, performant SmoothUI components.
Strict Workflow
Every component task follows these phases in order. Do not skip phases.
Phase 1: Brainstorm & Research
Invoke superpowers:brainstorming first to explore intent, requirements, and design before any code.
During brainstorming:
- •Clarify what the component does and its interaction patterns
- •Identify animation requirements (enter, exit, hover, state transitions)
- •Decide Motion vs GSAP (prefer Motion unless complex morphing/timelines needed)
- •Identify controlled/uncontrolled state needs
- •List variants and props
After brainstorming, research existing components in packages/smoothui/components/ for similar patterns to follow.
Phase 2: Design with Interface Craft
Invoke interface-craft to design the animation and interaction layer:
- •Define animation stages and sequencing
- •Plan spring configurations (duration: 0.25, bounce: ≤0.1 for UI)
- •Design hover/focus/active states
- •Plan layout animations if needed
Output: animation spec with concrete Motion/GSAP values.
Phase 3: Implement
Read scaffolding templates from references/scaffolding.md for file templates.
Create all required files:
- •
Component —
packages/smoothui/components/[name]/index.tsx- •
"use client"directive if interactive - •Export types as
[ComponentName]Props - •Use
cn()from@repo/shadcn-ui/lib/utils - •Import
useReducedMotionfrommotion/react
- •
- •
package.json —
packages/smoothui/components/[name]/package.json- •Use
workspace:*for internal deps
- •Use
- •
tsconfig.json —
packages/smoothui/components/[name]/tsconfig.json - •
Export — Add to
packages/smoothui/components/index.ts - •
Example —
apps/docs/examples/[name].tsx- •Default export named
[ComponentName]Demo - •Show all variants
- •Default export named
- •
Docs —
apps/docs/content/docs/components/[name].mdx- •Frontmatter: title, description, icon, dependencies, installer
- •Use
<AutoTypeTable>for props
- •
Navigation — Add to
apps/docs/content/docs/components/meta.jsonalphabetically in correct section
Animation Requirements (non-negotiable)
- •Import and use
useReducedMotionfrommotion/react - •When
shouldReduceMotionis true: instant transitions (duration: 0) or static state - •Only animate
transformandopacity - •Spring:
{ type: "spring", duration: 0.25, bounce: 0.1 } - •Enter easing:
cubic-bezier(.23, 1, .32, 1) - •Move easing:
cubic-bezier(0.645, 0.045, 0.355, 1) - •Never use string easing like
"easeInOut" - •Hover animations: detect hover-capable devices with
matchMedia("(hover: hover) and (pointer: fine)")
Accessibility Requirements (non-negotiable)
- •Semantic HTML (
<button>,<nav>, not<div>with roles) - •ARIA attributes (
aria-label,aria-expanded,role, etc.) - •Keyboard navigation (arrow keys, Enter, Escape as appropriate)
- •Proper
tabIndexmanagement (never positive values) - •Alt text for images
- •Color contrast compliance
Phase 4: Quality Review
Run all three review skills in sequence:
- •Invoke
vercel-react-best-practices— Check React/Next.js performance patterns - •Invoke
web-design-guidelines— Check Web Interface Guidelines compliance - •Invoke
rams— Run accessibility and visual design review
Fix all issues found before considering the component complete.
Phase 5: Verify
- •Run
pnpm checkfrom project root to verify linting - •Run
pnpm buildto verify the build passes - •Start dev server and visually verify in browser if possible
Improving Existing Components
For improvement tasks, skip Phase 1 brainstorming if the change is small (e.g., "add a variant"). Otherwise follow full workflow.
Always:
- •Read the existing component first
- •Identify what's missing (reduced motion? keyboard nav? hover detection?)
- •Apply changes
- •Run Phase 4 review skills
- •Run Phase 5 verification
Quick Reference: File Paths
| File | Path |
|---|---|
| Components | packages/smoothui/components/[name]/ |
| Component index | packages/smoothui/components/index.ts |
| Examples | apps/docs/examples/[name].tsx |
| Docs | apps/docs/content/docs/components/[name].mdx |
| Nav config | apps/docs/content/docs/components/meta.json |