From frontend
Expert guidance for building with shadcn/ui -- component composition, registry system, form patterns, data tables, sidebar navigation, theming, and Tailwind v4 migration. Trigger when working with shadcn/ui components, adding shadcn to a project, composing complex UI from shadcn primitives, or customizing shadcn themes. Also trigger on mentions of "shadcn", "shadcn/ui", "shadcn components", "shadcn registry", or "shadcn blocks". TRIGGER WHEN: working with shadcn/ui components, adding shadcn to a project, composing complex UI from shadcn primitives, or customizing shadcn themes DO NOT TRIGGER WHEN: the task is outside the specific scope of this component.
npx claudepluginhub acaprino/alfio-claude-plugins --plugin frontendThis skill uses the workspace's default tool permissions.
Guidance for building production UIs with shadcn/ui. Covers component composition, advanced patterns, registry authoring, theming, and integration with the broader frontend ecosystem.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
Guidance for building production UIs with shadcn/ui. Covers component composition, advanced patterns, registry authoring, theming, and integration with the broader frontend ecosystem.
Docs: https://ui.shadcn.com/docs
shadcn/ui is NOT a component library -- it is a collection of beautifully designed, accessible components you copy into your project and own. Five pillars:
data-slot attributes and structured props for LLM toolingnpx shadcn@latest init)npx shadcn@latest add)This skill works alongside the other frontend skills. Route to them when appropriate:
| Need | Route to |
|---|---|
| CSS architecture, modern CSS features, responsive patterns | web-designer |
| Page layout composition, grid systems, breakpoint strategy | ui-layout-designer agent |
| Animations, micro-interactions, visual polish | web-designer agent |
| UX flows, design tokens, component hierarchy | web-designer agent |
| Distinctive visual identity, avoiding generic AI aesthetics | frontend-design |
| React 19 patterns, Server Components, performance | react-performance-optimizer agent |
This skill handles shadcn-specific concerns: which components to use, how to compose them, registry patterns, form/table/sidebar architecture, and shadcn theming.
This skill contains reference patterns for the most complex components (Data Table, Form, Sidebar, Dialog). For any other component's API, props, or usage -- spawn a quick-searcher agent to fetch the docs in real time.
All component docs follow a predictable URL scheme:
| Resource | URL pattern |
|---|---|
| Component docs | https://ui.shadcn.com/docs/components/{name} |
| Form integrations | https://ui.shadcn.com/docs/forms/{library} |
| Blocks | https://ui.shadcn.com/blocks |
| Registry | https://ui.shadcn.com/docs/registry |
| Themes | https://ui.shadcn.com/themes |
| CLI reference | https://ui.shadcn.com/docs/cli |
| Tailwind v4 | https://ui.shadcn.com/docs/tailwind-v4 |
| Changelog | https://ui.shadcn.com/docs/changelog |
When you need API details for a specific component (e.g., Combobox, Toast, Sheet):
Spawn a research:quick-searcher agent with this prompt template:
Fetch https://ui.shadcn.com/docs/components/{component-name} and extract:
- Sub-components and their props
- Required accessibility attributes
- Install command
- Key usage patterns and code examples
Return structured findings.
For Radix primitive API details (inherited by shadcn), fetch:
https://www.radix-ui.com/primitives/docs/components/{component-name}
For TanStack Table API (used by Data Table), fetch:
https://tanstack.com/table/latest/docs/introduction
For quick reference when choosing components:
| Category | Components |
|---|---|
| Layout | Sidebar, Resizable, Collapsible, Separator, Aspect Ratio |
| Overlay | Dialog, Sheet, Drawer, Alert Dialog, Popover, Tooltip, Hover Card |
| Form | Input, Textarea, Select, Checkbox, Radio Group, Switch, Slider, Toggle, Toggle Group, Date Picker, Combobox |
| Data Display | Table, Data Table, Card, Badge, Avatar, Calendar |
| Feedback | Alert, Toast (Sonner), Progress, Skeleton |
| Navigation | Navigation Menu, Breadcrumb, Pagination, Tabs, Command, Menubar, Dropdown Menu, Context Menu |
| Typography | Label, Separator |
npx shadcn@latest init
# Choose: New York style (default, "default" style is deprecated)
# Choose: Tailwind v4 + React 19 (current default)
npx shadcn@latest add button dialog form sidebar data-table
# Or add a block:
npx shadcn@latest add dashboard-01
shadcn add --dry-run dialog # preview changes without writing
shadcn add --diff dialog # show diff of what would change
shadcn info # show installed components, framework, CSS vars
shadcn docs dialog # fetch component docs from CLI
shadcn init --template next # scaffold with framework template
shadcn components are composable primitives. Build complex UI by nesting them.
<Dialog>
<DialogTrigger asChild>
<Button variant="outline">Edit Profile</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Edit Profile</DialogTitle>
<DialogDescription>Update your information.</DialogDescription>
</DialogHeader>
{/* your content */}
</DialogContent>
</Dialog>
Use asChild to delegate rendering to a child element -- avoids extra DOM nodes and lets you use router Links, custom buttons, etc.
<DialogTrigger asChild>
<Link href="/settings">Open Settings</Link>
</DialogTrigger>
import { cn } from "@/lib/utils"
<div className={cn(
"rounded-lg border p-4",
isActive && "border-primary bg-primary/5",
className
)} />
import { cva, type VariantProps } from "class-variance-authority"
const badgeVariants = cva("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs", {
variants: {
variant: {
default: "bg-primary text-primary-foreground",
destructive: "bg-destructive text-destructive-foreground",
outline: "border text-foreground",
},
},
defaultVariants: { variant: "default" },
})
3-file architecture with TanStack Table. See references/advanced-patterns.md for full column definition, sorting, filtering, pagination, and row selection patterns.
columns.tsx - column definitions (ColumnDef<TData>[])data-table.tsx - table wrapper with useReactTablepage.tsx - server component for data fetchingReact Hook Form + Zod resolver. See references/advanced-patterns.md for field patterns, dynamic arrays, and validation modes.
const form = useForm<z.infer<typeof schema>>({
resolver: zodResolver(schema),
defaultValues: { title: "" }
})
Provider-based with SidebarProvider. Supports collapsible="icon" and collapsible="offcanvas". See references/advanced-patterns.md for nested navigation, mobile responsive, and useSidebar() hook.
New projects use OKLCH for perceptual color uniformity. Colors defined as CSS variables in globals.css:
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
/* ... */
}
Toggle via class on <html>. All shadcn components respect dark: variants automatically.
globals.css for global theme changescn() for per-instance overridesdata-slot attributes for targeted CSS overrides without class specificity fightsSee references/migration-guide.md for the step-by-step migration from Tailwind v3 to v4, including:
npx @tailwindcss/upgrade@next codemodtailwindcss-animate to tw-animate-css)@theme inlineforwardRef removal for React 19data-slot adoptionBuild and distribute your own component sets. See references/registry-guide.md for:
registry.json schema and item typesregistry:base for full design systemsSee references/pitfalls.md for detailed problems and fixes:
shadcn add to refresh componentsforwardRef breakage in React 19"use client""use client" (they reference React components)"use client" boundary as low in the tree as possible