shadcn-ui-setup
Install and configure Shadcn/ui component library with Radix UI primitives, Aceternity UI effects, set up components, and manage the component registry. Use when adding Shadcn/ui to a Next.js project or installing specific UI components for Phase 2.
Install
mkdir -p .claude/skills/shadcn-ui-setup && curl -L -o skill.zip "https://mcp.directory/api/skills/download/419" && unzip -o skill.zip -d .claude/skills/shadcn-ui-setup && rm skill.zipInstalls to .claude/skills/shadcn-ui-setup
About this skill
Shadcn/ui + Aceternity UI Setup and Component Management
⚠️ MANDATORY FIRST STEP
BEFORE RUNNING ANY SETUP COMMANDS: Use Context7 MCP to fetch latest documentation for:
shadcn-ui(initialization, components)aceternity-ui(effects, installation)radix-ui(primitives)
Quick reference for installing, configuring, and using Shadcn/ui components and Aceternity UI effects in Next.js projects.
What is Shadcn/ui?
Shadcn/ui is NOT a traditional component library. It's a collection of copy-paste components built on top of Radix UI primitives. When you add a component, the actual source code is copied into your project, giving you full control.
Benefits:
- Full control over component code
- No dependency bloat
- Customizable with Tailwind CSS
- Accessible by default (Radix UI)
- Type-safe with TypeScript
What is Aceternity UI?
Aceternity UI provides stunning visual effects for landing pages and marketing sections. Like Shadcn/ui, you copy the component code into your project.
Available Effects:
BackgroundBeams- Animated beam lines for hero sectionsTextGenerateEffect- Typewriter text animationMovingBorder- Animated gradient bordersSparklesCore- Particle sparkle effectsBackgroundGradient- Animated gradient backgroundsCardHoverEffect- 3D card hover animations
Quick Start
1. Initialize Shadcn/ui
cd frontend
# Interactive setup (recommended)
npx shadcn-ui@latest init
# You'll be prompted for:
# - TypeScript: Yes
# - Style: Default
# - Base color: Slate (or your preference)
# - Global CSS: src/styles/globals.css
# - CSS variables: Yes
# - Tailwind config: tailwind.config.ts
# - Import alias: @/components
# - React Server Components: Yes
This creates:
components.json- Configuration filesrc/components/ui/- Component directorysrc/lib/utils.ts- Utility functions (cn helper)- Updates
tailwind.config.tsandglobals.css
2. Setup Aceternity UI Directory
# Create Aceternity UI directory
mkdir -p src/components/aceternity
# Install required dependencies
npm install framer-motion tailwind-merge clsx
3. Configuration File
After init, components.json looks like:
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "default",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "src/styles/globals.css",
"baseColor": "slate",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils"
}
}
Installing Components
Core Components for Phase 2
# Essential form components
npx shadcn-ui@latest add button
npx shadcn-ui@latest add input
npx shadcn-ui@latest add textarea
npx shadcn-ui@latest add label
npx shadcn-ui@latest add checkbox
npx shadcn-ui@latest add form
# Layout components
npx shadcn-ui@latest add card
npx shadcn-ui@latest add separator
# Feedback components
npx shadcn-ui@latest add dialog
npx shadcn-ui@latest add toast
npx shadcn-ui@latest add alert
npx shadcn-ui@latest add skeleton
# Navigation
npx shadcn-ui@latest add dropdown-menu
npx shadcn-ui@latest add avatar
# Optional utility components
npx shadcn-ui@latest add scroll-area
npx shadcn-ui@latest add tooltip
npx shadcn-ui@latest add badge
Install Multiple at Once
npx shadcn-ui@latest add button input textarea label checkbox form card dialog toast
Component Usage Examples
Button Component
import { Button } from '@/components/ui/button'
export function ButtonExample() {
return (
<div className="flex gap-2">
<Button>Default</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="destructive">Destructive</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="link">Link</Button>
<Button size="sm">Small</Button>
<Button size="lg">Large</Button>
<Button disabled>Disabled</Button>
</div>
)
}
Card Component
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from '@/components/ui/card'
import { Button } from '@/components/ui/button'
export function TaskCard({ task }: { task: Task }) {
return (
<Card>
<CardHeader>
<CardTitle>{task.title}</CardTitle>
<CardDescription>
Created {new Date(task.created_at).toLocaleDateString()}
</CardDescription>
</CardHeader>
<CardContent>
<p>{task.description}</p>
</CardContent>
<CardFooter className="flex justify-between">
<Button variant="outline">Edit</Button>
<Button variant="destructive">Delete</Button>
</CardFooter>
</Card>
)
}
Form with Input and Validation
'use client'
import { useForm } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import * as z from 'zod'
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@/components/ui/form'
import { Input } from '@/components/ui/input'
import { Textarea } from '@/components/ui/textarea'
import { Button } from '@/components/ui/button'
const taskSchema = z.object({
title: z.string().min(1, 'Title is required').max(200),
description: z.string().max(1000).optional(),
})
type TaskFormValues = z.infer<typeof taskSchema>
export function TaskForm({ onSubmit }: { onSubmit: (data: TaskFormValues) => void }) {
const form = useForm<TaskFormValues>({
resolver: zodResolver(taskSchema),
defaultValues: {
title: '',
description: '',
},
})
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
<FormField
control={form.control}
name="title"
render={({ field }) => (
<FormItem>
<FormLabel>Title</FormLabel>
<FormControl>
<Input placeholder="Enter task title" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="description"
render={({ field }) => (
<FormItem>
<FormLabel>Description</FormLabel>
<FormControl>
<Textarea placeholder="Enter task description" {...field} />
</FormControl>
<FormDescription>
Optional description for your task
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<Button type="submit">Create Task</Button>
</form>
</Form>
)
}
Dialog (Modal) Component
'use client'
import { useState } from 'react'
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@/components/ui/dialog'
import { Button } from '@/components/ui/button'
import { TaskForm } from './task-form'
export function CreateTaskDialog() {
const [open, setOpen] = useState(false)
const handleSubmit = async (data: TaskFormValues) => {
// Create task
await createTask(data)
setOpen(false)
}
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button>Create Task</Button>
</DialogTrigger>
<DialogContent className="sm:max-w-[425px]">
<DialogHeader>
<DialogTitle>Create New Task</DialogTitle>
<DialogDescription>
Add a new task to your todo list
</DialogDescription>
</DialogHeader>
<TaskForm onSubmit={handleSubmit} />
</DialogContent>
</Dialog>
)
}
Toast Notifications
First, set up the Toaster in your root layout:
// app/layout.tsx
import { Toaster } from '@/components/ui/toaster'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
{children}
<Toaster />
</body>
</html>
)
}
Then use the toast hook:
'use client'
import { useToast } from '@/hooks/use-toast'
import { Button } from '@/components/ui/button'
export function TaskActions() {
const { toast } = useToast()
const handleDelete = async () => {
try {
await deleteTask(taskId)
toast({
title: 'Task deleted',
description: 'Your task has been successfully deleted',
})
} catch (error) {
toast({
variant: 'destructive',
title: 'Error',
description: 'Failed to delete task. Please try again.',
})
}
}
return <Button variant="destructive" onClick={handleDelete}>Delete</Button>
}
Checkbox Component
'use client'
import { Checkbox } from '@/components/ui/checkbox'
import { Label } from '@/components/ui/label'
export function TaskItem({ task }: { task: Task }) {
const [isCompleted, setIsCompleted] = useState(task.completed)
const handleToggle = async (checked: boolean) => {
setIsCompleted(checked)
await toggleTask(task.id)
}
return (
<div className="flex items-center space-x-3">
<Checkbox
id={`task-${task.id}`}
checked={isCompleted}
onCheckedChange={handleToggle}
/>
<Label
htmlFor={`task-${task.id}`}
className={isCompleted ? 'line-through text-muted-foreground' : ''}
>
{task.title}
</Label>
</div>
)
}
Customizing Components
Modifying Existing Components
All component source code is in src/components/ui/. You can edit directly:
// src/components/ui/button.tsx
import * as React from 'react'
import { cva, type VariantProps } from 'class-variance-authority'
const buttonVariants = cva(
'inline-flex items-center just
---
*Content truncated.*
You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
pdf-to-markdown
aliceisjustplaying
Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.
Related MCP Servers
Browse all serversAccess shadcn/ui v4 components, blocks, and demos for rapid React UI library development. Seamless integration and sourc
Explore Magic UI, a React UI library offering structured component access, code suggestions, and installation guides for
Browse, retrieve, and install e-commerce React UI components from Stackzero Labs’ react component library. Easy integrat
Create modern React UI components instantly with Magic AI Agent. Integrates with top IDEs for fast, stunning design and
MCP Installer simplifies dynamic installation and configuration of additional MCP servers. Get started easily with MCP I
Explore MCP-UI Widgets, a React UI library offering timers, stopwatches, and unit converters for dynamic, customizable R
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.