add-shadcn-component

Add shadcn/ui components via pnpm dlx, then normalize generated Tailwind color classes to Scaffa theme tokens

16 stars

Best use case

add-shadcn-component is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Add shadcn/ui components via pnpm dlx, then normalize generated Tailwind color classes to Scaffa theme tokens

Teams using add-shadcn-component should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/add-shadcn-component/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/add-shadcn-component/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/add-shadcn-component/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How add-shadcn-component Compares

Feature / Agentadd-shadcn-componentStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Add shadcn/ui components via pnpm dlx, then normalize generated Tailwind color classes to Scaffa theme tokens

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Add shadcn Component

Add one or more shadcn/ui components, then replace any generated “design system” color utility classes with Scaffa’s Tailwind theme tokens.

## Usage

```
/add-shadcn-component <component...>
```

Example:

```
/add-shadcn-component button dropdown-menu dialog
```

## Prerequisites (assumed)

1. shadcn is initialized for the renderer and `src/renderer/components.json` exists (assume true; do not check).
2. The renderer theme tokens are defined in `src/renderer/styles.css` (Tailwind v4 `@theme` tokens).

If shadcn is not initialized yet, STOP and ask the user to run init first.

## What This Skill Does

1. Adds shadcn components using `pnpm dlx … add <componentList>`
2. Identifies the files that were created/modified
3. Rewrites generated Tailwind color classes to Scaffa theme tokens (surfaces/fg/border/focus/selected/etc.)
4. Runs a build to verify TypeScript + CSS compilation
5. Lands the change (commit + `bd sync` + push), respecting the repo workflow

## Instructions

You MUST follow these steps in order.

### Phase 1: Add the component(s)

1. Run shadcn from the same folder as `src/renderer/components.json`:
   ```bash
   pushd src/renderer
   ```

2. While still in `src/renderer`, add the requested components.

   Preferred (explicit) command:
   ```bash
   pnpm dlx shadcn@latest add <component...>
   ```

   If this repo’s shadcn init documented a shorter alias (e.g. `pnpm dlx add ...`), use the repo’s convention instead, but keep the semantics identical: “run shadcn add for these components”.

3. Return to the repo root:
   ```bash
   popd
   ```

4. Capture what changed:
   ```bash
   git status --porcelain
   ```

### Phase 2: Normalize generated colors to Scaffa theme tokens

Scaffa’s renderer uses Tailwind v4 theme tokens defined in `src/renderer/styles.css` (e.g. `bg-surface-panel`, `bg-surface-card`, `bg-surface-overlay`, `text-fg-muted`, `border-default`, `ring-focus`, `bg-selected`, etc).

The shadcn generator commonly emits palette tokens like `bg-background`, `text-foreground`, `border-border`, `ring-ring`, `bg-primary`, `text-muted-foreground`, etc. Those MUST be replaced with Scaffa tokens.

Prefer Scaffa’s **surface role** tokens over numeric surface levels:
- `bg-surface-app`, `bg-surface-panel`, `bg-surface-pane` *(reserved; currently aliases panel)*, `bg-surface-card`, `bg-surface-overlay`, `bg-surface-inset`
- For text/borders/rings, keep using `text-fg*`, `border-*`, `ring-focus`, etc.

#### 2.1 Required mapping (default)

Use this mapping as the baseline. Adjust only if the component semantics demand it.

- Backgrounds
  - `bg-background` → `bg-surface-app`
  - `bg-card` → `bg-surface-card`
  - `bg-popover` → `bg-surface-overlay`
  - `bg-muted` → `bg-surface-inset`
  - `bg-accent` → `bg-hover`
  - `bg-primary` → `bg-selected`
  - `bg-secondary` → `bg-surface-card`
  - `bg-destructive` → `bg-danger`

- Text
  - `text-foreground` → `text-fg`
  - `text-muted-foreground` → `text-fg-muted`
  - `text-popover-foreground` → `text-fg`
  - `text-card-foreground` → `text-fg`
  - `text-primary-foreground` → `text-selected-fg`
  - `text-secondary-foreground` → `text-fg`
  - `text-accent-foreground` → `text-fg`
  - `text-destructive-foreground` → `text-fg-inverse`
  - `text-destructive` → `text-danger`

- Borders
  - `border-border` → `border-default`
  - `border-input` → `border-default`
  - `border-ring` → `border-focus`
  - `border-destructive` → `border-danger`

- Rings / focus
  - `ring-ring` → `ring-focus`
  - `outline-ring` → `outline-focus`

  For common shadcn focus patterns:
  - `focus-visible:ring-ring` → `focus-visible:ring-focus`
  - `focus-visible:ring-offset-background` → `focus-visible:ring-offset-surface-app`

