Create a project-specific UI component library and design tokens. Builds on top of shadcn/ui or similar component primitives, customized to match the product's aesthetic vision. Produces reusable components that all developers import for visual consistency. Use when the team needs to establish the visual language, create reusable UI components, define colors/typography/spacing, or when someone says "make it look good", "set up the design system", "create reusable components", or "define the aesthetic".
Resources
1Install
npx skillscat add biruk741/cc-plugins/design-system Install via the SkillsCat registry.
Design System Skill
Read .hackathon/IDEA-FINAL.md for product context and .hackathon/STACK.md for technical constraints.
Hard gate: Scaffold must be complete (the UI package must exist at packages/ui/).
Philosophy
The design system has one job: make everything look intentionally designed and consistent without anyone spending time on per-page styling decisions. In a hackathon, the difference between "student project" and "production app" is usually:
- Consistent spacing and typography
- A coherent color palette
- 5-8 well-designed reusable components
- Micro-interactions that signal quality (hover states, transitions, loading states)
We are NOT building a comprehensive design system. We're building the minimum set of tokens and components that make everything look like it belongs together.
Anti-Patterns to Avoid
Read references/anti-patterns.md for a detailed list. The short version:
- No purple-gradient-on-white (the universal AI app look)
- No Inter/Roboto/system fonts as the only typography
- No generic shadcn defaults without customization
- No pure white backgrounds (add warmth or coolness)
- No identical-looking cards everywhere
Process
Step 1: Aesthetic Direction
Based on the product idea, decide on an aesthetic direction. Ask the team:
- What feeling should the product evoke? (Professional trust? Playful speed? Technical precision?)
- What similar products do you admire the look of?
- Light mode, dark mode, or adaptive?
Capture this in .hackathon/design/DESIGN-BRIEF.md.
Step 2: Design Tokens
Define in packages/ui/src/tokens/:
Colors — A cohesive palette:
- Primary (brand color + shades)
- Secondary (accent color)
- Neutral (grays for text, borders, backgrounds)
- Semantic (success, warning, error, info)
- Surface (background colors — NOT pure white)
Typography:
- Display font (for headings — something distinctive via Google Fonts)
- Body font (for readable text — can be more standard but not generic)
- Mono font (for any code/data display)
- Size scale (sm, base, lg, xl, 2xl, 3xl)
Spacing: Use Tailwind's default scale but define semantic aliases:
space-tight: 0.5remspace-base: 1remspace-loose: 1.5remspace-section: 3rem
Radii, Shadows, Transitions: Pick one consistent set and stick to it.
Step 3: Core Components
Build these in packages/ui/src/components/. Each component should:
- Accept reasonable props (variant, size, disabled, etc.)
- Use the design tokens for all visual properties
- Include hover/focus/active states
- Include a loading state where applicable
- Be exported from
packages/ui/src/index.ts
Required components (minimum set):
Button— primary, secondary, ghost, danger variants; sizes sm/md/lgCard— with optional header, body, footer sectionsInput— text input with label, helper text, error stateBadge— for status indicatorsLayout— page wrapper with consistent padding and max-widthLoadingSpinner— consistent loading indicatorEmptyState— for when there's no data yetFileUpload— drag-and-drop zone (if relevant to the project)
Optional but impactful:
Toast/ notification systemModal/ dialogProgressBarDataTable(if showing tabular data)
Step 4: Tailwind Configuration
Update the frontend's tailwind.config.ts to use the design tokens:
- Custom colors mapped to the palette
- Custom fonts added
- Any custom utilities needed
Step 5: Demo Page
Create a simple page (could be at /design-system in the frontend app, removed before demo) that shows all components in various states. This serves as:
- Visual verification that everything looks good together
- A reference for developers using the components
- A conversation piece if the team wants to adjust the aesthetic
Output
packages/ui/fully populated with components and tokens- Updated
tailwind.config.tsin the frontend app .hackathon/design/DESIGN-BRIEF.md— aesthetic direction.hackathon/design/colors.md— color palette reference.hackathon/design/components.md— component inventory and usage- Demo page in the frontend app
- Update
STATE.md, log to changelog