BMAD-METHOD/docs/learn/module-13-design-system/tutorial-13.md

7.3 KiB

Tutorial 13: Apply Your Mode

Hands-on guide to working effectively in your design system mode


Overview

This tutorial helps you verify your mode choice and work effectively within it.

Time: 15-20 minutes Prerequisites: Visual designs completed (Module 13) Agent: Freya What you'll do: Review and optimize your design system approach


Before You Start

Know your mode:

  • Mode 1: None (inline styling)
  • Mode 2: Building (extracting components)
  • Mode 3: Library (using external library)
  • Mode 4: Existing (importing previous system)

If unsure, ask Freya:

"What design system mode are we using for this project?"


Mode 1: None — Tutorial

Verify inline specifications are complete:

Check each page spec:

### Submit Button
- Style: bg #0066FF, text white, 16px, rounded 6px
- Padding: 14px vertical, 24px horizontal
- States: hover (darken 10%), active (scale 98%), loading (spinner), disabled (opacity 50%)
- Label: "Create Free Account"

Consistency check:

Freya asks:

"I notice you have similar buttons on 3 pages. Their styling is slightly different:

  • P01: rounded 6px
  • P02: rounded 8px
  • P03: rounded 6px

Should these be consistent?"

Resolve inconsistencies manually since there's no central component.

When to upgrade:

If you find yourself fixing the same inconsistency repeatedly, consider upgrading to Mode 2.


Mode 2: Building — Tutorial

Review extracted components:

Freya summarizes:

"Your design system has grown to include:

Components:

  • Button (3 variants, 5 states)
  • Input (3 types, 4 states)
  • Card (2 variants)

Tokens:

  • 6 colors defined
  • Typography scale
  • Spacing scale

All page specs reference these components."

Check for missing patterns:

Freya:

"Looking at your specs, I see a repeated pattern that isn't extracted yet:

Form Field Group (label + input + error message) appears 8 times.

Should we extract this as a component?"

You decide:

"Yes, let's extract it."

Freya creates:

# FormField Component

## Description
Container for label, input, helper text, and error message.
Provides consistent spacing and error handling.

## Props
| Prop | Type | Description |
|------|------|-------------|
| label | string | Field label |
| input | Input | The input component |
| helper | string | Helper text (optional) |
| error | string | Error message (optional) |

## States
- Default: Label + input visible
- With helper: Helper text below input
- Error: Error message replaces helper, input bordered red

Update specs to use new component:

Before:

### Email Section
- Label: "Email" (above, 14px, #374151)
- Input: email type, placeholder "you@example.com"
- Helper: none
- Error: "Please enter a valid email" (when invalid)

After:

### Email Section
- Component: FormField
- Label: "Email"
- Input: Input (email)
- Placeholder: "you@example.com"
- Error: "Please enter a valid email"

Mode 3: Library — Tutorial

Verify library component usage:

Freya checks:

"You're using shadcn components. Let me verify your usage:

Correctly used:

  • Button (default, destructive, outline variants)
  • Input (with FormField wrapper)
  • Card (default)

Token overrides:

  • Primary color: #0066FF (applied)
  • Border radius: 6px (applied)
  • Font: Inter (applied)

Custom additions:

  • TaskCard (extends shadcn/Card) — documented
  • StrengthIndicator — custom component

Everything looks aligned."

Check token application:

# D-Design-System/tokens/colors.yaml
colors:
  background: "#FFFFFF"
  foreground: "#111827"
  primary: "#0066FF"
  primary-foreground: "#FFFFFF"
  secondary: "#F3F4F6"
  secondary-foreground: "#374151"
  destructive: "#DC2626"
  destructive-foreground: "#FFFFFF"
  muted: "#F9FAFB"
  muted-foreground: "#6B7280"

Document custom components:

If you created components beyond the library, document them:

# StrengthIndicator (Custom)

## Description
Password strength feedback component.
Not from shadcn — custom for this project.

## Props
| Prop | Type | Description |
|------|------|-------------|
| strength | number | 0-4 strength level |

## Visual
- 4 bars, filling based on strength
- Colors: red (1), orange (2), yellow (3), green (4)

Mode 4: Existing — Tutorial

Review imported components:

Freya:

"Importing design system from Acme Project v2...

Available components:

  • Button (4 variants)
  • Input (5 types)
  • Card, Modal, Toast
  • Form patterns

Token values:

  • Brand colors (Acme palette)
  • Typography (Inter scale)
  • Spacing (8px base)

Ready to use. Any extensions needed?"

Extend for new project:

You say:

"This project needs a new Button variant: 'outline-primary' — blue border, transparent background."

Freya extends:

# Button Component (Extended)

## New Variant: outline-primary
- Border: 1px solid #0066FF
- Background: transparent
- Text: #0066FF
- Hover: Background #0066FF/10%

Added for: New Project
Reason: Secondary CTAs need brand color visibility

Track extensions:

# Design System Extensions — New Project

## New Variants
- Button: outline-primary

## New Components
- None yet

## Token Overrides
- None (using Acme palette)

All Modes: Final Check

Verify alignment:

Check Action
All page specs use correct component references Review each spec
No orphan inline styles (Mode 2-4) Search for inline definitions
Tokens applied consistently Check visual prototypes
New patterns documented Add to design system

Document your mode:

Add to project README or design system index:

# Design System

## Mode: Building (Mode 2)

## Components
See: C-UX-Scenarios/Functional-Components/

## Tokens
See: D-Design-System/tokens/

## Usage
All page specifications reference components from this system.
Do not use inline styles for elements that have component definitions.

What You've Accomplished

By mode:

Mode 1: Verified all inline specs are complete and consistent

Mode 2: Components extracted, patterns identified, specs updated

Mode 3: Library components correctly used, tokens applied, customs documented

Mode 4: System imported, extensions added, tracking in place


Tips for Success

DO:

  • Review mode choice periodically
  • Extract patterns when they repeat 3+ times
  • Document deviations and extensions
  • Keep tokens in sync with visuals

DON'T:

  • Mix approaches (inline + components randomly)
  • Forget to update specs when extracting
  • Over-engineer for small projects
  • Ignore library conventions in Mode 3

You've Completed Module 13!

Your design system mode is optimized. You understand:

  • How your mode works
  • Where components live
  • How to extend the system
  • How to maintain consistency

Next Module

Module 14: Agentic Development →

Generate working prototypes from your specifications.


← Back to Lesson 1 | Back to Module Overview

Part of Module 13: Design System