# Design Guidelines
## Contents
- [Overview](#overview)
- [Discovering Existing Brand Identity](#discovering-existing-brand-identity)
- [Critical Consistency Rules](#critical-consistency-rules)
- [When to Ask User Approval](#when-to-ask-user-approval)
- [New Project Setup](#new-project-setup)
- [Decision Tree](#decision-tree)
- [Common Mistakes](#common-mistakes)
## Overview
**Purpose:** Provide guardrails to maintain brand consistency when building UI components. This prevents agents from accidentally introducing inconsistent colors, fonts, or design patterns.
**Critical principle:** ALWAYS discover and use existing design tokens before creating new components. NEVER introduce new colors or fonts without user approval.
**When to apply:** Before creating any UI component or design-related change.
## Discovering Existing Brand Identity
Before implementing any component, identify existing brand colors, typography, and design patterns. AI agents can do this - focus on WHAT to look for, not detailed HOW.
### What to Look For
**Colors:**
1. **Tailwind config** (`tailwind.config.ts/js`) - Check `theme.extend.colors` or `theme.colors`
2. **CSS variables** (globals.css, app.css) - Look for `:root { --color-primary: ... }`
3. **Existing components** - Scan 2-3 components for color usage patterns
**Typography:**
1. **Tailwind config** - Check `theme.extend.fontFamily`
2. **Font imports** - Look in layout files or CSS (Next.js `next/font`, Google Fonts, local fonts)
3. **CSS variables** - Check for `--font-sans`, `--font-heading`
4. **Existing components** - Identify font usage patterns
**Other patterns:**
- Spacing scale (p-4, mb-6, etc.)
- Border radius (rounded-lg, rounded-xl)
- Shadows (shadow-md, shadow-lg)
- Interactive states (hover, focus colors)
### Detecting Tailwind Version (CRITICAL)
**ALWAYS check the Tailwind CSS version before writing utility classes.**
Tailwind v3 and v4 have different syntax, and mixing them causes errors.
**How to detect version:**
1. **Check `package.json`**: Look for `"tailwindcss": "^3.x.x"` or `"tailwindcss": "^4.x.x"`
2. **Check config file**:
- v3: Uses `tailwind.config.js/ts` with `module.exports` or `export default`
- v4: May use CSS-based config with `@import "tailwindcss"`
3. **Check existing components**: Look at class usage patterns
**Key differences:**
**Tailwind v3:**
```tsx
// v3 syntax
Content
```
**Tailwind v4:**
```tsx
// v4 may use CSS variables differently
// Check the project's existing patterns
Content
```
**Common mistake:** Using v3 syntax in v4 projects or vice versa. Always verify the version first.
### Document Discovery
Create mental inventory of:
- **Primary color(s)** and their usage
- **Font families** (sans, serif, heading, mono)
- **Common patterns** (button styles, card designs, spacing)
- **Semantic names** (primary, secondary, accent vs blue-500, red-600)
## Critical Consistency Rules
### ALWAYS Follow These Rules
✅ **NEVER use emojis in storefront UI** - Always use icons or images instead
```tsx
// ✅ CORRECT - Using icon component or image
// ❌ WRONG - Using emoji
```
**Why:** Emojis appear differently across platforms, lack professional appearance, and can cause accessibility issues. Use icon libraries (Heroicons, Lucide, Font Awesome) or SVG images instead.
✅ **USE existing design tokens** (colors, fonts, spacing from theme)
```tsx
// ✅ CORRECT - Using theme colors
// ❌ WRONG - Arbitrary colors when theme exists
```
✅ **USE existing font definitions**, not new font families
```tsx
// ✅ CORRECT - Using theme font
Welcome
// ❌ WRONG - Introducing new font
Welcome
```
✅ **MATCH patterns from existing components**
```tsx
// If existing buttons use: bg-primary px-6 py-3 rounded-lg
// New buttons should use the same pattern
```
### NEVER Do These Things
❌ **DON'T introduce new colors without user approval**
- If you need a color not in the theme, ASK first
- Don't use arbitrary values like `bg-[#FF6B6B]` when theme has colors
❌ **DON'T add new fonts without user approval**
- If current design uses Inter, don't add Montserrat without asking
- Don't use `font-['NewFont']` syntax when theme fonts exist
❌ **DON'T use hard-coded values when theme tokens exist**
- Use `bg-primary` not `bg-[#3B82F6]`
- Use `p-6` not `p-[24px]`
- Use `font-heading` not `font-['Poppins']`
❌ **DON'T create inconsistent patterns**
- If buttons use `rounded-lg`, all buttons should
- If cards use `shadow-md`, all cards should
- If hover effects use `hover:bg-primary-dark`, be consistent
## When to Ask User Approval
**ALWAYS ask before:**
### 1. Adding New Color
```
"I notice the current palette doesn't include an orange accent color.
Should I add one, or would you prefer to use the existing accent color?"
```
**Scenario:** You're building a promotional banner that needs an orange color, but theme only has blue/purple.
### 2. Adding New Font
```
"The current design uses Inter for all text. Do you want me to add
a different font for headings, or keep using Inter throughout?"
```
**Scenario:** Building a hero section and wondering if headings should use a different font.
### 3. Changing Existing Definitions
```
"Should I update the primary color to #3B82F6, or create a
new color variant?"
```
**Scenario:** Current primary is #2563EB but new design mockup shows #3B82F6.
### 4. Creating New Pattern
```
"The current components don't have a ghost button style (transparent with border).
Should I create one, or use an existing button variant?"
```
**Scenario:** Need a subtle button style that doesn't exist yet.
### DON'T Ask About
❌ Standard web dev decisions (responsive breakpoints, hover effects)
❌ Component structure or layout choices
❌ Accessibility patterns (AI agents know WCAG)
❌ Using existing theme colors/fonts in new ways
## New Project Setup
When starting a new project WITHOUT existing theme:
### Ask User These Questions
**1. Brand Colors:**
```
"What are your brand colors? Please provide:
- Primary color (main brand color)
- Secondary color (optional)
- Any specific hex codes or color preferences?"
```
**2. Font Preferences:**
```
"Do you have font preferences?
- Modern and clean (Inter, Poppins)
- Classic and professional (Merriweather, Lora)
- Specific fonts?
- Or should I choose appropriate fonts?"
```
**3. Design Style:**
```
"What design style do you prefer?
- Minimal (lots of whitespace, clean lines)
- Bold (vibrant colors, large typography)
- Professional (conservative, trust-focused)
- Modern (rounded corners, gradients, shadows)"
```
**4. Reference Sites (Optional):**
```
"Do you have 2-3 example websites you like the look of?
This helps me understand your aesthetic preferences."
```
### Setup Theme Configuration
After gathering preferences, configure Tailwind theme:
```typescript
// tailwind.config.ts
export default {
theme: {
extend: {
colors: {
primary: '#3B82F6', // User's primary color
secondary: '#8B5CF6', // User's secondary
accent: '#F59E0B', // Accent if needed
// Full scales if sophisticated design
brand: {
50: '#eff6ff',
500: '#3b82f6',
900: '#1e3a8a',
}
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
heading: ['Poppins', 'sans-serif'],
},
},
},
}
```
**Use Tailwind CSS for all new projects** - industry standard for ecommerce, highly customizable, excellent DX.
## Decision Tree
**When creating any component:**
```
1. Does a theme configuration exist?
├─ Yes → Extract colors/fonts from theme
│ Use existing tokens for new component
└─ No → Ask user for brand preferences
Create theme configuration
2. Are there similar existing components?
├─ Yes → Follow their patterns exactly
│ (spacing, colors, hover states)
└─ No → Check ANY existing components
Extract general patterns (spacing scale, hover effects)
3. Do you need a color/font not in theme?
├─ Yes → ASK user for approval before adding
│ Explain why you need it
└─ No → Proceed with existing tokens
4. Are you unsure about a design pattern?
├─ Yes → Check 2-3 existing components for guidance
│ Follow majority pattern
└─ No → Implement using theme tokens
Maintain consistency with existing components
```
## Common Mistakes
### ❌ Using Arbitrary Values When Theme Exists
**Problem:** Using `bg-[#3B82F6]` when `bg-primary` exists.
**Why it's wrong:** Bypasses theme, creates inconsistency, harder to maintain.
**Fix:** Always use semantic names from theme.
### ❌ Introducing New Colors Without Permission
**Problem:** Adding `text-orange-500` when theme doesn't have orange.
**Why it's wrong:** User may not want orange in their brand, creates color chaos.
**Fix:** Ask user first: "Should I add an orange color, or use existing accent?"
### ❌ Not Checking Existing Patterns
**Problem:** Creating buttons with `rounded-full` when all other buttons use `rounded-lg`.
**Why it's wrong:** Visual inconsistency confuses users.
**Fix:** Check 2-3 existing buttons, use same rounding.
### ❌ Adding Fonts Without Permission
**Problem:** Using `font-['Montserrat']` when theme uses Inter everywhere.
**Why it's wrong:** Fonts are brand identity - can't arbitrarily change.
**Fix:** Use existing `font-heading` or `font-sans`, or ask to add Montserrat.
### ❌ Using Inline Styles Instead of Theme
**Problem:** `style={{ backgroundColor: '#3B82F6', padding: '24px' }}`
**Why it's wrong:** Bypasses Tailwind theme, not responsive, harder to maintain.
**Fix:** Use Tailwind classes: `bg-primary p-6`
### ❌ Mixing Tailwind v3 and v4 Syntax
**Problem:** Using Tailwind v3 syntax in a v4 project, or vice versa.
**Why it's wrong:** Different versions have different configuration and syntax patterns. Mixing them causes build errors and unexpected styling behavior.
**Fix:** Check `package.json` for Tailwind version first. Look at existing components to understand the syntax patterns used in the project. Match the version-specific patterns consistently.
### ❌ Inconsistent Interactive States
**Problem:** Some buttons use `hover:bg-primary-600`, others use `hover:brightness-110`.
**Why it's wrong:** Inconsistent user experience.
**Fix:** Check existing buttons, use same hover pattern everywhere.
### ❌ Creating Theme Changes Without Approval
**Problem:** Adding new color to `tailwind.config.ts` without asking.
**Why it's wrong:** Theme changes affect entire project, need user agreement.
**Fix:** Ask first, explain rationale, get approval.
## Summary Checklist
**Before creating any component:**
- [ ] **Detected Tailwind CSS version (v3 or v4) from package.json**
- [ ] Checked for existing theme configuration (Tailwind config or CSS variables)
- [ ] Extracted existing colors and documented them
- [ ] Extracted existing fonts and documented them
- [ ] Reviewed 2-3 existing components for patterns
- [ ] Identified spacing scale, border radius, shadow patterns
- [ ] Confirmed I'm using theme tokens, not arbitrary values
- [ ] Matched hover/focus states from existing components
- [ ] Verified color contrast meets WCAG 2.1 AA (4.5:1 for text) - Use [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
- [ ] Asked user before adding any new colors or fonts
- [ ] Maintained visual consistency across all components
**This is about CONSISTENCY, not creating new designs.** Match what exists, ask before changing.