Builds accessible, responsive user interfaces using shadcn/ui components and Tailwind CSS, including theme customization, dark mode implementation, and canvas-based visual design generation.
Say it in your own words; the assistant finds this recipe by itself. Examples:
Use this skill when building React-based UIs with shadcn/ui and Tailwind CSS, implementing accessible components like dialogs and forms, or setting up dark mode and custom themes. It is also appropriate for creating responsive layouts, establishing design tokens, or generating visual posters and brand materials using canvas-based design principles.
Comprehensive skill for creating beautiful, accessible user interfaces combining shadcn/ui components, Tailwind CSS utility styling, and canvas-based visual design systems.
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)
Script paths in this skill and its references/ are relative to the directory that contains this SKILL.md, not to the project: scripts/<file> is this skill's own scripts/ folder, and ../<skill>/scripts/<file> is a sibling sub-skill installed alongside it. Build the full path from that directory (Claude Code reports it as the skill's base directory when the skill loads) and keep the working directory at the project root — the scripts read and write project files such as docs/brand-guidelines.md, assets/design-tokens.json or src/ relative to it.
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>
)
}
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";
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 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
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
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
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
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
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
Python automation for component installation and configuration generation.
Add shadcn/ui components with dependency handling:
python scripts/shadcn_add.py button card dialog
Generate tailwind.config.js with custom theme:
python scripts/tailwind_config_gen.py --colors brand:blue --fonts display:Inter
The generator refuses to create or replace a config when any sibling
tailwind.config.js, .cjs, .mjs, or .ts file already exists. Review the
reported config first, then pass --force only when the competing output is
intentional:
python scripts/tailwind_config_gen.py --colors brand:blue --force
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
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>
LICENSE.txtSKILL.mdcanvas-fonts/ArsenalSC-OFL.txtcanvas-fonts/ArsenalSC-Regular.ttfcanvas-fonts/BigShoulders-Bold.ttfcanvas-fonts/BigShoulders-OFL.txtcanvas-fonts/BigShoulders-Regular.ttfcanvas-fonts/Boldonse-OFL.txtcanvas-fonts/Boldonse-Regular.ttfcanvas-fonts/BricolageGrotesque-Bold.ttfcanvas-fonts/BricolageGrotesque-OFL.txtcanvas-fonts/BricolageGrotesque-Regular.ttfcanvas-fonts/CrimsonPro-Bold.ttfcanvas-fonts/CrimsonPro-Italic.ttfcanvas-fonts/CrimsonPro-OFL.txtcanvas-fonts/CrimsonPro-Regular.ttfcanvas-fonts/DMMono-OFL.txtcanvas-fonts/DMMono-Regular.ttfcanvas-fonts/EricaOne-OFL.txtcanvas-fonts/EricaOne-Regular.ttfcanvas-fonts/GeistMono-Bold.ttfcanvas-fonts/GeistMono-OFL.txtcanvas-fonts/GeistMono-Regular.ttfcanvas-fonts/Gloock-OFL.txtcanvas-fonts/Gloock-Regular.ttfcanvas-fonts/IBMPlexMono-Bold.ttfcanvas-fonts/IBMPlexMono-OFL.txtcanvas-fonts/IBMPlexMono-Regular.ttfcanvas-fonts/IBMPlexSerif-Bold.ttfcanvas-fonts/IBMPlexSerif-BoldItalic.ttfcanvas-fonts/IBMPlexSerif-Italic.ttfcanvas-fonts/IBMPlexSerif-Regular.ttfcanvas-fonts/InstrumentSans-Bold.ttfcanvas-fonts/InstrumentSans-BoldItalic.ttfcanvas-fonts/InstrumentSans-Italic.ttfcanvas-fonts/InstrumentSans-OFL.txtcanvas-fonts/InstrumentSans-Regular.ttfcanvas-fonts/InstrumentSerif-Italic.ttfcanvas-fonts/InstrumentSerif-Regular.ttfcanvas-fonts/Italiana-OFL.txtcanvas-fonts/Italiana-Regular.ttfcanvas-fonts/JetBrainsMono-Bold.ttfcanvas-fonts/JetBrainsMono-OFL.txtcanvas-fonts/JetBrainsMono-Regular.ttfcanvas-fonts/Jura-Light.ttfcanvas-fonts/Jura-Medium.ttfcanvas-fonts/Jura-OFL.txtcanvas-fonts/LibreBaskerville-OFL.txtcanvas-fonts/LibreBaskerville-Regular.ttfcanvas-fonts/Lora-Bold.ttfcanvas-fonts/Lora-BoldItalic.ttfcanvas-fonts/Lora-Italic.ttfcanvas-fonts/Lora-OFL.txtcanvas-fonts/Lora-Regular.ttfcanvas-fonts/NationalPark-Bold.ttfcanvas-fonts/NationalPark-OFL.txtcanvas-fonts/NationalPark-Regular.ttfcanvas-fonts/NothingYouCouldDo-OFL.txtcanvas-fonts/NothingYouCouldDo-Regular.ttfcanvas-fonts/Outfit-Bold.ttfcanvas-fonts/Outfit-OFL.txtcanvas-fonts/Outfit-Regular.ttfcanvas-fonts/PixelifySans-Medium.ttfcanvas-fonts/PixelifySans-OFL.txtcanvas-fonts/PoiretOne-OFL.txtcanvas-fonts/PoiretOne-Regular.ttfcanvas-fonts/RedHatMono-Bold.ttfcanvas-fonts/RedHatMono-OFL.txtcanvas-fonts/RedHatMono-Regular.ttfcanvas-fonts/Silkscreen-OFL.txtcanvas-fonts/Silkscreen-Regular.ttfcanvas-fonts/SmoochSans-Medium.ttfcanvas-fonts/SmoochSans-OFL.txtcanvas-fonts/Tektur-Medium.ttfcanvas-fonts/Tektur-OFL.txtcanvas-fonts/Tektur-Regular.ttfcanvas-fonts/WorkSans-Bold.ttfcanvas-fonts/WorkSans-BoldItalic.ttfcanvas-fonts/WorkSans-Italic.ttfcanvas-fonts/WorkSans-OFL.txtcanvas-fonts/WorkSans-Regular.ttfcanvas-fonts/YoungSerif-OFL.txtcanvas-fonts/YoungSerif-Regular.ttfreferences/canvas-design-system.mdreferences/shadcn-accessibility.mdreferences/shadcn-components.mdreferences/shadcn-theming.mdreferences/tailwind-customization.mdreferences/tailwind-responsive.mdreferences/tailwind-utilities.mdscripts/requirements.txtscripts/shadcn_add.pyscripts/tailwind_config_gen.pyscripts/tests/coverage-ui.jsonscripts/tests/requirements.txtscripts/tests/test_shadcn_add.pyscripts/tests/test_tailwind_config_gen.pyVendored from nextlevelbuilder/ui-ux-pro-max-skill, commit 56ea9cf174ed, path .claude/skills/ui-styling, licence MIT. The upstream licence file ships inside the skill.