353 lines
10 KiB
Markdown
353 lines
10 KiB
Markdown
# 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! 🚀
|