339 lines
6.2 KiB
Markdown
339 lines
6.2 KiB
Markdown
# Product Configurator Inspiration
|
|
|
|
Award-winning product customization and configuration experiences.
|
|
|
|
---
|
|
|
|
## Automotive
|
|
|
|
### Porsche Configurator
|
|
**URL**: https://www.porsche.com/configurator
|
|
**Award**: UX awards, industry standard
|
|
|
|
**What to study**:
|
|
- 3D model real-time updates
|
|
- Color/option switching
|
|
- Interior/exterior views
|
|
- Summary and sharing
|
|
|
|
**Technique**: Three.js, real-time rendering, state management
|
|
|
|
---
|
|
|
|
### Tesla Design Studio
|
|
**URL**: https://www.tesla.com/model3/design
|
|
**Award**: Industry benchmark
|
|
|
|
**What to study**:
|
|
- Streamlined option flow
|
|
- Price updates
|
|
- Image-based vs 3D
|
|
- Mobile optimization
|
|
|
|
**Technique**: Image swapping, React, progressive loading
|
|
|
|
---
|
|
|
|
### BMW Configurator
|
|
**URL**: https://www.bmw.com/configurator
|
|
**Award**: Multiple UX awards
|
|
|
|
**What to study**:
|
|
- 3D rotation controls
|
|
- Layer-based customization
|
|
- Accessory addition
|
|
- Save and share
|
|
|
|
**Technique**: WebGL, complex state management
|
|
|
|
---
|
|
|
|
## Fashion/Apparel
|
|
|
|
### Nike By You
|
|
**URL**: https://www.nike.com/nike-by-you
|
|
**Award**: Design innovation
|
|
|
|
**What to study**:
|
|
- 3D shoe customization
|
|
- Color picker UX
|
|
- Material selection
|
|
- Real-time preview
|
|
|
|
**Technique**: Three.js, custom shaders
|
|
|
|
---
|
|
|
|
### Vans Custom
|
|
**URL**: https://www.vans.com/custom-shoes
|
|
**Award**: E-commerce excellence
|
|
|
|
**What to study**:
|
|
- Part-by-part customization
|
|
- Pattern/text addition
|
|
- Sharing features
|
|
- Add to cart flow
|
|
|
|
**Technique**: Canvas-based, image composition
|
|
|
|
---
|
|
|
|
## Technology
|
|
|
|
### Apple (iPhone, MacBook)
|
|
**URL**: https://www.apple.com/shop/buy-iphone
|
|
**Award**: Industry standard
|
|
|
|
**What to study**:
|
|
- Clean option selection
|
|
- Size/color comparison
|
|
- Price building
|
|
- Accessory additions
|
|
|
|
**Technique**: React, image sets, smooth transitions
|
|
|
|
---
|
|
|
|
### Framework Laptop
|
|
**URL**: https://frame.work/products/laptop
|
|
**Award**: Product innovation
|
|
|
|
**What to study**:
|
|
- Module selection
|
|
- DIY vs pre-built paths
|
|
- Spec building
|
|
- Educational tooltips
|
|
|
|
**Technique**: React, component-based configuration
|
|
|
|
---
|
|
|
|
## Home/Interior
|
|
|
|
### Sonos
|
|
**URL**: https://www.sonos.com
|
|
**Award**: Design awards
|
|
|
|
**What to study**:
|
|
- Room visualization
|
|
- Multi-product systems
|
|
- Audio preview
|
|
- Compatibility guidance
|
|
|
|
**Technique**: SVG-based room layouts, audio integration
|
|
|
|
---
|
|
|
|
### Herman Miller
|
|
**URL**: https://www.hermanmiller.com/products/seating/office-chairs/aeron-chairs/
|
|
**Award**: UX excellence
|
|
|
|
**What to study**:
|
|
- Material selection
|
|
- Size guidance
|
|
- Color coordination
|
|
- Professional vs home use
|
|
|
|
**Technique**: Image switching, guided configuration
|
|
|
|
---
|
|
|
|
## Key Patterns Observed
|
|
|
|
### Configuration Flow
|
|
|
|
```
|
|
Common patterns:
|
|
1. Hero product view
|
|
2. Category selection (Color, Size, Options)
|
|
3. Detail customization
|
|
4. Summary/review
|
|
5. Add to cart/save
|
|
|
|
Progressive disclosure:
|
|
- Show popular options first
|
|
- Group related options
|
|
- Reveal advanced options
|
|
```
|
|
|
|
### Visual Feedback
|
|
|
|
```
|
|
Immediate feedback:
|
|
- Color changes instantly
|
|
- Price updates in real-time
|
|
- 3D model rotates to show change
|
|
- Thumbnail updates in summary
|
|
|
|
Transition types:
|
|
- Crossfade (simple)
|
|
- FLIP animation (layout changes)
|
|
- 3D morph (model updates)
|
|
```
|
|
|
|
### State Management
|
|
|
|
```
|
|
Configuration state:
|
|
{
|
|
baseModel: 'model-a',
|
|
color: 'midnight-black',
|
|
size: 'medium',
|
|
options: {
|
|
wheels: 'sport',
|
|
interior: 'leather-tan'
|
|
},
|
|
accessories: ['case', 'charger'],
|
|
price: 1299
|
|
}
|
|
|
|
Update pattern:
|
|
- Optimistic UI updates
|
|
- Validate on change
|
|
- Persist to session/URL
|
|
- Share via deep link
|
|
```
|
|
|
|
---
|
|
|
|
## Implementation Reference
|
|
|
|
### Option Selector
|
|
```javascript
|
|
// FLIP-based option change
|
|
function selectOption(optionId) {
|
|
const state = Flip.getState('.product-image');
|
|
|
|
// Update state
|
|
config.selectedOption = optionId;
|
|
updateProductImage();
|
|
|
|
// Animate change
|
|
Flip.from(state, {
|
|
duration: 0.4,
|
|
ease: 'power2.inOut'
|
|
});
|
|
}
|
|
```
|
|
|
|
### Color Swatch
|
|
```html
|
|
<div class="color-swatches">
|
|
<button
|
|
class="swatch"
|
|
style="--swatch-color: #1a1a1a"
|
|
data-color="midnight-black"
|
|
aria-label="Midnight Black"
|
|
>
|
|
<span class="swatch-inner"></span>
|
|
</button>
|
|
<!-- More swatches -->
|
|
</div>
|
|
```
|
|
|
|
```css
|
|
.swatch {
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 50%;
|
|
border: 2px solid transparent;
|
|
background: var(--swatch-color);
|
|
cursor: pointer;
|
|
transition: border-color 0.2s, transform 0.2s;
|
|
}
|
|
|
|
.swatch.selected {
|
|
border-color: var(--color-accent);
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
.swatch:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
```
|
|
|
|
### Price Animation
|
|
```javascript
|
|
// Animate price changes
|
|
function updatePrice(newPrice) {
|
|
const priceEl = document.querySelector('.price-value');
|
|
const currentPrice = parseInt(priceEl.textContent);
|
|
|
|
gsap.to({ value: currentPrice }, {
|
|
value: newPrice,
|
|
duration: 0.5,
|
|
ease: 'power2.out',
|
|
onUpdate: function() {
|
|
priceEl.textContent = Math.round(this.targets()[0].value);
|
|
}
|
|
});
|
|
}
|
|
```
|
|
|
|
### Deep Link State
|
|
```javascript
|
|
// Encode config to URL
|
|
function saveToUrl(config) {
|
|
const params = new URLSearchParams();
|
|
params.set('model', config.model);
|
|
params.set('color', config.color);
|
|
params.set('options', JSON.stringify(config.options));
|
|
|
|
history.replaceState(null, '', `?${params.toString()}`);
|
|
}
|
|
|
|
// Load from URL
|
|
function loadFromUrl() {
|
|
const params = new URLSearchParams(window.location.search);
|
|
return {
|
|
model: params.get('model') || defaultModel,
|
|
color: params.get('color') || defaultColor,
|
|
options: JSON.parse(params.get('options') || '{}')
|
|
};
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 3D Considerations
|
|
|
|
### When to Use 3D
|
|
|
|
```
|
|
Use 3D when:
|
|
- Product has complex geometry
|
|
- Viewing from multiple angles matters
|
|
- Real-time material changes needed
|
|
- Immersive experience required
|
|
|
|
Use images when:
|
|
- Limited customization options
|
|
- Performance is critical
|
|
- Mobile-first audience
|
|
- Budget constraints
|
|
```
|
|
|
|
### Performance Tips
|
|
|
|
```
|
|
3D configurator optimization:
|
|
- LOD (Level of Detail) models
|
|
- Compressed textures (basis universal)
|
|
- Lazy load non-visible options
|
|
- Pre-render common configurations
|
|
- Fallback to images on low-end
|
|
```
|
|
|
|
---
|
|
|
|
## Questions to Ask
|
|
|
|
When studying these sites:
|
|
|
|
1. How many configuration steps are there?
|
|
2. What's the visual feedback speed?
|
|
3. How do they handle many options?
|
|
4. What's the mobile experience?
|
|
5. How is state persisted/shared?
|
|
6. Is it 3D, image-based, or hybrid?
|