If you encounter shadcn tokens not covered above (e.g. `bg-input`, `text-primary`, etc.), prefer mapping them to the closest Scaffa semantic token from `src/renderer/styles.css` rather than introducing a new color.

#### 2.2 How to apply the mapping safely

1. Find newly added/modified component files (from `git status`).
2. Search within those files for shadcn palette tokens:
   ```bash
   rg -n \"bg-(background|card|popover|muted|accent|primary|secondary|destructive)|text-(foreground|muted-foreground|popover-foreground|card-foreground|primary-foreground|secondary-foreground|accent-foreground|destructive(-foreground)?)|border-(border|input|ring|destructive)|ring-ring|ring-offset-background|outline-ring\" <file-or-folder>
   ```
3. Replace only the **color tokens**. Do not “re-style” spacing, sizing, or layout unless necessary for compile or obvious correctness.
4. After edits, re-run the search to ensure no shadcn palette tokens remain in the touched files.

### Phase 3: Verify

Run a production build:

```bash
pnpm build
```

### Phase 4: Landing protocol

1. Stage changes:
   ```bash
   git add <files>
   ```

2. Commit code changes (do NOT include `.beads/issues.jsonl`):
   ```bash
   git commit -m \"feat(ui): add shadcn <components> (Scaffa theme)\"
   ```

3. Persist beads updates (if any) and push:
   ```bash
   git pull --rebase
   # If this session is explicitly "no beads", skip `bd sync`.
   bd sync
   git push
   git status  # MUST show up to date
   ```

## Notes / Gotchas

- This repo uses Tailwind v4 `@theme` tokens; prefer `bg-surface-*`, `text-fg*`, `border-*`, `ring-focus`, `bg-selected`, etc over shadcn’s palette tokens.
- Prefer surface roles (`bg-surface-app/panel/card/overlay/inset`) over numeric surface levels (`bg-surface-0..3`) when choosing container backgrounds.
- If a generated component requires additional tokens not in the Scaffa theme, file a ticket instead of inventing new one-off colors inside components.

Related Skills

interactive-component-creator

16
from diegosouzapw/awesome-omni-skill

Build interactive web components and artifacts. Creates interactive UI elements, visualizations, and web-based applications.

fullstory-component-wellbeing

16
from diegosouzapw/awesome-omni-skill

Expert guidance for monitoring frontend component health, performance, and rendering stability within Fullstory. Framework-agnostic patterns for React, Vue, Angular, Svelte, and React Native.

frontend-shadcn

16
from diegosouzapw/awesome-omni-skill

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.

frontend-pages-components

16
from diegosouzapw/awesome-omni-skill

Build responsive frontend pages, reusable components, layouts, and styling using modern best practices.

frontend-mobile-development-component-scaffold

16
from diegosouzapw/awesome-omni-skill

You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, s

frontend-component

16
from diegosouzapw/awesome-omni-skill

Generate React components for IntelliFill following patterns (forwardRef, CVA variants, Radix UI, TailwindCSS). Use when creating UI components, forms, or pages.

components

16
from diegosouzapw/awesome-omni-skill

React component architecture for creating composable, accessible components with data attributes. Use when creating/updating composable components, not for higher-level feature/page components.

component-fixtures

16
from diegosouzapw/awesome-omni-skill

Use when creating or updating component fixtures for screenshot testing, or when designing UI components to be fixture-friendly. Covers fixture file structure, theming, service setup, CSS scoping, async rendering, and common pitfalls.

c4-component

16
from diegosouzapw/awesome-omni-skill

Expert C4 Component-level documentation specialist. Synthesizes C4 Code-level documentation into Component-level architecture, defining component boundaries, interfaces, and relationships. Creates component diagrams and documentation. Use when synthesizing code-level documentation into logical components.

building-streamlit-custom-components-v2

16
from diegosouzapw/awesome-omni-skill

Builds bidirectional Streamlit Custom Components v2 (CCv2) using `st.components.v2.component`. Use when authoring inline HTML/CSS/JS components or packaged components (manifest `asset_dir`, js/css globs), wiring state/trigger callbacks, theming via `--st-*` CSS variables, or bundling with Vite / `component-template` v2.

add-component

16
from diegosouzapw/awesome-omni-skill

Create a reusable UI component with factory pattern, theme compatibility, and proper cleanup

ui-design-create-component

16
from diegosouzapw/awesome-omni-skill

Guided component creation with proper patterns Use when: the user asks to run the `create-component` workflow and the task requires multi-step orchestration. Do not use when: the task is small, single-step, and can be completed directly without orchestration overhead.