Apply Stave's desktop-first design system when a task changes UI, layout, theme, dialogs, sidebars, empty states, settings, prompt input, or other visual UX in this repo. Use for prompts like "디자인", "UI", "redesign", "polish", "sidebar", "dialog", "settings", or whenever a new interface pattern is introduced. Always use existing shadcn components and the radix-vega preset first — never hand-roll a control that shadcn already provides.
72
88%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Repository-local design skill for Stave's user-facing surfaces.
Design for an AI coding workspace first: strong information hierarchy, fast scanning, compact but readable density, consistent light and dark themes, and low-friction keyboard-friendly interaction.
The goal is a calm, sharp desktop workspace built on shadcn/ui components and CSS custom-property tokens. Every control, input, overlay, and feedback surface should be assembled from these building blocks before considering anything custom.
components.json — current shadcn preset (radix-vega, default-translucent, subtle)src/components/ui/ — all available shadcn primitives (see inventory below)src/components/ui/index.ts — public re-export barrel; new components must be added heresrc/globals.css — tokens, fonts, radius, motion, and existing liquid-glass utilitiessrc/components/layout/ or src/components/session/src/components/layout/settings-dialog-sections.tsx when theme tokens, settings surfaces, or preset-facing copy is involveddocs/ui/shadcn-preset.md when applying or changing shadcn preset behaviorThe project uses the radix-vega style with default-translucent menu color and subtle accent. The following components are already generated and available under src/components/ui/:
| Category | Components |
|---|---|
| Layout | Accordion, Card, Resizable (Panel, PanelGroup, Handle) |
| Input | Button, Input, InputGroup, Textarea, Select, Switch, Slider, Toggle, Calendar |
| Overlay | Dialog, Drawer, Popover, DropdownMenu, ContextMenu, Tooltip, Command (palette) |
| Display | Badge, Table, Kbd, Empty (state), WaveIndicator |
| Feedback | Sonner (toast) |
Before writing any interactive UI element, check this inventory:
Switch, not a custom button toggle.Calendar inside a Popover, not <input type="date">.Select (single) or Command (searchable/multi).Dialog or Drawer.DropdownMenu or ContextMenu.Button with the appropriate variant and size.Empty component family.Kbd / KbdGroup.toast from Sonner.Never hand-roll an <input>, <select>, <button>, or modal wrapper when a shadcn component already exists. If a needed component is missing (e.g. Checkbox, RadioGroup, Tabs), generate it via:
bunx --bun shadcn@latest add <component> --yesThen add the export to src/components/ui/index.ts and verify import paths use @/ aliases.
className overrides, not by editing the generated component source.variant and size props where available instead of inventing new visual tiers.size="sm" or h-7/h-8 height classes over arbitrary CSS.--foreground, --muted, --primary, etc.) over raw hex, rgba, or one-off gradients.src/globals.css, including the green primary accent and current neutral/editor/sidebar surfaces..sidebar-liquid-glass, .sidebar-liquid-panel, translucent cards, and supports-backdrop-filter:backdrop-blur-xl popovers before inventing new ones.focus-visible styles.src/globals.css.Empty component family for structured empty states.bunx --bun shadcn@latest add <name> --yes, add the export to index.ts, and reconcile @/ import paths.<select>, <input type="date">, toggle button, or modal when a shadcn component existsclassName overrides instead@/components/ui (barrel) or @/components/ui/<name>?index.ts?e275ad5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.