npx skills add ...
npx skills add laguagu/claude-code-nextjs-skills --skill nextjs-shadcn
Creates Next.js frontends with shadcn/ui. Use when building React UIs, components, pages, or applications with shadcn, Tailwind, or modern frontend patterns. Also use when the user asks to create a new Next.js project, add UI components, style pages, or build any web interface — even if they don't mention shadcn explicitly.
npx skills add laguagu/claude-code-nextjs-skills --skill nextjs-shadcn
Build distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics.
globals.css, never hardcode colorsThose four are the summary, not the method. Load frontend-design before
the first component of a new view, not after the result already looks generic:
typography, palette and the one element the page spends its boldness on are
create-time decisions, and retrofitting them costs more than making them.
Then check the built view in a browser rather than from a screenshot — read tap target sizes, contrast and overflow out of the DOM, because a screenshot cannot tell you a computed style and may not even have rendered.
--base selects the primitive library: base (Base UI, the default since July
2026), radix (projects already on Radix — still fully supported, not
deprecated), or aria (React Aria). The same component has different props per
base — Base UI composes with render={<Link href="/" />} where Radix uses
asChild — and the docs are base-scoped (/docs/components/base/sidebar vs
/docs/components/radix/sidebar).
For a custom design system, generate a preset code in shadcn/create and apply it:
Run these instead of writing component code from memory. See references/shadcn-platform.md for the full CLI surface, typeset, and the shimmer/scroll-fade utilities.
"use client" only at leaf components (smallest boundary)childrenNever use relative paths (../../lib/utils). Default to the @/ alias
(@/lib/utils) in new projects. In an existing project, read components.json
and follow the alias style already configured — shadcn also supports Node
package imports (#components/ui/button). Never mix both styles.
CRITICAL RULE:
'use cache' functions"use cache" (and cacheTag/cacheLife/updateTag) requires the Cache Components opt-in flag — Next.js 16 does not enable it by default:
Use proxy.ts for request interception (replaces middleware). Place at project root:
Next.js 16+ ships an MCP endpoint at /_next/mcp that exposes the dev server's
internals to coding agents. When working in a Next.js 16 project, recommend the
user add next-devtools-mcp to .mcp.json:
Tools it provides (when dev server is running):
get_errors — live build/runtime/type errors (esp. helpful for hydration mismatches)get_logs — dev log file path (browser console + server output)get_routes — all entry-point routes grouped by router typeget_page_metadata — route, components, rendering details for a specific pageget_project_metadata — project structure + dev server URLget_server_action_by_id — locate Server Action source from its hashed IDget_compilation_issues / compile_route — bundler warnings for the project,
or compile one route on demand without requesting it (Turbopack only)It also acts as a docs gateway: it points at the version-accurate docs shipped
inside node_modules/next/dist/docs/, which beat any remembered API shape.
Use these instead of asking the user to copy-paste error messages. Reference: nextjs.org/docs/app/guides/mcp.
Don't hand-roll CSS for these — shadcn ships them:
--typeset-size, --typeset-leading, --typeset-flow), one
preset per context. Streaming-stable: new blocks don't restyle earlier ones.
className="shimmer". Use
Skeleton only for placeholders with a known shape; don't stack both.className="scroll-fade overflow-y-auto".Details and the full class tables: references/shadcn-platform.md.
bunx --bun skills add shadcn/ui - live project config + CLI/registry reference. Install alongside this skill; it covers CLI mechanics, this one covers conventions.shadcn docs <component>Always use bun in new projects, never npm or npx:
bun install (not npm install)bun add (not npm install package)bunx --bun (not npx)In an existing repo, respect the project's packageManager field and lockfile instead of switching to bun.