# Bakery Setup Wizard - Complete Flow Specification

**Version**: 1.0
**Date**: 2025-11-06
**Status**: Design Specification
**Related**: `jtbd-analysis-inventory-setup.md`

---

## 📋 Table of Contents

1. [Executive Summary](#executive-summary)
2. [Design Principles](#design-principles)
3. [Wizard Architecture](#wizard-architecture)
4. [Complete Step Sequence](#complete-step-sequence)
5. [Step Specifications (Detailed)](#step-specifications-detailed)
6. [Progress Tracking & Navigation](#progress-tracking--navigation)
7. [Validation & Error Handling](#validation--error-handling)
8. [Smart Features](#smart-features)
9. [Technical Implementation Notes](#technical-implementation-notes)
10. [Success Metrics](#success-metrics)

---

## Executive Summary

### Problem Statement
After completing the initial onboarding wizard (Register Bakery → Upload Sales Data → ML Training → Completion), users are dropped onto a dashboard with no guidance on how to set up the foundational data needed for daily operations. This creates:
- High abandonment rates (users don't complete setup)
- Data quality issues (incomplete or incorrect entries)
- Delayed time-to-value (can't use the system effectively)

### Solution Overview
**Guided Bakery Setup Journey**: A continuation of the onboarding wizard that walks users through setting up suppliers, inventory, recipes, quality standards, and team in a logical, dependency-aware sequence.

### Key Innovations
1. **Continuous Journey**: Extends onboarding wizard (Step 5+) instead of separate flow
2. **Dependency Awareness**: Enforces order (suppliers before inventory before recipes)
3. **Progressive Disclosure**: Shows complex options only when needed
4. **Flexible Pacing**: Save progress, skip optional steps, resume later
5. **Contextual Guidance**: Every step explains why it matters and what comes next
6. **Celebration Moments**: Recognizes milestones to maintain motivation

---

## Design Principles

### 1. Guide, Don't Block
**Principle**: Provide clear direction while allowing flexibility
- ✅ Suggest optimal path but allow users to skip optional steps
- ✅ Show what's incomplete without preventing progress
- ❌ Don't force users into rigid workflows
- ❌ Don't hide advanced options from experienced users

### 2. Explain, Don't Assume
**Principle**: Use plain language and provide context
- ✅ Explain why each step matters to bakery operations
- ✅ Use bakery terminology, not software jargon
- ✅ Provide examples and common values
- ❌ Don't assume users understand database concepts
- ❌ Don't use technical terms without explanation

### 3. Validate Early, Fail Friendly
**Principle**: Catch errors before they happen, provide helpful guidance
- ✅ Real-time validation as users type
- ✅ Helpful error messages with suggestions
- ✅ Prevent invalid states (dependencies, cross-field validation)
- ❌ Don't wait until submit to show errors
- ❌ Don't show technical error messages

### 4. Progress Over Perfection
**Principle**: Help users make progress, even if data isn't perfect
- ✅ Allow "good enough" data to move forward
- ✅ Clearly mark what's required vs. optional
- ✅ Allow editing later without redoing the entire wizard
- ❌ Don't demand perfection that prevents progress
- ❌ Don't make optional fields feel required

### 5. Show Value Early
**Principle**: Unlock features as users progress
- ✅ Show what becomes possible after each step
- ✅ Preview features before they're available
- ✅ Celebrate completion milestones
- ❌ Don't wait until the end to show value
- ❌ Don't make setup feel like busywork

---

## Wizard Architecture

### Overall Flow Structure

```
┌─────────────────────────────────────────────────────────────┐
│  EXISTING ONBOARDING WIZARD (Steps 1-4)                     │
│  ────────────────────────────────────────────────────────   │
│  1. Register Tenant (setup)                                 │
│  2. Configure Inventory (smart-inventory-setup)             │
│  3. Train AI (ml-training)                                  │
│  4. Completion                                              │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│  NEW: BAKERY SETUP WIZARD (Steps 5-11)                      │
│  ────────────────────────────────────────────────────────   │
│  PHASE 1: ORIENTATION & PLANNING                            │
│  5. Welcome & Setup Overview (setup-welcome)                │
│                                                              │
│  PHASE 2: CORE DEPENDENCIES (Critical Path)                 │
│  6. Add Suppliers (suppliers-setup)                         │
│  7. Set Up Inventory Items (inventory-items-setup)          │
│                                                              │
│  PHASE 3: OPERATIONAL DATA (Required for Production)        │
│  8. Create Recipes (recipes-setup)                          │
│  9. Define Quality Standards (quality-setup)                │
│                                                              │
│  PHASE 4: TEAM & FINALIZATION (Optional but Recommended)    │
│  10. Add Team Members (team-setup) [OPTIONAL]               │
│  11. Review & Launch (setup-completion)                     │
└─────────────────────────────────────────────────────────────┘
```

### Integration Point
- **Trigger**: When user completes existing Step 4 (Completion)
- **Transition**: Instead of navigating to dashboard, show "One more thing..." modal
- **Modal Content**: "Great start! Now let's set up your daily operations. This will take about 10-15 minutes and unlock powerful features like recipe costing, inventory tracking, and quality monitoring."
- **User Choice**:
  - **"Set Up Now"** (recommended) → Enter wizard at Step 5
  - **"I'll Do This Later"** → Go to dashboard with persistent "Complete Setup" banner

### Step Categories

| Category | Steps | Required? | Can Skip? | Estimated Time |
|----------|-------|-----------|-----------|----------------|
| **Orientation** | Step 5 (Welcome) | No | Yes | 2 min |
| **Critical Path** | Steps 6-7 (Suppliers, Inventory) | Yes | No | 5-8 min |
| **Production Setup** | Steps 8-9 (Recipes, Quality) | Yes | No | 5-10 min |
| **Team Setup** | Step 10 (Team) | No | Yes | 2-5 min |
| **Completion** | Step 11 (Review) | No | Yes | 1-2 min |

**Total Estimated Time**: 15-27 minutes (depending on data complexity)

---

## Complete Step Sequence

### PHASE 1: ORIENTATION & PLANNING

#### **Step 5: Welcome & Setup Overview** (`setup-welcome`)
**Purpose**: Orient user to what's ahead, reduce anxiety, set expectations

**User Job**: *"Help me understand what I need to set up and why"*

**Content**:
- Welcome message: "You've trained your AI. Now let's set up your daily operations."
- Visual roadmap showing all steps ahead
- Time estimate: "This takes about 15-20 minutes"
- What you'll need: "Have ready: supplier info, ingredient list, common recipes"
- What you'll gain: Feature preview cards showing value

**UI Components**:
```
┌──────────────────────────────────────────────────────┐
│  🎉 Excellent! Your AI is Ready                      │
│                                                       │
│  Now let's set up your bakery's daily operations     │
│  so the system can help you manage:                  │
│                                                       │
│  ✓ Inventory tracking & reorder alerts              │
│  ✓ Recipe costing & profitability analysis          │
│  ✓ Quality standards & production monitoring         │
│  ✓ Team coordination & task assignment              │
│                                                       │
│  ⏱️ Takes about 15-20 minutes                        │
│                                                       │
│  📋 What You'll Set Up:                              │
│  ────────────────────────────────────────────────    │
│  [CARD] Suppliers        | 2-3 min  | Required      │
│  [CARD] Inventory Items  | 5-8 min  | Required      │
│  [CARD] Recipes          | 5-10 min | Required      │
│  [CARD] Quality Checks   | 3-5 min  | Required      │
│  [CARD] Team Members     | 2-5 min  | Optional      │
│                                                       │
│  💡 You can save progress and resume anytime         │
│                                                       │
│  [Skip for Now]           [Let's Get Started! →]    │
└──────────────────────────────────────────────────────┘
```

**Validation**: None (informational step)

**Navigation**:
- **Next**: Step 6 (Suppliers Setup)
- **Skip**: Go to dashboard with "Resume Setup" banner

**Backend**: Mark `setup-welcome` as completed

---

### PHASE 2: CORE DEPENDENCIES (Critical Path)

#### **Step 6: Add Suppliers** (`suppliers-setup`)
**Purpose**: Set up supplier relationships as foundation for inventory

**User Job**: *"Add my suppliers so I can track where ingredients come from and manage orders"*

**Why This Step**:
> "Suppliers are the source of your ingredients. Setting them up now lets you track costs, manage orders, and analyze supplier performance."

**What Users Need to Add**: Minimum 1 supplier (recommended 2-3)

**Form Type**: **Wizard-Enhanced List Entry**

**UI Flow**:

```
┌──────────────────────────────────────────────────────┐
│  Step 2 of 7: Add Your Suppliers                     │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  💼 Suppliers                                         │
│  Your ingredient and material providers              │
│                                                       │
│  [==========>------------------] 29% Complete        │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  Why This Matters                            │   │
│  │  ─────────────────────────────────────────── │   │
│  │  Tracking suppliers helps you:               │   │
│  │  • Compare ingredient costs                  │   │
│  │  • Manage purchase orders                    │   │
│  │  • Analyze delivery performance              │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  📝 Your Suppliers (1 required, 2-3 ideal)   │   │
│  │                                               │   │
│  │  [+ Add Your First Supplier]                 │   │
│  │                                               │   │
│  │  Empty state illustration                     │   │
│  │  "Add at least one supplier to continue"     │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  💡 Tip: Start with your most frequently used        │
│     supplier. You can add more later.                │
│                                                       │
│  [← Back]                        [Skip] [Continue →] │
│  (disabled until 1 supplier added)                   │
└──────────────────────────────────────────────────────┘
```

**When "Add Supplier" clicked** → Opens inline wizard modal:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Add Supplier                                       │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  Basic Information                                   │
│  ────────────────────────────────────────────────    │
│  Supplier Name *                                     │
│  [_____________________________________________]      │
│   e.g., "Molinos del Norte", "Ingredientes García"   │
│                                                       │
│  Supplier Type *                                     │
│  [▼ Select type___________________________]          │
│      ├─ Ingredients (flour, sugar, yeast...)         │
│      ├─ Packaging (boxes, bags, labels...)           │
│      └─ Equipment (mixers, ovens...)                 │
│                                                       │
│  Contact Information (Optional)                      │
│  ────────────────────────────────────────────────    │
│  ▼ Show optional fields                              │
│                                                       │
│  [Add Another Supplier]         [Cancel] [Add →]     │
└──────────────────────────────────────────────────────┘
```

**Fields**:

| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `name` | text | Yes | Min 2 chars | "The business name of your supplier" |
| `supplier_type` | select | Yes | Must select | "Ingredients, Packaging, or Equipment" |
| `contact_name` | text | No | - | "Main contact person at this supplier" |
| `email` | email | No | Valid email | "For sending purchase orders" |
| `phone` | tel | No | Valid phone | "For quick inquiries" |
| `payment_terms` | select | No | - | "Net 30, Net 60, Prepaid, COD..." |
| `status` | select | No | Default: Active | "Active, Inactive, Preferred" |

**After Adding Suppliers**:

```
┌──────────────────────────────────────────────────────┐
│  📝 Your Suppliers (2 added) ✓                       │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 💼 Molinos del Norte                       │ [⋮]  │
│  │    Type: Ingredients  │  Status: Active    │     │
│  │    Contact: Juan García                    │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 📦 Empaques Premium                        │ [⋮]  │
│  │    Type: Packaging  │  Status: Active      │     │
│  │    Contact: María López                    │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  [+ Add Another Supplier]                            │
│                                                       │
│  ✅ Great! You've added 2 suppliers                  │
│                                                       │
│  [← Back]                  [Continue to Inventory →] │
└──────────────────────────────────────────────────────┘
```

**Validation**:
- **Minimum**: 1 supplier required to continue
- **Real-time**: Check for duplicate names
- **Business Rule**: At least one "Ingredients" type supplier recommended (show warning if none)

**Navigation**:
- **Continue**: Only enabled when ≥1 supplier added
- **Skip**: Allowed, but shows warning: "You'll need suppliers later for purchase orders"

**Backend**:
- Save each supplier via `POST /api/v1/suppliers/`
- Mark step `suppliers-setup` as completed
- Store count in step data: `{suppliers_added: 2}`

**Smart Features**:
- **Template Suppliers**: "Use common supplier template" button → Pre-fills with typical Spanish bakery suppliers
- **Bulk Import**: "Import from spreadsheet" (CSV with name, type, contact)

---

#### **Step 7: Set Up Inventory Items** (`inventory-items-setup`)
**Purpose**: Add the ingredients and materials used in bakery operations

**User Job**: *"Add my ingredients so the system can track inventory levels and costs"*

**Why This Step**:
> "Inventory items are the building blocks of your recipes. Once set up, the system will track quantities, alert you when stock is low, and help you calculate recipe costs."

**What Users Need to Add**: Minimum 3 inventory items (recommended 10-15 for starter set)

**Dependency**: Requires ≥1 supplier from Step 6

**Form Type**: **Wizard-Enhanced List Entry with Bulk Options**

**UI Flow**:

```
┌──────────────────────────────────────────────────────┐
│  Step 3 of 7: Set Up Inventory Items                 │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  📦 Inventory Items                                   │
│  Ingredients and materials you use                   │
│                                                       │
│  [====================>--------] 57% Complete        │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  Why This Matters                            │   │
│  │  ─────────────────────────────────────────── │   │
│  │  Inventory tracking enables:                 │   │
│  │  • Low stock alerts (never run out!)        │   │
│  │  • Automatic reorder suggestions             │   │
│  │  • Accurate recipe costing                   │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  📝 Your Inventory (3 min required, 10 ideal)│   │
│  │                                               │   │
│  │  [+ Add Item] [📥 Import Spreadsheet]        │   │
│  │  [📋 Use Starter Template]                   │   │
│  │                                               │   │
│  │  (Empty state)                                │   │
│  │  "Add your most common ingredients first"    │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  💡 Quick Start: Use our starter template with       │
│     common bakery ingredients (flour, sugar, eggs,   │
│     butter...). You can customize them after.        │
│                                                       │
│  [← Back to Suppliers]         [Skip] [Continue →]   │
│  (disabled until 3 items added)                      │
└──────────────────────────────────────────────────────┘
```

**Starter Template Feature**:

When user clicks "Use Starter Template":

```
┌──────────────────────────────────────────────────────┐
│  ✕ Add Starter Ingredients                           │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  We'll add common bakery ingredients to get you      │
│  started. You can edit or remove any items.          │
│                                                       │
│  ☑️ Flour (White Bread Flour) - kg                   │
│  ☑️ Flour (Whole Wheat) - kg                         │
│  ☑️ Sugar (White Granulated) - kg                    │
│  ☑️ Butter (Unsalted) - kg                           │
│  ☑️ Eggs (Large) - units                             │
│  ☑️ Milk (Whole) - liters                            │
│  ☑️ Yeast (Active Dry) - kg                          │
│  ☑️ Salt (Fine) - kg                                 │
│  ☑️ Water - liters                                   │
│  ☑️ Chocolate Chips - kg                             │
│                                                       │
│  Assign Supplier (Optional):                         │
│  [▼ Molinos del Norte________________]               │
│      (will be set as supplier for flour & sugar)     │
│                                                       │
│  [Cancel]               [Add Selected Items (10) →]  │
└──────────────────────────────────────────────────────┘
```

**Manual Add Item Modal**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Add Inventory Item                  [Step 1 of 2] │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  ▼ Basic Information                                 │
│  ────────────────────────────────────────────────    │
│  Item Name *                                         │
│  [_____________________________________________]      │
│   e.g., "Harina de trigo 000", "Azúcar blanca"       │
│                                                       │
│  Category *                                          │
│  [▼ Select category_______________________]          │
│      ├─ Flour & Grains                               │
│      ├─ Dairy & Eggs                                 │
│      ├─ Sweeteners                                   │
│      ├─ Fats & Oils                                  │
│      ├─ Leavening Agents                             │
│      ├─ Flavorings & Additives                       │
│      └─ Packaging Materials                          │
│                                                       │
│  Unit of Measure *                                   │
│  [▼ Kilograms________________________]               │
│      ├─ Kilograms (kg)                               │
│      ├─ Grams (g)                                    │
│      ├─ Liters (L)                                   │
│      ├─ Milliliters (ml)                             │
│      └─ Units (pieces)                               │
│                                                       │
│  ▼ Supplier & Pricing (Optional - can add later)    │
│  ────────────────────────────────────────────────    │
│  ▶ Show optional fields                              │
│                                                       │
│  [Cancel]           [Continue to Stock Levels →]     │
└──────────────────────────────────────────────────────┘
```

**Step 2 of Add Item (Stock & Reorder Levels)**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Add Inventory Item                  [Step 2 of 2] │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  ✓ Harina de trigo 000 │ Flour & Grains │ kg        │
│                                                       │
│  ▼ Stock Levels & Alerts                             │
│  ────────────────────────────────────────────────    │
│  Current Stock (Optional)                            │
│  [________] kg                                        │
│   How much do you have right now?                    │
│                                                       │
│  Low Stock Alert At                                  │
│  [________] kg        (Recommended: 10-20 kg)        │
│   You'll get notified when stock falls below this    │
│                                                       │
│  Reorder Point                                       │
│  [________] kg        (Recommended: 5 kg)            │
│   System will suggest reordering at this level       │
│                                                       │
│  ▼ Advanced Options (Optional)                       │
│  ────────────────────────────────────────────────    │
│  ▶ Pricing, Shelf Life, SKU/Barcode                 │
│                                                       │
│  💡 Don't worry if you don't know exact numbers.     │
│     You can adjust these anytime based on usage.     │
│                                                       │
│  [← Back]          [Add Another Item] [Save & Done]  │
└──────────────────────────────────────────────────────┘
```

**Fields (Complete List)**:

**Step 1 - Required**:
| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `name` | text | Yes | Min 2 chars, unique | "The name you use for this item" |
| `category` | select | Yes | Must select | "Helps organize your inventory" |
| `unit_of_measure` | select | Yes | Must select | "How this item is measured" |

**Step 2 - Stock Levels**:
| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `current_quantity` | number | No | ≥0 | "Current stock on hand" |
| `low_stock_threshold` | number | No | ≥0 | "Alert me when below this level" |
| `reorder_point` | number | No | ≥0, ≤ low_stock | "Suggest reorder at this level" |

**Advanced - Optional**:
| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `supplier_id` | select | No | Must exist | "Primary supplier for this item" |
| `standard_cost` | currency | No | ≥0 | "Typical cost per unit" |
| `sku` | text | No | Unique | "Stock keeping unit code" |
| `barcode` | text | No | Valid barcode | "For scanning" |
| `shelf_life_days` | number | No | >0 | "Days until expires" |

**After Adding Items**:

```
┌──────────────────────────────────────────────────────┐
│  📝 Your Inventory Items (12 added) ✓                │
│                                                       │
│  Filter by: [All▼] [Search: _______________] [⚙️]    │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 🌾 Harina de trigo 000                     │ [⋮]  │
│  │    Flour & Grains  │  50 kg  │  Low: 20 kg │     │
│  │    Supplier: Molinos del Norte             │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 🥚 Eggs (Large)                            │ [⋮]  │
│  │    Dairy & Eggs  │  200 units  │  Low: 50  │     │
│  │    No supplier set                         │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  [... 10 more items ...]                             │
│                                                       │
│  [+ Add Item] [Import] [Use Template]                │
│                                                       │
│  ✅ Excellent! You've set up 12 inventory items      │
│                                                       │
│  [← Back to Suppliers]        [Continue to Recipes →]│
└──────────────────────────────────────────────────────┘
```

**Validation**:
- **Minimum**: 3 items required to continue
- **Real-time**: Check for duplicate names within category
- **Business Rules**:
  - Warn if no flour items (common for bakeries)
  - Warn if reorder_point > low_stock_threshold
  - Suggest supplier if none set for "Ingredients" type items

**Navigation**:
- **Continue**: Enabled when ≥3 items added
- **Skip**: Allowed with warning: "Recipes require ingredients. Sure you want to skip?"

**Backend**:
- Save each item via `POST /api/v1/inventory/ingredients/`
- For starter template: Bulk create via `POST /api/v1/inventory/ingredients/bulk/`
- Mark step `inventory-items-setup` as completed
- Store count: `{inventory_items_added: 12, used_template: true}`

**Smart Features**:
- **Smart Categories**: Auto-suggest category based on item name (ML)
- **Unit Conversion**: "Convert between units" helper
- **Supplier Recommendation**: Based on item category, suggest relevant suppliers from Step 6
- **Bulk Edit**: "Edit multiple items" for updating low stock thresholds

**Progress Indicator Within Step**:
```
┌──────────────────────────────────────┐
│  Progress: 12 items added            │
│  ▰▰▰▱▱ Minimum met (3+)  ✓           │
│  ▰▰▰▰▰ Recommended (10+) ✓           │
└──────────────────────────────────────┘
```

---

### PHASE 3: OPERATIONAL DATA (Required for Production)

#### **Step 8: Create Recipes** (`recipes-setup`)
**Purpose**: Define production recipes using inventory items

**User Job**: *"Add my recipes so the system can calculate costs, track production, and manage ingredient usage"*

**Why This Step**:
> "Recipes connect your inventory to production. The system will calculate exact costs per item, track ingredient consumption, and help you optimize your menu profitability."

**What Users Need to Add**: Minimum 1 recipe (recommended 3-5 core products)

**Dependency**: Requires ≥3 inventory items from Step 7

**Form Type**: **Multi-Step Recipe Builder**

**UI Flow**:

```
┌──────────────────────────────────────────────────────┐
│  Step 4 of 7: Create Your Recipes                    │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  👨‍🍳 Recipes                                           │
│  Your bakery's production formulas                   │
│                                                       │
│  [=============================>---] 71% Complete    │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  Why This Matters                            │   │
│  │  ─────────────────────────────────────────── │   │
│  │  Recipes unlock powerful features:           │   │
│  │  • Automatic ingredient cost calculation     │   │
│  │  • Production planning & scheduling          │   │
│  │  • Inventory consumption tracking            │   │
│  │  • Profitability analysis per product        │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  📝 Your Recipes (1 min required, 3-5 ideal) │   │
│  │                                               │   │
│  │  [+ Create Recipe] [📋 Use Recipe Template]  │   │
│  │                                               │   │
│  │  (Empty state)                                │   │
│  │  "Create recipes for your core products"     │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  💡 Quick Start: Use recipe templates for common     │
│     baked goods. Adjust quantities to match yours.   │
│                                                       │
│  [← Back to Inventory]            [Skip] [Continue →]│
│  (disabled until 1 recipe added)                     │
└──────────────────────────────────────────────────────┘
```

**Recipe Template Gallery**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Choose Recipe Template                            │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  Select a template to customize, or create from      │
│  scratch:                                            │
│                                                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │  🥖      │  │  🍞      │  │  🥐      │          │
│  │ Baguette │  │  White   │  │ Croissant│          │
│  │ Francesa │  │  Bread   │  │          │          │
│  └──────────┘  └──────────┘  └──────────┘          │
│                                                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │  🍰      │  │  🧁      │  │  ➕      │          │
│  │  Cake    │  │ Muffins  │  │  Create  │          │
│  │  Sponge  │  │ Blueberry│  │  Blank   │          │
│  └──────────┘  └──────────┘  └──────────┘          │
│                                                       │
│  [Cancel]                                            │
└──────────────────────────────────────────────────────┘
```

**Create Recipe - Step 1 (Basic Info)**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Create Recipe                       [Step 1 of 3] │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  Recipe Information                                  │
│  ────────────────────────────────────────────────    │
│  Recipe Name *                                       │
│  [_____________________________________________]      │
│   e.g., "Baguette Francesa", "Pan de Molde"          │
│                                                       │
│  Category *                                          │
│  [▼ Select category_______________________]          │
│      ├─ Bread                                        │
│      ├─ Pastry                                       │
│      ├─ Cake                                         │
│      ├─ Cookie                                       │
│      └─ Specialty                                    │
│                                                       │
│  Batch Yield *                                       │
│  [_____] units                                        │
│   How many items does this recipe make?              │
│                                                       │
│  Preparation Time (Optional)                         │
│  [_____] minutes                                      │
│                                                       │
│  Description (Optional)                              │
│  [_____________________________________________]      │
│  [_____________________________________________]      │
│   Brief description or notes about this recipe       │
│                                                       │
│  [Cancel]                    [Continue to Ingredients →]│
└──────────────────────────────────────────────────────┘
```

**Create Recipe - Step 2 (Add Ingredients)**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Create Recipe                       [Step 2 of 3] │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  ✓ Baguette Francesa │ Bread │ Yield: 10 units      │
│                                                       │
│  Recipe Ingredients (1 minimum)                      │
│  ────────────────────────────────────────────────    │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │  Ingredient #1                             │ [🗑️]  │
│  │  ──────────────────────────────────────    │     │
│  │  Ingredient *                              │     │
│  │  [▼ Harina de trigo 000______________]     │     │
│  │                                             │     │
│  │  Quantity *        Unit *                  │     │
│  │  [_____] kg   [▼ Kilograms_______]         │     │
│  │                                             │     │
│  │  ☐ Optional ingredient (e.g., optional     │     │
│  │     decoration or variation)               │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  [+ Add Another Ingredient]                          │
│                                                       │
│  💡 Tip: Add ingredients in the order you use them   │
│     during production for easier reference.          │
│                                                       │
│  Estimated Cost: Calculating...                      │
│  (Cost per unit will be calculated automatically     │
│   based on ingredient prices)                        │
│                                                       │
│  [← Back]         [Skip to Review] [Add Instructions →]│
└──────────────────────────────────────────────────────┘
```

**After Adding Ingredient**:

```
│  ┌────────────────────────────────────────────┐     │
│  │  ✓ Ingredient #1                           │ [⋮]  │
│  │  ──────────────────────────────────────    │     │
│  │  🌾 Harina de trigo 000                    │     │
│  │  1.5 kg  │  €0.75/kg  │  Cost: €1.13       │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │  Ingredient #2                             │ [🗑️]  │
│  │  [Empty - Click to add]                    │     │
│  └────────────────────────────────────────────┘     │
```

**Create Recipe - Step 3 (Instructions - Optional)**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Create Recipe                       [Step 3 of 3] │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  ✓ Baguette Francesa │ 4 ingredients │ €2.45/batch  │
│                                                       │
│  Production Instructions (Optional)                  │
│  ────────────────────────────────────────────────    │
│  Add step-by-step instructions to help your team     │
│  produce this recipe consistently.                   │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │  Step 1: Mixing                            │ [⋮]  │
│  │  [________________________________]         │     │
│  │  Duration: [___] min  │  Temp: [___]°C     │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  [+ Add Step]                                        │
│                                                       │
│  💡 You can skip this for now and add instructions   │
│     later. The recipe will still work for costing.   │
│                                                       │
│  ▼ Advanced Options (Optional)                       │
│  ────────────────────────────────────────────────    │
│  ▶ Add process stages, equipment, yield notes        │
│                                                       │
│  [← Back to Ingredients]    [Skip] [Create Recipe →] │
└──────────────────────────────────────────────────────┘
```

**Fields (Complete List)**:

**Step 1 - Recipe Info**:
| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `name` | text | Yes | Min 2 chars, unique | "The name of this recipe/product" |
| `category` | select | Yes | Must select | "Type of baked good" |
| `yield_quantity` | number | Yes | >0 | "Number of units this recipe makes" |
| `yield_unit` | select | No | Default: "units" | "What does this recipe produce?" |
| `prep_time_minutes` | number | No | >0 | "Preparation time" |
| `description` | textarea | No | Max 500 chars | "Notes about this recipe" |

**Step 2 - Ingredients (List)**:
| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `ingredient_id` | select | Yes | Must exist in inventory | "Select from your inventory" |
| `quantity` | number | Yes | >0 | "Amount needed for this recipe" |
| `unit` | select | Yes | Must match ingredient unit or convertible | "Measurement unit" |
| `is_optional` | boolean | No | Default: false | "Optional or decoration ingredient" |
| `ingredient_order` | number | Auto | Auto-assigned | "Order in list" |

**Step 3 - Instructions (Optional)**:
| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `process_stages` | list | No | - | "Mixing, Proofing, Baking, etc." |
| `equipment_needed` | list | No | - | "Required equipment" |

**After Creating Recipes**:

```
┌──────────────────────────────────────────────────────┐
│  📝 Your Recipes (3 created) ✓                       │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 🥖 Baguette Francesa                       │ [⋮]  │
│  │    Bread  │  Yield: 10 units               │     │
│  │    Cost: €2.45/batch (€0.25/unit)          │     │
│  │    Ingredients: 4                          │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 🍞 Pan de Molde                            │ [⋮]  │
│  │    Bread  │  Yield: 2 loaves               │     │
│  │    Cost: €3.20/batch (€1.60/loaf)          │     │
│  │    Ingredients: 7                          │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  [+ Create Recipe] [Use Template]                    │
│                                                       │
│  ✅ Awesome! You've created 3 recipes                │
│     Total recipe value: €8.15                        │
│                                                       │
│  [← Back to Inventory]       [Continue to Quality →] │
└──────────────────────────────────────────────────────┘
```

**Validation**:
- **Minimum**: 1 recipe required
- **Real-time**:
  - Check ingredient availability (must be in inventory from Step 7)
  - Calculate cost as ingredients are added
  - Warn if unit mismatch (e.g., selecting grams when ingredient is in kg)
- **Business Rules**:
  - Must have ≥1 non-optional ingredient
  - Show warning if recipe uses >50% of current inventory stock

**Navigation**:
- **Continue**: Enabled when ≥1 recipe created
- **Skip**: Allowed with strong warning: "Recipes are essential for production planning. Skip anyway?"

**Backend**:
- Save recipe via `POST /api/v1/recipes/`
- For each ingredient: Save via recipe ingredients endpoint
- Mark step `recipes-setup` as completed
- Store count: `{recipes_added: 3, total_cost_value: 8.15}`

**Smart Features**:
- **Auto-Cost Calculation**: Real-time cost per batch and per unit
- **Unit Converter**: "Convert quantity" button for different units
- **Duplicate Recipe**: "Copy and modify" for variations
- **Ingredient Substitutions**: "Add substitution" for alternative ingredients

---

#### **Step 9: Define Quality Standards** (`quality-setup`)
**Purpose**: Set up quality checks for production monitoring

**User Job**: *"Define quality standards so my team knows what checks to perform and the system can track quality metrics"*

**Why This Step**:
> "Quality checks ensure consistent output and help you identify issues early. Define what 'good' looks like for each stage of production."

**What Users Need to Add**: Minimum 2 quality checks (recommended 5-8 across stages)

**Form Type**: **Wizard-Enhanced List with Stage Selection**

**UI Flow**:

```
┌──────────────────────────────────────────────────────┐
│  Step 5 of 7: Define Quality Standards               │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  ✅ Quality Checks                                    │
│  Standards for consistent production                 │
│                                                       │
│  [===================================>] 86% Complete │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  Why This Matters                            │   │
│  │  ─────────────────────────────────────────── │   │
│  │  Quality tracking helps you:                 │   │
│  │  • Maintain consistent product standards     │   │
│  │  • Train new team members                    │   │
│  │  • Identify production issues early          │   │
│  │  • Track quality metrics over time           │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  📝 Quality Checks (2 min required, 5 ideal) │   │
│  │                                               │   │
│  │  [+ Add Quality Check] [Use Template Set]    │   │
│  │                                               │   │
│  │  (Empty state)                                │   │
│  │  "Define checks for key production stages"   │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  💡 Quick Start: Use our template set of common      │
│     quality checks for bakeries. Customize after.    │
│                                                       │
│  [← Back to Recipes]              [Skip] [Continue →]│
│  (disabled until 2 checks added)                     │
└──────────────────────────────────────────────────────┘
```

**Quality Template Set**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Add Quality Check Template Set                    │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  We'll add common quality checks for each production │
│  stage. You can edit or remove any check.            │
│                                                       │
│  Mixing Stage:                                       │
│  ☑️ Dough temperature (18-24°C)                      │
│  ☑️ Dough consistency (smooth, elastic)              │
│                                                       │
│  Proofing Stage:                                     │
│  ☑️ Dough volume (doubled in size)                   │
│  ☑️ Proofing time (60-90 min)                        │
│                                                       │
│  Baking Stage:                                       │
│  ☑️ Internal temperature (95-98°C for bread)         │
│  ☑️ Crust color (golden brown)                       │
│                                                       │
│  Cooling Stage:                                      │
│  ☑️ Cooling time (30-45 min before packaging)        │
│                                                       │
│  Final Product:                                      │
│  ☑️ Weight (within 5% of target)                     │
│  ☑️ Visual inspection (no defects)                   │
│                                                       │
│  [Deselect All] [Cancel]      [Add Selected (9) →]   │
└──────────────────────────────────────────────────────┘
```

**Manual Add Quality Check**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Add Quality Check                                 │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  Check Information                                   │
│  ────────────────────────────────────────────────    │
│  Check Name *                                        │
│  [_____________________________________________]      │
│   e.g., "Dough temperature", "Crust color"            │
│                                                       │
│  Description                                         │
│  [_____________________________________________]      │
│   What to check and why                              │
│                                                       │
│  Production Stage *                                  │
│  [☑️ Mixing] [☑️ Proofing] [☑️ Baking] [☑️ Cooling]  │
│   (Select all stages where this check applies)       │
│                                                       │
│  Check Type *                                        │
│  [▼ Select type_______________________]              │
│      ├─ Visual Inspection                            │
│      ├─ Temperature Measurement                      │
│      ├─ Weight Measurement                           │
│      ├─ Time Tracking                                │
│      ├─ Yes/No Check                                 │
│      └─ Numeric Range                                │
│                                                       │
│  ▼ Pass Criteria (appears based on check type)      │
│  ────────────────────────────────────────────────    │
│  [For Temperature: Min/Max range fields]             │
│  [For Visual: Description of acceptable appearance]  │
│  [For Weight: Target weight ± tolerance]             │
│                                                       │
│  Priority                                            │
│  ( ) Critical  ( ) Important  (•) Standard           │
│                                                       │
│  [Cancel]             [Add Another] [Save & Done →]  │
└──────────────────────────────────────────────────────┘
```

**Fields**:

| Field | Type | Required | Validation | Help Text |
|-------|------|----------|------------|-----------|
| `name` | text | Yes | Min 3 chars | "Short name for this check" |
| `description` | textarea | No | Max 500 chars | "What to check and why it matters" |
| `production_stages` | multi-select | Yes | ≥1 stage | "When to perform this check" |
| `check_type` | select | Yes | Must select | "How to measure this quality aspect" |
| `pass_criteria` | varies | Conditional | Depends on type | "What defines a pass" |
| `priority` | select | No | Default: Standard | "Critical, Important, or Standard" |

**After Adding Quality Checks**:

```
┌──────────────────────────────────────────────────────┐
│  📝 Your Quality Checks (7 added) ✓                  │
│                                                       │
│  Group by: [Stage ▼]                                 │
│                                                       │
│  🔧 Mixing (2 checks)                                │
│  ┌────────────────────────────────────────────┐     │
│  │ 🌡️ Dough Temperature                        │ [⋮]  │
│  │    Range: 18-24°C  │  Priority: Critical    │     │
│  └────────────────────────────────────────────┘     │
│  ┌────────────────────────────────────────────┐     │
│  │ ✋ Dough Consistency                        │ [⋮]  │
│  │    Visual check  │  Priority: Important     │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  🍞 Baking (3 checks)                                │
│  [... more checks ...]                               │
│                                                       │
│  [+ Add Check] [Use Template]                        │
│                                                       │
│  ✅ Great! You've defined 7 quality standards        │
│                                                       │
│  [← Back to Recipes]            [Continue to Team →] │
└──────────────────────────────────────────────────────┘
```

**Validation**:
- **Minimum**: 2 checks required
- **Business Rules**:
  - Recommend at least one "Critical" check
  - Warn if no checks for "Baking" stage (common oversight)

**Navigation**:
- **Continue**: Enabled when ≥2 checks added
- **Skip**: Allowed (quality is important but not blocking for basic operations)

**Backend**:
- Save via `POST /api/v1/quality-templates/`
- Mark step `quality-setup` as completed
- Store count: `{quality_checks_added: 7, critical_checks: 2}`

---

### PHASE 4: TEAM & FINALIZATION (Optional but Recommended)

#### **Step 10: Add Team Members** (`team-setup`)
**Purpose**: Set up user accounts for bakery staff

**User Job**: *"Add my team so they can access the system and we can coordinate work"*

**Why This Step**:
> "Adding team members allows you to assign tasks, track who does what, and give everyone the tools they need to work efficiently."

**What Users Need to Add**: Optional (0-10 team members)

**Form Type**: **Simple List Entry (Invite-Based)**

**UI Flow**:

```
┌──────────────────────────────────────────────────────┐
│  Step 6 of 7: Add Team Members (Optional)            │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  👥 Team                                              │
│  Your bakery staff                                   │
│                                                       │
│  [========================================] 93% Complete│
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  Why This Matters                            │   │
│  │  ─────────────────────────────────────────── │   │
│  │  Team access enables:                        │   │
│  │  • Task assignment & coordination            │   │
│  │  • Production tracking by person             │   │
│  │  • Quality check accountability              │   │
│  │  • Permission-based access control           │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  📝 Team Members (Optional)                  │   │
│  │                                               │   │
│  │  [+ Invite Team Member]                      │   │
│  │                                               │   │
│  │  (Empty state)                                │   │
│  │  "Invite your staff to collaborate"          │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  💡 You can add team members later from Settings.    │
│     Skip this step if you're the only user for now.  │
│                                                       │
│  [← Back to Quality]      [Skip This Step] [Continue →]│
│  (always enabled - this step is optional)            │
└──────────────────────────────────────────────────────┘
```

**Invite Team Member Modal**:

```
┌──────────────────────────────────────────────────────┐
│  ✕ Invite Team Member                                │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  Member Information                                  │
│  ────────────────────────────────────────────────    │
│  Name *                                              │
│  [_____________________________________________]      │
│                                                       │
│  Email *                                             │
│  [_____________________________________________]      │
│   They'll receive an invitation to join             │
│                                                       │
│  Role *                                              │
│  [▼ Select role_______________________]              │
│      ├─ Baker (can view & record production)         │
│      ├─ Manager (can edit recipes & inventory)       │
│      └─ Admin (full access)                          │
│                                                       │
│  [Cancel]              [Send Invitation →]           │
└──────────────────────────────────────────────────────┘
```

**After Adding Team**:

```
│  📝 Team Members (3 invited) ✓                       │
│                                                       │
│  ┌────────────────────────────────────────────┐     │
│  │ 👤 María García                            │ [⋮]  │
│  │    maria@bakery.com  │  Role: Manager      │     │
│  │    Status: Invitation sent                 │     │
│  └────────────────────────────────────────────┘     │
│                                                       │
│  [... more team members ...]                         │
```

**Validation**: None (optional step)

**Navigation**:
- **Continue**: Always enabled
- **Skip**: Always allowed

**Backend**:
- Send invitation via `POST /api/v1/team/invitations/`
- Mark step `team-setup` as completed
- Store count: `{team_invitations_sent: 3}`

---

#### **Step 11: Review & Launch** (`setup-completion`)
**Purpose**: Celebrate completion and show what's now possible

**User Job**: *"Verify I've set everything up correctly and start using the system"*

**Why This Step**:
> "You're ready to go! Let's review what you've set up and show you what's now available."

**UI Flow**:

```
┌──────────────────────────────────────────────────────┐
│  Step 7 of 7: You're All Set! 🎉                     │
│  ════════════════════════════════════════════════════ │
│                                                       │
│  ✅ Setup Complete                                    │
│  Your bakery system is ready                         │
│                                                       │
│  [=========================================>] 100%    │
│                                                       │
│  ┌──────────────────────────────────────────────┐   │
│  │  🎊 Congratulations!                         │   │
│  │  ─────────────────────────────────────────── │   │
│  │  Your bakery management system is fully      │   │
│  │  configured and ready to help you run your   │   │
│  │  operations more efficiently.                │   │
│  └──────────────────────────────────────────────┘   │
│                                                       │
│  📊 Setup Summary                                    │
│  ────────────────────────────────────────────────    │
│  ✅ 2 Suppliers added                                │
│  ✅ 12 Inventory items set up                        │
│  ✅ 3 Recipes created (Total value: €8.15)           │
│  ✅ 7 Quality checks defined                         │
│  ✅ 3 Team members invited                           │
│                                                       │
│  🎯 What You Can Do Now                              │
│  ────────────────────────────────────────────────    │
│  ┌──────────────────────────────────────────┐       │
│  │ 📦 Track Inventory                       │ [→]   │
│  │    Real-time stock levels & alerts       │       │
│  └──────────────────────────────────────────┘       │
│  ┌──────────────────────────────────────────┐       │
│  │ 👨‍🍳 Create Production Orders              │ [→]   │
│  │    Plan daily baking with your recipes   │       │
│  └──────────────────────────────────────────┘       │
│  ┌──────────────────────────────────────────┐       │
│  │ 💰 Analyze Costs & Profitability         │ [→]   │
│  │    See exact costs per recipe            │       │
│  └──────────────────────────────────────────┘       │
│  ┌──────────────────────────────────────────┐       │
│  │ 📈 View AI Forecasts                     │ [→]   │
│  │    Demand predictions for your products  │       │
│  └──────────────────────────────────────────┘       │
│                                                       │
│  💡 Quick Start Guide                                │
│  ────────────────────────────────────────────────    │
│  [📘 View Tutorial] [❓ Watch Demo Video]            │
│                                                       │
│  [← Back to Team]            [Go to Dashboard →]     │
└──────────────────────────────────────────────────────┘
```

**Validation**: None (review step)

**Navigation**:
- **Continue**: Go to dashboard (system fully operational)

**Backend**:
- Mark step `setup-completion` as completed
- Set overall onboarding status to "completed"
- Trigger: Send welcome email with quick start guide

---

## Progress Tracking & Navigation

### Overall Progress Indicator

**Visual Design** (appears at top of every step):

```
[====================>----------] 57% Complete
Step 3 of 7: Set Up Inventory Items
```

**Progress Calculation**:
```typescript
// Weight steps by estimated complexity/time
const STEP_WEIGHTS = {
  'setup-welcome': 5,        // 2 min (light)
  'suppliers-setup': 10,     // 5 min (moderate)
  'inventory-items-setup': 20, // 10 min (heavy)
  'recipes-setup': 20,       // 10 min (heavy)
  'quality-setup': 15,       // 7 min (moderate)
  'team-setup': 10,          // 5 min (optional)
  'setup-completion': 5      // 2 min (light)
};

const totalWeight = Object.values(STEP_WEIGHTS).reduce((a, b) => a + b);

function calculateProgress(currentStepIndex: number, completedSteps: string[]): number {
  let completedWeight = 0;

  // Add weight of fully completed steps
  completedSteps.forEach(stepId => {
    completedWeight += STEP_WEIGHTS[stepId] || 0;
  });

  // Add 50% of current step weight (user is midway through)
  const currentStepId = STEPS[currentStepIndex].id;
  completedWeight += (STEP_WEIGHTS[currentStepId] || 0) * 0.5;

  return Math.round((completedWeight / totalWeight) * 100);
}
```

### Step Navigation States

**Continue Button States**:

| Step | Enable Condition | Button Text | Behavior |
|------|------------------|-------------|----------|
| Welcome | Always | "Let's Get Started →" | Navigate to Step 6 |
| Suppliers | ≥1 supplier added | "Continue to Inventory →" | Navigate to Step 7 |
| Inventory | ≥3 items added | "Continue to Recipes →" | Navigate to Step 8 |
| Recipes | ≥1 recipe created | "Continue to Quality →" | Navigate to Step 9 |
| Quality | ≥2 checks added | "Continue to Team →" | Navigate to Step 10 |
| Team | Always (optional) | "Continue to Review →" | Navigate to Step 11 |
| Completion | Always | "Go to Dashboard →" | Exit wizard → Dashboard |

**Back Button Behavior**:
- Always visible (except on Step 5)
- Goes to previous step WITHOUT losing data (data is saved on each step completion)
- Disabled during save operations

**Skip Button**:
- Visible on Steps 5, 9, 10, 11 (optional/skippable steps)
- Shows confirmation dialog: "Are you sure you want to skip [Step Name]? You can set this up later from Settings."
- On confirm: Marks step as "skipped" (not "completed") and advances

### Mobile Navigation Patterns

**Small Screens (<640px)**:
- Progress bar: Full width, height: 8px
- Step title: Larger font (18px)
- Buttons: Stacked vertically
- Step indicators: Horizontal scroll

```
[========>------] 43%

📦 Inventory Items
Step 3 of 7

[Main content...]

[← Back       ]
[Skip This Step]
[Continue →    ]
```

**Desktop (≥640px)**:
- Progress bar: Full width, height: 12px
- Buttons: Horizontal layout
- Step indicators: All visible

### Save Progress & Resume Later

**Auto-Save Behavior**:
- Each entity added is immediately saved to backend
- Step is marked "completed" when user clicks Continue
- If user closes browser mid-step, data is preserved but step not marked complete

**Resume Behavior**:
```typescript
function determineResumeStep(userProgress: UserProgress): number {
  // Find first incomplete step
  for (let i = 0; i < SETUP_STEPS.length; i++) {
    const step = SETUP_STEPS[i];
    const stepProgress = userProgress.steps.find(s => s.step_name === step.id);

    if (!stepProgress?.completed && stepProgress?.status !== 'skipped') {
      return i; // Resume here
    }
  }

  // All steps complete → go to last step (completion)
  return SETUP_STEPS.length - 1;
}
```

**Resume Entry Point**:
- Dashboard shows "Complete Setup" banner if wizard not finished
- Banner shows: "You're 57% done! Continue setting up →"
- Click banner → Resume at first incomplete step

### Exit Points & Persistence

**User Can Exit At Any Time**:
1. Click browser back button
2. Click dashboard link in sidebar
3. Close browser tab

**On Exit (Not Completed)**:
- All data entered so far is saved
- Progress tracked in backend (`user_progress` table)
- Dashboard shows persistent banner: "Complete your setup to unlock all features"

**Re-Entry**:
- User clicks "Complete Setup" from dashboard
- System loads user progress and resumes at correct step
- Previously entered data is loaded (suppliers, inventory, recipes, etc.)

---

## Validation & Error Handling

### Real-Time Validation Strategy

**Field-Level Validation**:
- Trigger: `onChange` (debounced 300ms for text inputs)
- Display: Inline error message below field
- State: Field border turns red, error icon appears

**Example**:
```typescript
// Supplier name field
const [nameError, setNameError] = useState<string | null>(null);

const validateName = debounce((value: string) => {
  if (value.length < 2) {
    setNameError("Supplier name must be at least 2 characters");
    return false;
  }

  // Check for duplicates (async)
  checkDuplicateSupplier(value).then(isDuplicate => {
    if (isDuplicate) {
      setNameError("A supplier with this name already exists");
    } else {
      setNameError(null);
    }
  });

  return true;
}, 300);
```

**Cross-Field Validation**:
- Trigger: When dependent field changes
- Example: `reorder_point` must be ≤ `low_stock_threshold`

```typescript
function validateInventoryItem(item: InventoryItemForm): ValidationErrors {
  const errors: ValidationErrors = {};

  if (item.reorder_point && item.low_stock_threshold) {
    if (item.reorder_point > item.low_stock_threshold) {
      errors.reorder_point = "Reorder point must be less than or equal to low stock threshold";
    }
  }

  return errors;
}
```

**Step-Level Validation**:
- Trigger: When user clicks "Continue"
- Validates all requirements for current step
- If validation fails: Show error summary, scroll to first error

### Error Message Patterns

**Tone**: Helpful, not judgmental

| Error Type | Bad Message | Good Message |
|------------|-------------|--------------|
| Required field | "This field is required" | "Please enter a supplier name to continue" |
| Format error | "Invalid email" | "Please enter a valid email address (e.g., name@bakery.com)" |
| Duplicate | "Duplicate entry" | "You already have a supplier named 'Molinos'. Try a different name." |
| Dependency | "Dependency not met" | "Please add at least 3 inventory items before creating recipes" |

**Visual Pattern**:
```
┌────────────────────────────────────────┐
│  ⚠️ Please fix these issues:           │
│  ────────────────────────────────────  │
│  • Supplier name is required           │
│  • Email format is invalid             │
│                                        │
│  [Fix Issues]                          │
└────────────────────────────────────────┘
```

### Preventing Invalid States

**Dependency Enforcement**:
1. **Suppliers before Inventory**: Can't assign supplier to inventory item if no suppliers exist
   - Solution: Show "Add supplier" link inline in inventory form

2. **Inventory before Recipes**: Can't select ingredients if no inventory items exist
   - Solution: Wizard step order enforces this naturally

3. **No Empty Steps**: Can't mark step complete if minimum requirements not met
   - Solution: Disable "Continue" button until requirements met

**Business Rule Validation**:
```typescript
// Inventory item validation
function validateInventorySetup(items: InventoryItem[]): ValidationWarning[] {
  const warnings: ValidationWarning[] = [];

  // Warn if no flour (common for bakeries)
  const hasFlour = items.some(item =>
    item.category === 'flour_grains' ||
    item.name.toLowerCase().includes('flour')
  );

  if (!hasFlour) {
    warnings.push({
      severity: 'warning',
      message: "Most bakeries use flour. Did you mean to skip it?",
      action: "Add flour items",
      onAction: () => openAddItemModal({ category: 'flour_grains' })
    });
  }

  return warnings;
}
```

### Error Recovery Strategies

**Network Errors**:
- Retry failed requests automatically (max 3 attempts)
- Show toast: "Connection lost. Retrying..."
- If all retries fail: Show error with "Try Again" button

**Validation Errors**:
- Highlight all invalid fields
- Show summary of errors at top of form
- Scroll to first error
- Provide "Fix for me" suggestions where possible

**Example Recovery UI**:
```
┌────────────────────────────────────────┐
│  ❌ Couldn't save supplier             │
│                                        │
│  Network connection lost. Your data   │
│  is safe - we'll try again.           │
│                                        │
│  [Try Again] [Continue Offline]       │
└────────────────────────────────────────┘
```

---

## Smart Features

### 1. Intelligent Templates

**Starter Template for Inventory**:
- Pre-populated with 25 common bakery ingredients
- Categorized (Flour & Grains, Dairy, Sweeteners, etc.)
- Suggested units and typical low stock thresholds
- User can select which to import

**Recipe Templates**:
- Library of 15+ common recipes (baguette, white bread, croissant, muffins, etc.)
- User selects template → System maps template ingredients to user's inventory
- If ingredient missing: Prompt to add it or substitute

**Quality Check Templates**:
- Pre-configured checks for each production stage
- Based on industry best practices
- User can enable/disable individual checks

### 2. Auto-Suggestions & Smart Defaults

**Category Auto-Detection** (ML-powered):
```typescript
function suggestCategory(itemName: string): string {
  // ML model trained on bakery inventory data
  const prediction = categoryModel.predict(itemName);

  // Examples:
  // "harina" → "flour_grains"
  // "azúcar" → "sweeteners"
  // "leche" → "dairy_eggs"

  return prediction.category;
}
```

**Supplier Recommendations**:
- When adding inventory item, suggest supplier based on item category
- "Flour items usually come from: [Molinos del Norte ▼]"

**Unit Conversion Helper**:
```
Adding: Harina de trigo (1000g)
💡 Tip: 1000g = 1kg. Switch to kilograms? [Yes] [No]
```

**Cost Estimation**:
- If user doesn't know ingredient cost, suggest typical market price
- "Average cost for flour in Spain: €0.60-0.80/kg"

### 3. Bulk Import & Export

**CSV/Excel Import**:
- Upload spreadsheet → Map columns → Import in bulk
- Template downloadable: "Download sample spreadsheet"
- Validation before import: "Found 12 items, 2 have errors. Fix them?"

**Supported Entities**:
- Suppliers (name, type, contact, email, phone)
- Inventory Items (name, category, unit, supplier, cost, stock levels)
- Recipes (name, category, yield + separate ingredient list)

### 4. Contextual Help System

**Help Tooltips**:
- (?) icon next to complex fields
- Hover/click to see explanation

```
Low Stock Threshold (?)
────────────────────────
When inventory falls below this level,
you'll receive an alert to reorder.

Recommended: 2-3 weeks of typical usage

Example: If you use 50kg flour per week,
set threshold to 100-150kg
```

**Video Tutorials**:
- Embedded 30-60 second videos for complex steps
- "Watch how to create a recipe (45 sec)"

**Inline Examples**:
- Every field shows example value
- "e.g., Molinos del Norte" for supplier name
- "e.g., 1.5" for recipe ingredient quantity

### 5. Progress Celebrations & Motivation

**Milestone Animations**:
- When reaching 25%, 50%, 75% completion: Brief confetti animation
- "Great progress! You're halfway there! 🎉"

**Step Completion Feedback**:
- After each step: Success message with positive reinforcement
- "✅ Excellent! You've added 3 recipes. Your bakery is taking shape!"

**Comparison to Others** (Optional):
- "Most bakeries add 10-15 inventory items. You've added 12 - right on track!"

### 6. Intelligent Validation Warnings (Non-Blocking)

**Soft Warnings** (shown but don't prevent progress):
```
⚠️ Heads up!
You haven't set a cost for "Harina de trigo".
Recipe costing won't be accurate until you add it.

[Add Cost Now] [I'll Do It Later]
```

**Proactive Suggestions**:
```
💡 Suggestion
You've added "Baguette" recipe. Want to add a
"Whole Wheat Baguette" variation? We can copy
the recipe and you just adjust the flour.

[Create Variation] [No Thanks]
```

---

## Technical Implementation Notes

### Component Architecture

**Proposed Structure**:
```
frontend/src/components/domain/setup-wizard/
├── SetupWizard.tsx                    # Main wizard component (similar to OnboardingWizard)
├── steps/
│   ├── WelcomeStep.tsx
│   ├── SuppliersSetupStep.tsx
│   ├── InventorySetupStep.tsx
│   ├── RecipesSetupStep.tsx
│   ├── QualitySetupStep.tsx
│   ├── TeamSetupStep.tsx
│   └── CompletionStep.tsx
├── components/
│   ├── StepProgress.tsx               # Progress bar & indicators
│   ├── StepNavigation.tsx             # Back/Skip/Continue buttons
│   ├── AddEntityModal.tsx             # Generic modal for adding items
│   ├── TemplateSelector.tsx           # Template gallery
│   └── EntityList.tsx                 # List view for added items
└── hooks/
    ├── useSetupProgress.ts
    ├── useStepValidation.ts
    └── useAutoSave.ts
```

### Reusing Existing Patterns

**From OnboardingWizard**:
- Step configuration structure (`StepConfig` interface)
- Progress tracking (`useUserProgress` hook)
- Step completion (`useMarkStepCompleted` mutation)
- Step navigation logic
- Mobile/desktop responsive design
- Progress percentage calculation

**From AddModal**:
- Field configuration (`AddModalField` interface)
- Section-based organization
- ListFieldRenderer for managing collections
- Validation infrastructure
- Loading states & success animations

**Integration Strategy**:
```typescript
// Extend existing StepConfig to support setup wizard steps
interface SetupStepConfig extends StepConfig {
  id: string;
  title: string;
  description: string;
  component: React.ComponentType<SetupStepProps>;
  minRequired?: number;           // Minimum items to proceed
  isOptional?: boolean;           // Can be skipped
  estimatedMinutes?: number;      // For progress calculation
  dependencies?: string[];        // Step IDs that must be complete first
}
```

### Backend API Requirements

**New Endpoints Needed**:
```typescript
// Setup-specific progress tracking
GET  /api/v1/onboarding/progress/:userId?type=setup
POST /api/v1/onboarding/steps/:stepName/complete

// Bulk operations
POST /api/v1/inventory/ingredients/bulk           // Bulk create from template
POST /api/v1/quality-templates/bulk               // Bulk create checks
POST /api/v1/inventory/ingredients/import         // CSV import

// Templates
GET  /api/v1/templates/inventory-starter          // Get starter inventory
GET  /api/v1/templates/recipes/:category          // Get recipe templates
GET  /api/v1/templates/quality-checks             // Get quality check templates

// Smart suggestions
POST /api/v1/ml/suggest-category                  // ML category suggestion
GET  /api/v1/market-data/average-prices           // Average ingredient prices
```

**Existing Endpoints to Use**:
```typescript
// Already available
POST /api/v1/suppliers/
POST /api/v1/inventory/ingredients/
POST /api/v1/recipes/
POST /api/v1/quality-templates/
POST /api/v1/team/invitations/
```

### State Management

**Setup Wizard State**:
```typescript
interface SetupWizardState {
  currentStepIndex: number;
  completedSteps: string[];
  skippedSteps: string[];
  stepData: {
    [stepId: string]: {
      itemsAdded: number;
      totalValue?: number;
      completedAt?: string;
      // Step-specific data
    };
  };
  isInitialized: boolean;
  progressPercentage: number;
}
```

**Persisted State** (in backend):
```sql
-- user_progress table (already exists)
user_id: UUID
current_step: VARCHAR  -- e.g., "inventory-items-setup"
completion_percentage: INTEGER
steps: JSONB           -- Array of step progress objects
completed_at: TIMESTAMP (nullable)

-- step progress object structure
{
  "step_name": "suppliers-setup",
  "completed": true,
  "skipped": false,
  "completed_at": "2025-11-06T10:30:00Z",
  "data": {
    "suppliers_added": 2,
    "used_template": false
  }
}
```

### Performance Considerations

**Lazy Loading**:
- Load step components on-demand (React.lazy)
- Preload next step component in background

**Optimistic Updates**:
- Show success immediately, sync in background
- If sync fails, rollback with notification

**Caching**:
- Cache supplier/inventory lists in React Query
- Invalidate on mutations

**Debouncing**:
- Search/filter operations: 300ms debounce
- Validation: 300ms debounce for text inputs
- Auto-save draft: 1000ms debounce

### Accessibility (a11y)

**Keyboard Navigation**:
- Tab order: Top to bottom, left to right
- Enter: Submit form/Continue
- Esc: Close modal
- Arrow keys: Navigate step indicators

**Screen Reader Support**:
```tsx
<div role="progressbar" aria-valuenow={57} aria-valuemin={0} aria-valuemax={100}>
  Step 3 of 7: Set Up Inventory Items (57% complete)
</div>

<button
  aria-label="Continue to Recipes step"
  disabled={!canContinue}
  aria-disabled={!canContinue}
>
  Continue →
</button>
```

**Focus Management**:
- When step changes: Focus on step title
- When modal opens: Focus on first input
- When error: Focus on first invalid field

### Internationalization (i18n)

**Translation Keys**:
```json
{
  "setup_wizard": {
    "steps": {
      "welcome": {
        "title": "Welcome & Setup Overview",
        "description": "Let's set up your bakery operations",
        ...
      },
      "suppliers": {
        "title": "Add Suppliers",
        "description": "Your ingredient and material providers",
        "min_required": "Add at least {count} supplier to continue",
        ...
      }
    },
    "navigation": {
      "back": "Back",
      "skip": "Skip This Step",
      "continue": "Continue",
      ...
    }
  }
}
```

---

## Success Metrics

### Leading Indicators (During Wizard)

**Completion Rate**:
- **Metric**: % of users who complete all 7 steps
- **Target**: ≥80% completion rate
- **Measurement**: `(users_completed / users_started) * 100`

**Drop-Off Points**:
- **Metric**: Where users abandon the wizard
- **Target**: No single step has >15% drop-off
- **Measurement**: Track step entry vs. step completion

**Time to Complete**:
- **Metric**: Average time from Step 5 to Step 11
- **Target**: 15-25 minutes (matches estimate)
- **Measurement**: `completion_timestamp - start_timestamp`

**Data Quality Score**:
- **Metric**: % of records with complete, valid data
- **Target**: ≥90% of entities have all required + recommended fields
- **Calculation**:
```typescript
function calculateDataQuality(entity: any): number {
  const requiredFields = entity.requiredFields.filter(f => !!entity[f]);
  const optionalFields = entity.optionalFields.filter(f => !!entity[f]);

  return (requiredFields.length + (optionalFields.length * 0.5)) /
         (entity.requiredFields.length + entity.optionalFields.length);
}
```

**Template Usage Rate**:
- **Metric**: % of users who use starter templates
- **Target**: ≥60% use at least one template
- **Hypothesis**: Templates speed up setup and improve data quality

### Lagging Indicators (Post-Wizard)

**Feature Adoption Rate**:
- **Metric**: % of completed users actively using core features within 7 days
- **Features**: Inventory tracking, recipe costing, production planning, quality checks
- **Target**: ≥70% use ≥2 features weekly

**System Reliance**:
- **Metric**: Daily active usage frequency
- **Target**: ≥5 days per week for production-focused users
- **Measurement**: DAU/MAU ratio

**User Satisfaction** (NPS):
- **Metric**: Net Promoter Score for setup experience
- **Survey**: "How likely are you to recommend this setup process?" (0-10)
- **Target**: NPS ≥40

**Time to First Value**:
- **Metric**: Days from registration to first meaningful action (e.g., create production order, record sale)
- **Target**: ≤3 days (with wizard) vs. 7-10 days (without)

**Support Ticket Reduction**:
- **Metric**: "How do I..." support tickets related to setup
- **Target**: 50% reduction vs. previous un-guided experience

### Business Impact (Long-term)

**Operational Efficiency**:
- **Metric**: Waste reduction (% decrease in spoilage/overstock)
- **Target**: 15-20% reduction in first 3 months
- **Attribution**: Users with complete setup vs. incomplete

**Cost Visibility**:
- **Metric**: % of users who can accurately report per-recipe costs
- **Target**: 100% of users with recipes can see cost breakdowns
- **Value**: Enables pricing decisions, profitability analysis

**Quality Consistency**:
- **Metric**: Quality check compliance rate
- **Target**: ≥80% of production runs have quality checks recorded
- **Attribution**: Users who defined quality standards in wizard

### A/B Testing Opportunities

**Test Variations**:

1. **Template vs. Manual Entry**
   - A: Show templates prominently (current design)
   - B: Manual entry default, templates as optional
   - Hypothesis: Templates increase completion rate & speed

2. **Step Granularity**
   - A: 7 steps (current design)
   - B: 4 steps (combine some steps)
   - Hypothesis: Fewer steps reduce cognitive load, increase completion

3. **Progress Celebration**
   - A: Milestone animations + messages (current design)
   - B: No celebrations, just progress bar
   - Hypothesis: Celebrations increase motivation & completion

4. **Skip vs. No-Skip for Optional Steps**
   - A: Allow skipping Team & Quality steps
   - B: Encourage completion ("3 more minutes to 100%")
   - Hypothesis: Encouraging completion increases feature adoption

### Tracking Implementation

**Analytics Events**:
```typescript
// Track key events
analytics.track('setup_wizard_started', {
  user_id, timestamp
});

analytics.track('setup_step_completed', {
  user_id, step_id, items_added, duration_seconds, used_template
});

analytics.track('setup_step_skipped', {
  user_id, step_id, reason
});

analytics.track('setup_wizard_completed', {
  user_id, total_duration, suppliers_count, inventory_count, recipes_count,
  quality_checks_count, team_count, used_templates_count
});

analytics.track('setup_wizard_abandoned', {
  user_id, last_step_id, completion_percentage, duration
});
```

**Dashboard Metrics**:
```
Setup Wizard Performance
─────────────────────────
Completion Rate:      82% ✓ (target: 80%)
Avg. Time:            18 min ✓ (target: 15-25 min)
Drop-off Points:      Step 7 (Inventory): 12% ✓

Data Quality Score:   91% ✓ (target: 90%)

Template Usage:       68% ✓ (target: 60%)
  - Inventory starter: 55%
  - Recipe templates:  42%
  - Quality checks:    71%

Feature Adoption (7 days post-setup):
  - Inventory tracking:   78%
  - Recipe costing:       65%
  - Production planning:  52%
  - Quality monitoring:   48%
```

---

## Implementation Roadmap

### Phase 1: Foundation (Week 1-2)
- [ ] Create SetupWizard component structure
- [ ] Implement step navigation & progress tracking
- [ ] Integrate with existing OnboardingWizard
- [ ] Build StepProgress and StepNavigation components
- [ ] Set up backend endpoints for step completion

### Phase 2: Core Steps (Week 3-5)
- [ ] Implement Welcome Step (Step 5)
- [ ] Implement Suppliers Setup Step (Step 6)
- [ ] Implement Inventory Setup Step (Step 7)
- [ ] Implement Recipes Setup Step (Step 8)
- [ ] Add real-time validation for each step

### Phase 3: Advanced Features (Week 6-7)
- [ ] Implement Quality Setup Step (Step 9)
- [ ] Implement Team Setup Step (Step 10)
- [ ] Implement Completion Step (Step 11)
- [ ] Add template systems (inventory, recipes, quality)
- [ ] Implement bulk import functionality

### Phase 4: Polish & Smart Features (Week 8)
- [ ] Add contextual help & tooltips
- [ ] Implement auto-suggestions (ML category detection)
- [ ] Add celebration animations & milestone feedback
- [ ] Optimize performance (lazy loading, caching)
- [ ] Complete i18n translations

### Phase 5: Testing & Iteration (Week 9-10)
- [ ] User testing with 10-15 bakery owners
- [ ] Fix issues identified in testing
- [ ] A/B test setup (template vs. manual entry)
- [ ] Set up analytics tracking
- [ ] Write documentation & tutorial content

### Phase 6: Launch & Monitor (Week 11+)
- [ ] Soft launch to 10% of new users
- [ ] Monitor metrics & gather feedback
- [ ] Iterate based on data
- [ ] Full rollout to all users
- [ ] Ongoing optimization

---

## Appendix: Open Questions & Decisions Needed

### Design Decisions

1. **Should we allow users to edit data from previous steps within the wizard?**
   - Option A: Yes, "Edit" button on each step summary
   - Option B: No, must exit wizard and use normal UI
   - Recommendation: Option A (better UX, keeps users in flow)

2. **How do we handle users who want to skip the entire wizard?**
   - Option A: Allow full skip, but show persistent "Incomplete Setup" banner
   - Option B: Require minimum critical path (Steps 6-8)
   - Recommendation: Option B (ensures system can function)

3. **Should recipe templates include quantities, or just ingredient lists?**
   - Option A: Full recipes with quantities (more helpful, but may not match user's scale)
   - Option B: Just ingredient lists (user fills in quantities)
   - Recommendation: Option A with prominent "Adjust quantities to your batch size" notice

4. **What happens if a user creates an entity outside the wizard (e.g., manually adds a supplier)?**
   - Option A: Wizard counts it toward requirements
   - Option B: Wizard doesn't recognize it, asks user to add via wizard
   - Recommendation: Option A (recognize all entities, wizard is just guided experience)

### Technical Questions

1. **Should we reuse existing modal components or create wizard-specific ones?**
   - Recommendation: Reuse AddModal architecture, extend with wizard-specific features

2. **How do we handle wizard state if user switches tenants mid-wizard?**
   - Recommendation: Save progress per tenant, allow resuming

3. **Should wizard data be saved in a separate table or use main entity tables?**
   - Recommendation: Use main entity tables (suppliers, inventory, etc.) + track progress in user_progress

4. **How do we handle concurrent edits (user opens wizard, also opens suppliers page)?**
   - Recommendation: Real-time sync via websockets or periodic polling

### Content & Messaging

1. **Tone: Professional vs. Friendly?**
   - Recommendation: Friendly but professional ("Let's set up..." not "Time to configure your database!")

2. **Spanish vs. English default?**
   - Recommendation: Detect from user's browser locale, allow language switch

3. **Should we use bakery-specific terminology throughout?**
   - Recommendation: Yes (e.g., "recipes" not "production formulas", "ingredients" not "inventory items")

---

## Document Status

**Version**: 1.0 (Initial Draft)
**Date**: 2025-11-06
**Status**: Ready for Review
**Next Steps**:
1. Review with product team
2. Validate design with UX team
3. Review technical feasibility with engineering
4. Conduct user interviews to validate JTBD assumptions
5. Create detailed wireframes/mockups
6. Begin Phase 1 implementation

**Related Documents**:
- `jtbd-analysis-inventory-setup.md` - Jobs To Be Done analysis
- `OnboardingWizard.tsx` - Existing onboarding implementation
- `AddModal.tsx` - Existing modal component architecture

**Reviewers**:
- [ ] Product Manager
- [ ] UX Designer
- [ ] Tech Lead
- [ ] Backend Engineer
- [ ] QA Lead

**Approval**: Pending

---

*End of Specification*
