# URL State Example - Navigation Flow

## 📍 Visual Journey Through URL Changes

### Step 1: Page Load
```
URL: https://yoursite.com/
State: Fresh start, no parameters
Bit Value: 0
```
```
┌─────────────────────────────────┐
│  What are you looking for?      │
│  ┌─────┐  ┌─────┐               │
│  │ 🚪  │  │ 🪟  │               │
│  │Door │  │Window│              │
│  └─────┘  └─────┘               │
└─────────────────────────────────┘
```

---

### Step 2: User Selects "Door"
```
URL: https://yoursite.com/?b=1&q=q-door-type
                              ↑
                              Bit 0 set (Door)
State: Door selected
Bit Value: 1 (binary: 1)
Bits Active: Door
```
```
┌─────────────────────────────────┐
│  What type of door?             │
│  ┌──────────┐  ┌──────────┐    │
│  │Storm Door│  │Patio Door│    │
│  └──────────┘  └──────────┘    │
└─────────────────────────────────┘
```

---

### Step 3: User Selects "Storm Door"
```
URL: https://yoursite.com/?b=16385&q=q-material-storm-door
                              ↑
                              16385 = 1 (Door) + 16384 (Storm Door)
State: Door + Storm Door selected
Bit Value: 16385 (binary: 100000000000001)
Bits Active: Door, Storm Door subtype

Calculation:
  Bit 0 (Door)       = 1
  Bit 14 (Storm Door)= 16384
  Total             = 16385
```
```
┌─────────────────────────────────┐
│  Select Material                 │
│  CONDITIONAL: Only showing       │
│  because some storm doors have   │
│  multiple materials              │
│  ┌─────────┐  ┌─────────┐       │
│  │Aluminum │  │  Vinyl  │       │
│  └─────────┘  └─────────┘       │
└─────────────────────────────────┘
```

---

### Step 4: User Selects "Aluminum"
```
URL: https://yoursite.com/?b=16401&q=q-color-storm-door
                              ↑
                              16401 = 1 + 16 + 16384
State: Door + Aluminum + Storm Door
Bit Value: 16401 (binary: 100000000010001)
Bits Active: Door, Aluminum, Storm Door subtype

Calculation:
  Bit 0 (Door)       = 1
  Bit 4 (Aluminum)   = 16
  Bit 14 (Storm Door)= 16384
  Total             = 16401
```
```
┌─────────────────────────────────┐
│  Select Color                    │
│  ┌───────┐ ┌───────┐ ┌───────┐ │
│  │ Black │ │ White │ │Bronze │ │
│  └───────┘ └───────┘ └───────┘ │
└─────────────────────────────────┘
```

---

### Step 5: User Selects "White"
```
URL: https://yoursite.com/?b=16529&q=q-dimensions
                              ↑
                              16529 = 1 + 16 + 128 + 16384
State: Door + Aluminum + White + Storm Door
Bit Value: 16529 (binary: 100000010010001)
Bits Active: Door, Aluminum, White, Storm Door

Calculation:
  Bit 0 (Door)       = 1
  Bit 4 (Aluminum)   = 16
  Bit 7 (White)      = 128
  Bit 14 (Storm Door)= 16384
  Total             = 16529
```
```
┌─────────────────────────────────┐
│  Enter Dimensions                │
│  Width:  [______] inches         │
│  Height: [______] inches         │
│  [Continue →]                    │
└─────────────────────────────────┘
```

---

### Step 6: View Results
```
URL: https://yoursite.com/?b=16529&q=results
State: Showing filtered products
Bit Value: 16529
Products Matched: All doors that are:
  ✓ Storm Door type (bit 14)
  ✓ Aluminum material (bit 4)
  ✓ Available in White (bit 7)
```
```
┌─────────────────────────────────┐
│  Found 3 Products               │
│  ┌─────────────────────────┐   │
│  │ STAR 6100 FULL VIEW     │   │
│  │ Code: 6100I             │   │
│  │ Aluminum, White, Bronze  │   │
│  │ [View Details]          │   │
│  └─────────────────────────┘   │
│  ┌─────────────────────────┐   │
│  │ COLUMBIA COBRA          │   │
│  │ Code: COBRAI            │   │
│  │ [View Details]          │   │
│  └─────────────────────────┘   │
└─────────────────────────────────┘
```

---

