shadcn/ui + Tailwind CSS Skill
React component library skill combining shadcn/ui components, Radix UI primitives, and Tailwind CSS utility styling.
Reference
- •shadcn/ui: https://ui.shadcn.com/llms.txt
- •Tailwind CSS: https://tailwindcss.com/docs
When to Use This Skill
Use when:
- •Building UI with React-based frameworks (Next.js, Vite, Remix, Astro)
- •Implementing accessible components (dialogs, forms, tables, navigation)
- •Styling with utility-first CSS approach
- •Creating responsive, mobile-first layouts
- •Implementing dark mode and theme customization
- •Building design systems with consistent tokens
- •Generating visual designs, posters, or brand materials
- •Rapid prototyping with immediate visual feedback
- •Adding complex UI patterns (data tables, charts, command palettes)
Core Stack
Component Layer: shadcn/ui
- •Pre-built accessible components via Radix UI primitives
- •Copy-paste distribution model (components live in your codebase)
- •TypeScript-first with full type safety
- •Composable primitives for complex UIs
- •CLI-based installation and management
Styling Layer: Tailwind CSS
- •Utility-first CSS framework
- •Build-time processing with zero runtime overhead
- •Mobile-first responsive design
- •Consistent design tokens (colors, spacing, typography)
- •Automatic dead code elimination
Visual Design Layer: Canvas
- •Museum-quality visual compositions
- •Philosophy-driven design approach
- •Sophisticated visual communication
- •Minimal text, maximum visual impact
- •Systematic patterns and refined aesthetics
Quick Start
Component + Styling Setup
Install shadcn/ui with Tailwind:
npx shadcn@latest init
CLI prompts for framework, TypeScript, paths, and theme preferences. This configures both shadcn/ui and Tailwind CSS.
Add components:
npx shadcn@latest add button card dialog form
Use components with utility styling:
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
export function Dashboard() {
return (
<div className="container mx-auto p-6 grid gap-6 md:grid-cols-2 lg:grid-cols-3">
<Card className="hover:shadow-lg transition-shadow">
<CardHeader>
<CardTitle className="text-2xl font-bold">Analytics</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-muted-foreground">View your metrics</p>
<Button variant="default" className="w-full">
View Details
</Button>
</CardContent>
</Card>
</div>
)
}
Alternative: Tailwind-Only Setup
Vite projects:
npm install -D tailwindcss @tailwindcss/vite
// vite.config.ts
import tailwindcss from '@tailwindcss/vite'
export default { plugins: [tailwindcss()] }
/* src/index.css */ @import "tailwindcss";
Component Library Guide
Comprehensive component catalog with usage patterns, installation, and composition examples.
See: references/shadcn-components.md
Covers:
- •Form & input components (Button, Input, Select, Checkbox, Date Picker, Form validation)
- •Layout & navigation (Card, Tabs, Accordion, Navigation Menu)
- •Overlays & dialogs (Dialog, Drawer, Popover, Toast, Command)
- •Feedback & status (Alert, Progress, Skeleton)
- •Display components (Table, Data Table, Avatar, Badge)
Theme & Customization
Theme configuration, CSS variables, dark mode implementation, and component customization.
See: references/shadcn-theming.md
Covers:
- •Dark mode setup with next-themes
- •CSS variable system
- •Color customization and palettes
- •Component variant customization
- •Theme toggle implementation
Accessibility Patterns
ARIA patterns, keyboard navigation, screen reader support, and accessible component usage.
See: references/shadcn-accessibility.md
Covers:
- •Radix UI accessibility features
- •Keyboard navigation patterns
- •Focus management
- •Screen reader announcements
- •Form validation accessibility
Tailwind Utilities
Core utility classes for layout, spacing, typography, colors, borders, and shadows.
See: references/tailwind-utilities.md
Covers:
- •Layout utilities (Flexbox, Grid, positioning)
- •Spacing system (padding, margin, gap)
- •Typography (font sizes, weights, alignment, line height)
- •Colors and backgrounds
- •Borders and shadows
- •Arbitrary values for custom styling
Responsive Design
Mobile-first breakpoints, responsive utilities, and adaptive layouts.
See: references/tailwind-responsive.md
Covers:
- •Mobile-first approach
- •Breakpoint system (sm, md, lg, xl, 2xl)
- •Responsive utility patterns
- •Container queries
- •Max-width queries
- •Custom breakpoints
Tailwind Customization
Config file structure, custom utilities, plugins, and theme extensions.
See: references/tailwind-customization.md
Covers:
- •@theme directive for custom tokens
- •Custom colors and fonts
- •Spacing and breakpoint extensions
- •Custom utility creation
- •Custom variants
- •Layer organization (@layer base, components, utilities)
- •Apply directive for component extraction
Visual Design System
Canvas-based design philosophy, visual communication principles, and sophisticated compositions.
See: references/canvas-design-system.md
Covers:
- •Design philosophy approach
- •Visual communication over text
- •Systematic patterns and composition
- •Color, form, and spatial design
- •Minimal text integration
- •Museum-quality execution
- •Multi-page design systems
Utility Scripts
Python automation for component installation and configuration generation.
shadcn_add.py
Add shadcn/ui components with dependency handling:
python scripts/shadcn_add.py button card dialog
tailwind_config_gen.py
Generate tailwind.config.js with custom theme:
python scripts/tailwind_config_gen.py --colors brand:blue --fonts display:Inter
Best Practices
- •Component Composition: Build complex UIs from simple, composable primitives
- •Utility-First Styling: Use Tailwind classes directly; extract components only for true repetition
- •Mobile-First Responsive: Start with mobile styles, layer responsive variants
- •Accessibility-First: Leverage Radix UI primitives, add focus states, use semantic HTML
- •Design Tokens: Use consistent spacing scale, color palettes, typography system
- •Dark Mode Consistency: Apply dark variants to all themed elements
- •Performance: Leverage automatic CSS purging, avoid dynamic class names
- •TypeScript: Use full type safety for better DX
- •Visual Hierarchy: Let composition guide attention, use spacing and color intentionally
- •Expert Craftsmanship: Every detail matters - treat UI as a craft
Reference Navigation
Component Library
- •
references/shadcn-components.md- Complete component catalog - •
references/shadcn-theming.md- Theming and customization - •
references/shadcn-accessibility.md- Accessibility patterns
Styling System
- •
references/tailwind-utilities.md- Core utility classes - •
references/tailwind-responsive.md- Responsive design - •
references/tailwind-customization.md- Configuration and extensions
Visual Design
- •
references/canvas-design-system.md- Design philosophy and canvas workflows
Automation
- •
scripts/shadcn_add.py- Component installation - •
scripts/tailwind_config_gen.py- Config generation
Common Patterns
Form with validation:
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"
import { Form, FormField, FormItem, FormLabel, FormControl, FormMessage } from "@/components/ui/form"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
const schema = z.object({
email: z.string().email(),
password: z.string().min(8)
})
export function LoginForm() {
const form = useForm({
resolver: zodResolver(schema),
defaultValues: { email: "", password: "" }
})
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(console.log)} className="space-y-6">
<FormField control={form.control} name="email" render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input type="email" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)} />
<Button type="submit" className="w-full">Sign In</Button>
</form>
</Form>
)
}
Responsive layout with dark mode:
<div className="min-h-screen bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 py-8">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Card className="bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700">
<CardContent className="p-6">
<h3 className="text-xl font-semibold text-gray-900 dark:text-white">
Content
</h3>
</CardContent>
</Card>
</div>
</div>
</div>
Resources
- •shadcn/ui Docs: https://ui.shadcn.com
- •Tailwind CSS Docs: https://tailwindcss.com
- •Radix UI: https://radix-ui.com
- •Tailwind UI: https://tailwindui.com
- •Headless UI: https://headlessui.com
- •v0 (AI UI Generator): https://v0.dev