| name | add-shadcn-component |
| description | Add shadcn/ui components via pnpm dlx, then normalize generated Tailwind color classes to Scaffa theme tokens |
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)
- shadcn is initialized for the renderer and
src/renderer/components.json exists (assume true; do not check).
- 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
- Adds shadcn components using
pnpm dlx … add <componentList>
- Identifies the files that were created/modified
- Rewrites generated Tailwind color classes to Scaffa theme tokens (surfaces/fg/border/focus/selected/etc.)
- Runs a build to verify TypeScript + CSS compilation
- 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)
-
Run shadcn from the same folder as src/renderer/components.json:
pushd src/renderer
-
While still in src/renderer, add the requested components.
Preferred (explicit) command:
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”.
-
Return to the repo root:
popd
-
Capture what changed:
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.
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
- Find newly added/modified component files (from
git status).
- Search within those files for shadcn palette tokens:
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>
- Replace only the color tokens. Do not “re-style” spacing, sizing, or layout unless necessary for compile or obvious correctness.
- After edits, re-run the search to ensure no shadcn palette tokens remain in the touched files.
Phase 3: Verify
Run a production build:
pnpm build
Phase 4: Landing protocol
-
Stage changes:
git add <files>
-
Commit code changes (do NOT include .beads/issues.jsonl):
git commit -m \"feat(ui): add shadcn <components> (Scaffa theme)\"
-
Persist beads updates (if any) and push:
git pull --rebase
bd sync
git push
git status
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.