원클릭으로
ui-dev
Build UI components with dark theme, shadcn/ui, animations, and responsive design
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Build UI components with dark theme, shadcn/ui, animations, and responsive design
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Add email verification, password reset, and account management emails to Better Auth using Resend.
TypeScript authentication framework (framework-agnostic). Features: email/password, OAuth (Google, GitHub, Discord), 2FA (TOTP, SMS), passkeys/WebAuthn, session management, RBAC, rate limiting, database adapters. Actions: implement, configure, secure authentication systems. Keywords: Better Auth, authentication, authorization, OAuth, email/password, 2FA, MFA, TOTP, passkeys, WebAuthn, session management, RBAC, rate limiting, database adapter, TypeScript auth, social login, Google auth, GitHub auth, Discord auth, email verification, password reset. Use when: implementing TypeScript auth, adding OAuth providers, setting up 2FA/MFA, managing sessions, configuring RBAC, building secure auth systems.
Build websites and web applications using Telefonica's Mistica design system React components. Use this skill when writing React UI code with @telefonica/mistica, creating pages, layouts, forms, or any user interface that should follow Telefonica's design guidelines. Triggers on tasks involving Mistica components, Telefonica branding, or when the user mentions Mistica.
Provides shadcn/ui component library expertise for React applications with shadcn/cli v4, preset system, RTL support, unified radix-ui, and OKLCH theming. Use when implementing UI components, design systems, CLI workflows, or registry authoring with shadcn/ui.
React 19 performance optimization guidelines for concurrent rendering, Server Components, actions, hooks, and memoization (formerly react-19). This skill should be used when writing React 19 components, using concurrent features, or optimizing re-renders. This skill does NOT cover Next.js-specific features like App Router, next.config.js, or Next.js caching (use nextjs-16-app-router skill). For client-side form validation with React Hook Form, use react-hook-form skill.
Implement, review, debug, and refactor TanStack Start React Server Components in React 19 apps. Use when tasks mention @tanstack/react-start/rsc, renderServerComponent, createCompositeComponent, CompositeComponent, renderToReadableStream, createFromReadableStream, createFromFetch, Composite Components, React Flight streams, loader or query owned RSC caching, router.invalidate, structuralSharing: false, selective SSR, stale names like renderRsc or .validator, or migration from Next App Router RSC patterns. Do not use for generic SSR or non-TanStack RSC frameworks except brief comparison.
| name | ui-dev |
| description | Build UI components with dark theme, shadcn/ui, animations, and responsive design |
HARD LIMIT: 300 lines per file maximum. NO EXCEPTIONS.
Before writing any component:
See code-structure skill for detailed decomposition patterns.
docs/issues/ui/README.md for known pitfalls1. ALWAYS check if shadcn/ui has the component first:
mcp__context7__resolve-library-id({ libraryName: "shadcn-ui" })
mcp__context7__get-library-docs({
context7CompatibleLibraryID: "/shadcn-ui/ui",
topic: "button",
mode: "code"
})
2. If shadcn has it: use their component, don't build custom
3. If shadcn doesn't have it: build custom following their patterns
Load this skill when:
Need a new component?
├─ Is it a form element? → Check shadcn/ui first
├─ Is it a layout? → Use CSS Grid/Flexbox with responsive breakpoints
├─ Is it interactive? → Add hover states + transitions
└─ Is it loading data? → Add skeleton + loading state
Need to style something?
├─ Color → Use theme variables (--primary, --muted, etc.)
├─ Spacing → Use Tailwind scale (p-4, gap-6, etc.)
├─ Animation → Use predefined keyframes or transition-all
└─ Responsive → Mobile-first: base → md: → lg:
cd frontend && npx shadcn@latest add <name>components/<category>/<name>.tsxcd frontend && npx shadcn@latest add button card dialog input select tabs toast
Common components: button, card, dialog, dropdown-menu, input, label, select, skeleton, table, tabs, toast, tooltip
All colors use HSL CSS variables defined in frontend/app/globals.css:
| Variable | Usage | Example Class |
|---|---|---|
--background | Page background | bg-background |
--foreground | Primary text | text-foreground |
--card | Card backgrounds | bg-card |
--primary | Primary actions | bg-primary text-primary-foreground |
--secondary | Secondary elements | bg-secondary |
--muted | Muted text/backgrounds | text-muted-foreground bg-muted |
--accent | Hover states | hover:bg-accent |
--destructive | Error/danger | bg-destructive text-destructive-foreground |
--border | Borders | border-border |
| Breakpoint | Min Width | Usage |
|---|---|---|
| (default) | 0px | Mobile phones |
sm: | 640px | Large phones |
md: | 768px | Tablets |
lg: | 1024px | Laptops |
xl: | 1280px | Desktops |
2xl: | 1536px | Large screens |
// NEVER hardcode colors
<div className="bg-gray-900 text-white">
// Use theme variables
<div className="bg-background text-foreground">
// NEVER skip loading states
{data && <Component data={data} />}
// Handle all states
{loading ? <Skeleton /> : error ? <Error /> : <Component data={data} />}
// NEVER forget mobile
<div className="flex gap-8"> // Too much gap on mobile
// Responsive spacing
<div className="flex gap-4 md:gap-8">
components/intent/
├── swap-form.tsx # Swap intent form (< 200 lines)
├── limit-form.tsx # Limit order form (< 200 lines)
├── token-selector.tsx # Token selection dropdown (< 150 lines)
├── amount-input.tsx # Amount input with max button (< 100 lines)
├── price-input.tsx # Price input for limits (< 100 lines)
└── intent-status.tsx # Status display (< 100 lines)
components/shared/
├── connect-button.tsx # Wallet connect (Privy)
├── loading-spinner.tsx # Loading indicator
├── transaction-toast.tsx # Transaction status toast
└── error-display.tsx # Error message display
// BEFORE: Logic in component (BAD)
function SwapForm() {
const [inputToken, setInputToken] = useState(null)
const [outputToken, setOutputToken] = useState(null)
const [amount, setAmount] = useState('')
const [loading, setLoading] = useState(false)
useEffect(() => {
// 50 lines of quote fetching logic
}, [deps])
return (/* 200 lines of JSX */)
}
// AFTER: Logic in hook (GOOD)
// hooks/use-swap.ts
export function useSwap() {
const [inputToken, setInputToken] = useState(null)
const [outputToken, setOutputToken] = useState(null)
// ... logic
return { inputToken, outputToken, quote, submitSwap }
}
// Component is now simpler
function SwapForm() {
const { inputToken, outputToken, quote, submitSwap } = useSwap()
return (/* Clean JSX */)
}
| Task | Solution |
|---|---|
| Add component | cd frontend && npx shadcn@latest add <name> |
| Custom color | Add to globals.css + tailwind.config.ts |
| Icon | import { IconName } from 'lucide-react' |
| Icon sizes | h-4 w-4 (sm), h-5 w-5 (md), h-6 w-6 (lg) |
| Hover effect | transition-all duration-300 hover:... |
| Focus ring | focus:ring-2 focus:ring-primary focus:ring-offset-2 |