### Step 7: Click Product Detail
```
URL: https://yoursite.com/?p=6100I&b=16529
                              ↑
                              Product code added
State: Viewing specific product 6100I
Bit Value: 16529 (preserved for "back" navigation)
```
```
┌─────────────────────────────────────────┐
│  STAR 6100 FULL VIEW STORM DOOR         │
│  ──────────────────────────────────     │
│  Product Code: 6100I                    │
│  Category: STD                          │
│  Materials: Aluminum                    │
│  Colors: White, Bronze                  │
│                                          │
│  Compatible Accessories:                │
│  • BGIST - Inserts for Storm Doors      │
│  • TGIODD - Top Glass Inserts           │
│                                          │
│  [← Back] [Start Over] [🔗 Share]      │
└─────────────────────────────────────────┘
```

---

### Step 8: Copy & Share URL
```
User clicks "🔗 Share" button
Copies: https://yoursite.com/?p=6100I&b=16529

Someone else pastes this URL in their browser:
→ Instantly shows product 6100I
→ Navigation state preserved (b=16529)
→ Back button navigates through original path
```

---

### Step 9: Browser Back Button
```
User clicks browser back button

URL Changes:
https://yoursite.com/?p=6100I&b=16529
           ↓
https://yoursite.com/?b=16529&q=results
           ↓
https://yoursite.com/?b=16529&q=q-dimensions
           ↓
https://yoursite.com/?b=16401&q=q-color-storm-door
           ↓
https://yoursite.com/?b=16385&q=q-material-storm-door
           ↓
https://yoursite.com/?b=1&q=q-door-type
           ↓
https://yoursite.com/

Each step backward:
✓ Restores question state
✓ Maintains bit value
✓ Shows correct UI
```

---

### Step 10: Refresh Page
```
At any point, user presses F5 to refresh

Before Refresh: https://yoursite.com/?b=16529&q=q-dimensions
After Refresh:  https://yoursite.com/?b=16529&q=q-dimensions

Result:
✓ Returns to same question
✓ Previous answers restored
✓ Accumulated selections preserved
✓ Can continue where they left off
```

---

## 🎯 Bit Value Breakdown Reference

### Common Values You'll See

| Bit Value | Decimal | What It Means |
|-----------|---------|---------------|
| `0000...0001` | 1 | Door selected |
| `0000...0010` | 2 | Window selected |
| `0001...0001` | 16385 | Door + Storm Door |
| `0001...0011` | 16387 | Door + Window + Storm Door |
| `0001...0011` | 16401 | Door + Aluminum + Storm Door |
| `0010...0010` | 16529 | Door + Aluminum + White + Storm Door |

### Quick Decode Formula
```
To check if a bit is set:
  if (bitValue & (1 << bitPosition)) {
    // That attribute is selected
  }

Examples:
  16529 & 1     = 1   → Door is selected ✓
  16529 & 2     = 0   → Window is NOT selected
  16529 & 16    = 16  → Aluminum is selected ✓
  16529 & 128   = 128 → White is selected ✓
  16529 & 16384 = 16384 → Storm Door is selected ✓
```

---

## 🔗 URL Patterns

### Navigation State
```
Pattern: /?b={bitValue}&q={questionKey}
Example: /?b=16529&q=q-dimensions
Use: Bookmark navigation progress
```

### Product View
```
Pattern: /?p={productCode}&b={bitValue}
Example: /?p=6100I&b=16529
Use: Direct link to product with context
```

### Initial State
```
Pattern: /
Example: https://yoursite.com/
Use: Fresh start, no parameters
```

---

## 💡 Power User Features

### Hack the URL
Users can manually modify URLs:

```
Original: /?b=16529&q=q-dimensions
         (Door + Aluminum + White + Storm Door)

Modified: /?b=34&q=q-dimensions
         (Vinyl only)

Result: Jumps directly to Vinyl products
```

### Preset Configurations
Your sales team can create bookmarks:

```
Residential Storm Doors:
  /?b=16401&q=results

Commercial Windows:
  /?b=8194&q=results

Budget Options (Vinyl):
  /?b=32&q=start
```

### Analytics Tracking
Track which combinations are popular:

```
Top URLs:
  /?b=16529 → White Aluminum Storm Doors (2,453 views)
  /?b=8226  → White Vinyl Windows (1,834 views)
  /?b=272   → Bronze products (892 views)
```

---

## 🎓 Learning Example

### Try This Exercise:
1. Start at homepage (b=0)
2. Select Window (b=2)
3. Select Primary Window (b=8194)
4. Select Vinyl (b=8226)
5. Select White (b=8354)

Your URL should be: `/?b=8354&q=q-dimensions`

Decode: 8354 in binary = 10000010100010
- Bit 1 (2) = Window ✓
- Bit 5 (32) = Vinyl ✓
- Bit 7 (128) = White ✓
- Bit 13 (8192) = Primary Window ✓
Total: 2 + 32 + 128 + 8192 = 8354 ✓

---

Ready to implement! 🚀
