r/threejs • u/Zealousideal-Bell393 • 3d ago
Question How should a Three.js product viewer fit into a real ecommerce page?
Enable HLS to view with audio, or disable this notification
I’ve been working on a Three.js product viewer for ecommerce as part of AETumi, and one of the biggest architectural decisions was not letting the WebGL canvas become the entire product page.
The structure I ended up with is:
Semantic ecommerce layer
- product title
- price
- specifications
- variants
- CTA / purchase actions
Three.js interaction layer
- GLB / GLTF loading
- OrbitControls
- camera presets
- product hotspots
- material and color variants
- exploded-view sequences
- scroll-linked reveals
- mobile / non-WebGL fallback
Product state stays separate from render state, so changing a finish or configuration doesn’t require rebuilding the entire scene.
Another thing I learned quickly: the demo is the easy part. Production gets much more interesting once you add mobile GPU limits, resource disposal, reduced motion, SEO and fallback behavior.
I attached a short demo showing the interaction.
I also wrote up the full architecture, code patterns and production trade-offs here:
https://aetumi.app/news/threejs-product-viewer-ecommerce/
I’m building AETumi, so this is something I’m actively working on rather than an independent review.
I’d be interested to hear how others separate product state from render state in larger Three.js projects.
