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 |