516 lines
13 KiB
Markdown
516 lines
13 KiB
Markdown
# Tutorial 09: Design System
|
|
|
|
**Extract patterns from your pages - turn one-off designs into reusable superpowers**
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
You've designed several pages. You notice you keep recreating the same buttons, cards, and form fields. There's a better way.
|
|
|
|
**Create a Design System** - extract reusable components once, use them everywhere.
|
|
|
|
**Your superpower:** Freya helps you identify patterns, document components, and create a library that scales your design decisions across the entire product.
|
|
|
|
**Time:** 45-60 minutes
|
|
**Prerequisites:** Module 08 completed (At least 2-3 pages designed)
|
|
**What you'll create:** Component Library & Design Tokens
|
|
|
|
---
|
|
|
|
## What You'll Learn
|
|
|
|
- What a Design System is (and why it saves you time)
|
|
- How to identify reusable patterns in your designs
|
|
- How Freya extracts components automatically
|
|
- How to document components for consistency
|
|
|
|
---
|
|
|
|
## What is a Design System?
|
|
|
|
**Design System** = Your design decisions, extracted and reusable.
|
|
|
|
Instead of:
|
|
- ❌ Designing every button from scratch
|
|
- ❌ Remembering which blue you used last time
|
|
- ❌ Recreating forms on every page
|
|
|
|
You have:
|
|
- ✅ Button component (all states documented)
|
|
- ✅ Color tokens (brand blue, semantic colors)
|
|
- ✅ Form patterns (ready to reuse)
|
|
|
|
**Think of it as:**
|
|
Design System = Your design vocabulary, organized and ready to use
|
|
|
|
---
|
|
|
|
## What to Expect: The Extraction Process
|
|
|
|
**Here's how a real session with Freya looks:**
|
|
|
|
### Freya's Opening
|
|
```
|
|
Hi! Ready to create your Design System?
|
|
|
|
I've analyzed your page specifications. I found some great patterns!
|
|
|
|
Let me show you what I discovered, and you tell me if I got it right.
|
|
We'll name things together and document them properly.
|
|
|
|
This will be collaborative - you're the design expert, I'm the organizer.
|
|
```
|
|
|
|
### Example Pattern Recognition
|
|
|
|
**Freya Identifies Components:**
|
|
```
|
|
Freya: "I scanned your 3 pages and found these button patterns:
|
|
|
|
Pattern 1 (used 12 times):
|
|
- Blue background (#1e3a5f)
|
|
- White text, 18px, semibold
|
|
- Rounded corners (8px)
|
|
- Used for: Submit, Save, Confirm actions
|
|
|
|
Pattern 2 (used 8 times):
|
|
- Transparent background
|
|
- Blue border (#1e3a5f)
|
|
- Blue text
|
|
- Used for: Cancel, Back, Secondary actions
|
|
|
|
Pattern 3 (used 24 times):
|
|
- No background, no border
|
|
- Blue text with underline on hover
|
|
- Used for: Navigation links, "Learn more"
|
|
|
|
Should we call these:
|
|
- Button Primary
|
|
- Button Secondary
|
|
- Text Link
|
|
|
|
Sound good?"
|
|
|
|
You: "Yes! But let's call Pattern 3 'Link Button' instead."
|
|
|
|
Freya: "Perfect. Updated! 🎯"
|
|
```
|
|
|
|
**Freya Finds Inconsistencies:**
|
|
```
|
|
Freya: "Heads up! I found a slight inconsistency:
|
|
|
|
On Page 1, your primary button uses #1e3a5f (deep blue)
|
|
On Page 3, it uses #1e4a7f (slightly different blue)
|
|
|
|
Which one should be the standard?"
|
|
|
|
You: "Oh! Page 1 is correct - #1e3a5f."
|
|
|
|
Freya: "Got it. I'll document #1e3a5f as the brand primary color.
|
|
Should I flag Page 3 for update in the spec?"
|
|
|
|
You: "Yes please!"
|
|
|
|
Freya: "Done. Added to quality check list. ✅"
|
|
```
|
|
|
|
### Example Questions Freya Asks
|
|
|
|
**About Naming:**
|
|
```
|
|
Freya: "I found 3 different card layouts. Help me name them:
|
|
|
|
Card Type A: Image on top, title, description, CTA button
|
|
Card Type B: Small image left, title and text right
|
|
Card Type C: Icon in circle, title, 3-line description
|
|
|
|
What should we call these?"
|
|
|
|
You: "Type A is a 'Feature Card'
|
|
Type B is a 'Task Card'
|
|
Type C is a 'Capability Card'"
|
|
|
|
Freya: "Love it. Those names make sense! Documented. 📝"
|
|
```
|
|
|
|
**About Design Tokens:**
|
|
```
|
|
Freya: "I extracted these colors from your pages:
|
|
|
|
Blues: #1e3a5f, #2c4f7c, #3d6399
|
|
Are these:
|
|
- Different brand colors? OR
|
|
- The same color in different states (default, hover, active)?
|
|
|
|
You: "#1e3a5f is the main brand blue
|
|
#2c4f7c is hover state
|
|
#3d6399 is... hmm, I'm not sure where that came from"
|
|
|
|
Freya: "Found it - Page 2, Benefits section background.
|
|
Should that be a separate color called 'Background Blue'?
|
|
Or should it use the main brand blue?"
|
|
|
|
You: "Ah! It should be a lighter tint for backgrounds. Let's call it
|
|
'Brand Blue Light' and make it consistent."
|
|
|
|
Freya: "Perfect! I'll document:
|
|
- Brand Blue (#1e3a5f) - primary
|
|
- Brand Blue Hover (#2c4f7c) - interaction
|
|
- Brand Blue Light (#3d6399) - backgrounds
|
|
|
|
Should I update Page 2 spec?"
|
|
|
|
You: "Yes!"
|
|
```
|
|
|
|
### Built-in Guidance from Freya
|
|
|
|
**When you're building your first Design System:**
|
|
```
|
|
Freya: "This is your first Design System, right?
|
|
|
|
Pro tip: Don't try to document everything perfectly.
|
|
Start with the basics:
|
|
✅ Buttons (you use them everywhere)
|
|
✅ Colors (brand consistency matters)
|
|
✅ Typography (H1, H2, body text)
|
|
✅ Spacing (consistent gaps)
|
|
|
|
We can add more as you design more pages.
|
|
Sound good?"
|
|
|
|
You: "Yes! That feels manageable."
|
|
|
|
Freya: "Great! Let's start there. We'll keep it simple and practical."
|
|
```
|
|
|
|
**When components are almost the same:**
|
|
```
|
|
Freya: "I found two button patterns that are 95% identical:
|
|
|
|
Both have:
|
|
- Blue background
|
|
- White text
|
|
- 8px border radius
|
|
|
|
Only difference:
|
|
- One is 44px tall (regular)
|
|
- One is 56px tall (large)
|
|
|
|
Should we make these:
|
|
- Two separate components? OR
|
|
- One component with size variants?"
|
|
|
|
You: "One component with variants - 'Button Primary (Regular)'
|
|
and 'Button Primary (Large)'"
|
|
|
|
Freya: "Smart! That keeps your system clean. One component,
|
|
two sizes. Documented! 🎯"
|
|
```
|
|
|
|
**About Usage Guidelines:**
|
|
```
|
|
Freya: "For Button Primary, I'm adding usage guidelines:
|
|
|
|
✅ Use for primary actions (submit, save, next)
|
|
✅ Only one per page section
|
|
❌ Don't use for destructive actions (delete, remove)
|
|
|
|
Does that match your intent?"
|
|
|
|
You: "Yes! And add: Button text should be action verbs."
|
|
|
|
Freya: "Added! These guidelines will help keep your design consistent."
|
|
```
|
|
|
|
### What Freya Creates While You Talk
|
|
|
|
As you review patterns, Freya is:
|
|
- 📋 Cataloging components (buttons, forms, cards)
|
|
- 🎨 Extracting design tokens (colors, spacing, typography)
|
|
- 📏 Documenting variants (sizes, states, types)
|
|
- ✍️ Writing usage guidelines (when to use, when not to)
|
|
- 🔗 Linking to page specs (where each component is used)
|
|
|
|
**You'll see progress updates:**
|
|
```
|
|
Freya: "✅ 5 button components documented
|
|
✅ 8 color tokens extracted
|
|
✅ 3 card patterns identified
|
|
🔄 Working on form components..."
|
|
```
|
|
|
|
### The Collaborative Flow
|
|
|
|
**It's a conversation, not a form:**
|
|
```
|
|
You: "Actually, I think the 'Task Card' should have a checkbox option."
|
|
|
|
Freya: "Great catch! Should the checkbox be:
|
|
- Always visible? OR
|
|
- Only on hover? OR
|
|
- A separate variant?"
|
|
|
|
You: "Separate variant - 'Task Card (Selectable)'"
|
|
|
|
Freya: "Perfect. I'll document both variants:
|
|
- Task Card (Standard)
|
|
- Task Card (Selectable)
|
|
|
|
Updated the component library! ✅"
|
|
```
|
|
|
|
---
|
|
|
|
## Step 1: Understand the Power (5 min)
|
|
|
|
**Without Design System:**
|
|
```
|
|
Page 1: Create "Submit" button
|
|
Page 2: Create "Submit" button (slightly different)
|
|
Page 3: Create "Submit" button (now it's inconsistent)
|
|
Update brand color → Update 47 buttons manually 😱
|
|
```
|
|
|
|
**With Design System:**
|
|
```
|
|
Design System: Define Button Primary
|
|
Page 1: Use Button Primary
|
|
Page 2: Use Button Primary
|
|
Page 3: Use Button Primary
|
|
Update brand color → Update 1 component, changes everywhere 🎉
|
|
```
|
|
|
|
**You save time. Users get consistency.**
|
|
|
|
---
|
|
|
|
## Step 2: Activate Freya for Extraction (2 min)
|
|
|
|
```
|
|
@freya
|
|
|
|
I'm ready to create a Design System from my page specifications.
|
|
|
|
I have these pages designed:
|
|
- [Page 1 name]
|
|
- [Page 2 name]
|
|
- [Page 3 name]
|
|
|
|
Please help me extract reusable components.
|
|
```
|
|
|
|
**Freya will analyze** your pages and identify patterns.
|
|
|
|
---
|
|
|
|
## Step 3: Review What Freya Found (15 min)
|
|
|
|
Freya scans your pages and identifies:
|
|
|
|
### Components She'll Extract
|
|
- **Buttons:** Primary, Secondary, Text links
|
|
- **Forms:** Input fields, Dropdowns, Checkboxes
|
|
- **Cards:** Content cards, Profile cards
|
|
- **Navigation:** Headers, Footers, Menus
|
|
- **Feedback:** Success messages, Error states, Loading indicators
|
|
|
|
**She'll say something like:**
|
|
```
|
|
I found these patterns:
|
|
|
|
Buttons (3 variants):
|
|
- Primary Button (used 12 times across 3 pages)
|
|
- Secondary Button (used 8 times)
|
|
- Text Link (used 24 times)
|
|
|
|
Cards (2 types):
|
|
- Task Card (used 15 times)
|
|
- Profile Card (used 3 times)
|
|
|
|
Do these look right? Any I missed?
|
|
```
|
|
|
|
**Your job:**
|
|
- ✅ Confirm patterns she found
|
|
- ✅ Point out any she missed
|
|
- ✅ Name variants clearly ("Primary Button" not "Blue Button")
|
|
|
|
---
|
|
|
|
## Step 4: Define Design Tokens (10 min)
|
|
|
|
**Design Tokens** = The atomic values your components use.
|
|
|
|
Freya will extract:
|
|
|
|
### Colors
|
|
```
|
|
Brand Colors:
|
|
- Primary: #1e3a5f (deep blue)
|
|
- Accent: #ff6b35 (coral)
|
|
|
|
Semantic Colors:
|
|
- Success: #22c55e
|
|
- Error: #ef4444
|
|
- Warning: #f59e0b
|
|
```
|
|
|
|
### Typography
|
|
```
|
|
Heading 1: 48px, Bold, 1.2 line height
|
|
Heading 2: 32px, Semibold, 1.3 line height
|
|
Body: 16px, Regular, 1.6 line height
|
|
```
|
|
|
|
### Spacing
|
|
```
|
|
xs: 4px
|
|
sm: 8px
|
|
md: 16px
|
|
lg: 24px
|
|
xl: 32px
|
|
```
|
|
|
|
**Your job:**
|
|
- ✅ Confirm these match your intent
|
|
- ✅ Name them meaningfully ("Primary" not "Blue")
|
|
- ✅ Add any she missed
|
|
|
|
---
|
|
|
|
## Step 5: Document Components (15 min)
|
|
|
|
For each component, Freya creates documentation:
|
|
|
|
### Example: Primary Button
|
|
|
|
**Component Name:** Button Primary
|
|
**Object ID Pattern:** `{page}-{section}-{element}`
|
|
|
|
**States:**
|
|
- **Default:** Blue background, white text
|
|
- **Hover:** Darker blue, scale 1.05
|
|
- **Active:** Even darker, scale 0.98
|
|
- **Disabled:** Gray background, gray text
|
|
- **Loading:** Blue background, spinner icon
|
|
|
|
**Content Structure:**
|
|
```
|
|
- Label (EN): [Button text]
|
|
- Icon (optional): [Icon name]
|
|
```
|
|
|
|
**Usage Guidelines:**
|
|
- Use for primary actions (submit, save, confirm)
|
|
- Only ONE primary button per page/section
|
|
- Button text = action verb ("Save", "Submit", "Confirm")
|
|
|
|
**Accessibility:**
|
|
- Min touch target: 44x44px
|
|
- Keyboard accessible (Enter/Space)
|
|
- Focus indicator visible
|
|
|
|
**Freya documents** all this. You just review and confirm.
|
|
|
|
---
|
|
|
|
## Step 6: Create the Component Library (5 min)
|
|
|
|
Freya saves your Design System:
|
|
|
|
```
|
|
/docs/5-design-system/
|
|
├── 00-design-tokens.md
|
|
├── components/
|
|
│ ├── buttons.md
|
|
│ ├── forms.md
|
|
│ ├── cards.md
|
|
│ └── navigation.md
|
|
├── patterns/
|
|
│ ├── form-patterns.md
|
|
│ └── layout-patterns.md
|
|
└── guidelines/
|
|
├── accessibility.md
|
|
└── usage-rules.md
|
|
```
|
|
|
|
**Now you can:**
|
|
- Reference components in new page specs
|
|
- Ensure consistency across your product
|
|
- Update once, apply everywhere
|
|
|
|
---
|
|
|
|
## Step 7: Use Your Design System (Ongoing)
|
|
|
|
**When designing new pages:**
|
|
|
|
Instead of:
|
|
```markdown
|
|
#### Submit Button
|
|
- Style: Blue button, 18px, semibold...
|
|
```
|
|
|
|
You write:
|
|
```markdown
|
|
#### Submit Button
|
|
**Component:** Button Primary
|
|
**Content:** "Save Changes"
|
|
```
|
|
|
|
**Freya knows** what "Button Primary" means. Developers know too. Consistency guaranteed.
|
|
|
|
---
|
|
|
|
## Common Questions
|
|
|
|
**Q: When should I create a Design System?**
|
|
**A:** After 2-3 pages are designed. Patterns become clear.
|
|
|
|
**Q: Can I update components later?**
|
|
**A:** Yes! Update the Design System doc, then update specs that use it.
|
|
|
|
**Q: What if a page needs a unique button?**
|
|
**A:** Document why it's unique. If you use it again, add it to the system.
|
|
|
|
**Q: Do I need Figma components?**
|
|
**A:** Not required. WDS Design System is specification-focused. You can sync to Figma later if you want.
|
|
|
|
---
|
|
|
|
## What You've Accomplished
|
|
|
|
🎉 **You just created a Design System!**
|
|
|
|
**You didn't need to:**
|
|
- ❌ Manually catalog every component
|
|
- ❌ Create a Figma component library first
|
|
- ❌ Understand design tokens theory
|
|
- ❌ Build a Storybook
|
|
|
|
**You just:**
|
|
- ✅ Designed a few pages naturally
|
|
- ✅ Let Freya identify patterns
|
|
- ✅ Reviewed and confirmed
|
|
- ✅ Named things clearly
|
|
|
|
**That's the WDS superpower:** Design naturally. Extract patterns automatically. Scale effortlessly.
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
**Ready to hand off to developers?**
|
|
→ [Module 10: Design Delivery](../module-10-design-delivery/tutorial-10.md)
|
|
|
|
**Want to design more pages first?**
|
|
Go back to [Module 08: Initialize Scenario](../module-08-initialize-scenario/tutorial-08.md) and your Design System will grow with you.
|
|
|
|
---
|
|
|
|
**Pro Tip:** Your Design System doesn't need to be "complete" before you hand off. Start small (buttons, forms, colors). Add more as you design more pages. It's a living system that grows with your product.
|
|
|