From jarvus-skills
Frontend development using Vite + React + shadcn/ui + Tailwind CSS + React Router v7. Use when creating new frontend projects, adding UI components, implementing routing, styling with Tailwind, or working with shadcn/ui component library.
npx claudepluginhub jarvusinnovations/agent-skills --plugin jarvus-skillsThis skill uses the workspace's default tool permissions.
Modern React frontend stack:
Sets up shadcn/ui with Tailwind CSS v4 configuration for Next.js/React projects. Installs dependencies, initializes themes, adds UI components, and supports App/Pages Router or migrations from v3.
Guides editing shadcn/ui code: components.json, cn() utility, Radix primitives, add workflows, dialogs, forms, data tables, command palettes, Tailwind composition. Enforces asChild SPA routing, semantic colors, atomic components.
Guides installation, configuration, theming, and usage of shadcn/ui React components with Tailwind CSS and Radix/Base UI primitives. Covers CLI commands, components.json, dark mode, forms, registry, and setups for Next.js, Vite, Astro, Remix.
Share bugs, ideas, or general feedback.
Modern React frontend stack:
@tailwindcss/vite plugin)Use asdf to manage Node.js versions:
# Install Node.js plugin (one-time)
asdf plugin add nodejs
# Set project Node.js version
asdf set nodejs latest:22
This creates a .tool-versions file in the project root that ensures consistent Node.js versions across the team.
| File | When to Use |
|---|---|
| setup-guide.md | Starting a new project from scratch |
| patterns.md | Implementing features, understanding architecture |
| maplibre.md | Working with MapLibre GL JS maps |
| mcp-tools.md | Looking up docs, adding components via MCP |
# Add shadcn component
npx shadcn@latest add <component> -y
# Dev server
npm run dev
# Type check
npm run type-check
// React Router v7 - use 'react-router' NOT 'react-router-dom'
import { Routes, Route, Link, useLocation, useSearchParams } from 'react-router'
// Path alias - @/ maps to src/
import { Button } from '@/components/ui/button'
import { cn } from '@/lib/utils'
import { cn } from '@/lib/utils'
<div className={cn(
"base-classes",
condition && "conditional-classes",
variant === "primary" && "variant-classes"
)} />
# Layout
npx shadcn@latest add sidebar card separator -y
# Forms
npx shadcn@latest add button input form select checkbox -y
# Feedback
npx shadcn@latest add dialog alert toast -y
# Navigation
npx shadcn@latest add dropdown-menu tabs tooltip -y
src/
├── components/
│ ├── ui/ # shadcn/ui components (auto-generated)
│ ├── AppShell.tsx # Main layout with header
│ └── AppSidebar.tsx
├── pages/ # Route page components
├── hooks/ # Custom hooks
├── lib/
│ └── utils.ts # cn() helper
├── App.tsx # Route definitions
├── main.tsx # Entry point with BrowserRouter
└── index.css # Tailwind + shadcn theme
// Common utility patterns
"flex items-center gap-4" // Flexbox with gap
"bg-muted text-muted-foreground" // Muted backgrounds
"border-b bg-background" // Borders and backgrounds
"h-screen overflow-auto" // Full height scrolling
"space-y-4" // Vertical spacing
npm install <pkg> not manual package.json editsnpx shadcn@latest add <component> -yreact-router NOT react-router-dom