The wedge
Build shoploop.studio/{any-product-url} — the URL-pastes-in, browser-native, OpenUSD-first 3D content configurator that is Shoploop's direct attack on grip.tools.
One line: Vagon.io + a 3D content configurator on NVIDIA Omniverse with first-class OpenUSD, streamed browser-native, addressable by URL, multi-camera angle rig so shoppers compose their own wellness pack.
Why now
Grip.tools ships the Digital Twin Factory — NVIDIA Omniverse + AI Enterprise on Azure, sold to LVMH / Moët Hennessy / L'Oréal at $500k/yr. Same reference architecture, closed cloud, agency install, enterprise pricing.
We ship the same reference architecture — NVIDIA Kit-App-Template + Omniverse App Streaming API — as URL-paste, browser-native, OSS, $0-trial for every tabletop brand.
This is the first thing we work on. Offense. Attack attack attack, never defense.
Intake (locked)
The only intake is an existing web page link. User pastes a product URL into the box on shoploop.studio, lands on shoploop.studio/{that-url}, sees a live streamed 3D configurator of the pasted product. No account required to view. No catalog upload. No CSV. No OAuth wizard. See PR #30 for the full intake-rule lock.
Architecture
Per the NVIDIA reference architecture:
User pastes URL on shoploop.studio
→ Page Parser (DOM + JSON-LD + OG + PDP heuristics + LLM fallback)
→ product_twin.usda + brand_rules.json + variant sets
→ USD Database + Hero Asset (per-URL cache)
→ Kit-App-Template (Kit Application + Kit Extensions)
→ Container (packaged Kit app)
→ Cloud Server (AWS g5.xlarge spot; grip runs on Azure — we run on AWS)
→ Omniverse App Streaming API
→ Web-based Front End (shoploop.studio/{url})
→ Shopper interacts: spin, swap variants, compose wellness pack
via multi-camera rig (hero-shot + 45° + top-down + macro)
→ Add-to-cart posts back to the pasted URL's checkout
Reference architecture diagrams:
docs/images/nvidia-kit-app-template-streaming.jpeg — NVIDIA Kit-App-Template + Omniverse App Streaming API (our target implementation)
docs/images/grip-openusd-digital-twin-factory.jpeg — grip.tools implementation on Azure (what we're attacking)
Grip.tools attack matrix
| Dimension |
grip.tools |
shoploop.studio/{url} |
| Intake |
Asset handoff to Grip team |
Paste a URL |
| Deploy |
Agency install, weeks |
Instant, on paste |
| Pricing |
$500k/yr enterprise |
$0 OSS / $0 trial / $299/mo managed |
| Cloud |
Azure (hosted SaaS) |
AWS g5.xlarge spot |
| License |
Closed |
AGPL-3.0 |
| Streaming |
Grip Template Engine (closed) |
Omniverse App Streaming API (NVIDIA reference) |
| USD |
First-class |
First-class |
| Multi-camera |
Yes |
Yes (hero + 45° + top-down + macro rig) |
| Wellness pack composer |
No |
Yes (multi-SKU compose-your-own) |
| Trilingual (hi/en/mr) |
No |
Day-one |
| Target ICP |
LVMH, L'Oréal, Moët Hennessy |
Ayurvedic + nutraceutical + OTC wellness (SMB) |
Multi-camera wellness pack composer
The shopper-facing hook. Multi-camera rig baked into the Kit application:
- Hero-shot camera — brand-fidelity 3/4 angle, editorial lighting
- 45° camera — configurator default, best for spin
- Top-down camera — flat-lay for wellness-pack composition (multi-SKU on a shared surface)
- Macro camera — label + ingredient + molecular overlay (MolecularNodes stitched from ingredient list on the pasted page)
Shopper drags SKUs onto the top-down surface, spins, swaps variants, composes a wellness pack (e.g. Chyawanprash + Ashwagandha + Brahmi), one-click routes ATC to the original merchant's checkout.
Scope for this issue (M1)
Ships: end-to-end paste → stream on one URL, one SKU, one camera, on AWS g5.xlarge spot. Multi-camera + wellness-pack composer land in follow-up issues.
Out of scope (spun into follow-ups)
- Multi-camera rig (
#TBD — hero + 45° + top-down + macro)
- Wellness-pack composer (multi-SKU drag-to-compose on top-down camera)
- MolecularNodes ingredient stitcher (macro camera overlay)
- Ashwagandha.shoploop.studio Advertiser Studio tenant (separate issue)
- hi/mr locale on the Kit app (English-first for M1; trilingual follow-up)
- Auth / paid tier / usage metering (M2)
Success criteria
- Paste
https://kapiva.in/products/ashwagandha-gold (or any of the 5 seed URLs) into shoploop.studio, land on shoploop.studio/{encoded}, see the product streamed as an interactive 3D twin within 30s cold, <5s warm.
- Twin PBR fidelity ≥ 0.85 per Validation Agent (per LOOP_SPEC Loop 4 target).
- Cost ≤ $0.02/frame at g5.xlarge spot; ≤ $0.10 per 30s interactive session (pooled).
- Public Vercel deploy of
shoploop.studio live with the paste box functional against ≥5 seed URLs.
- Kit-App-Template fork open at
ninan-versioning/shoploop under AGPL-3.0.
Cost envelope
- Streaming: AWS g5.xlarge spot ≈ $0.40/hr. Session pooling target: 3 concurrent → ~$0.13/session-hour.
- Render (cold twin build from URL): amortized ≤ $0.20 per URL (cached).
- Page parser LLM fallback (Mistral): ≤ $0.005 per URL.
- Loaded target: ≤ $0.10 per 30s shopper session at warm cache. ≤ $50/mo per active customer at the LOOP_SPEC Loop 4 cap.
Repo layout
Lives in apps/kit-configurator + packages/page-parser + packages/embed + infra/streaming in this repo (shoploop). Twin storage + brand_rules schema in shoploop-core. Web-publish adapters (post-configurator ATC routing) in shoploop-delivery.
Decision-gate answers (per AGENTS.md)
- Varitea dogfood critical path? Yes — Varitea is one of the 5 seed URLs; the configurator is the front door for the Varitea funnel.
- Deepens USD/brand-constraint moat or commoditizes? Deepens — this is the USD scene graph productized as a URL-addressable, streamed surface. Nobody else ships this on OSS.
- Mistral/Codestral cheaper than API call? Page parser LLM fallback uses Codestral via self-host on autoresearch H100 pool.
- Ships in ≤2 weeks solo? M1 scope (single URL, single camera, hero-shot only) — yes. Full multi-camera + composer — follow-ups.
- Monthly AWS/API cost? ≤$50/mo per active customer at Loop 4 hard cap. Streaming infra baseline ≈ $150/mo idle (1 warm g5.xlarge spot).
References
The wedge
Build
shoploop.studio/{any-product-url}— the URL-pastes-in, browser-native, OpenUSD-first 3D content configurator that is Shoploop's direct attack on grip.tools.One line: Vagon.io + a 3D content configurator on NVIDIA Omniverse with first-class OpenUSD, streamed browser-native, addressable by URL, multi-camera angle rig so shoppers compose their own wellness pack.
Why now
Grip.tools ships the Digital Twin Factory — NVIDIA Omniverse + AI Enterprise on Azure, sold to LVMH / Moët Hennessy / L'Oréal at $500k/yr. Same reference architecture, closed cloud, agency install, enterprise pricing.
We ship the same reference architecture — NVIDIA Kit-App-Template + Omniverse App Streaming API — as URL-paste, browser-native, OSS, $0-trial for every tabletop brand.
This is the first thing we work on. Offense. Attack attack attack, never defense.
Intake (locked)
The only intake is an existing web page link. User pastes a product URL into the box on
shoploop.studio, lands onshoploop.studio/{that-url}, sees a live streamed 3D configurator of the pasted product. No account required to view. No catalog upload. No CSV. No OAuth wizard. See PR #30 for the full intake-rule lock.Architecture
Per the NVIDIA reference architecture:
Reference architecture diagrams:
docs/images/nvidia-kit-app-template-streaming.jpeg— NVIDIA Kit-App-Template + Omniverse App Streaming API (our target implementation)docs/images/grip-openusd-digital-twin-factory.jpeg— grip.tools implementation on Azure (what we're attacking)Grip.tools attack matrix
Multi-camera wellness pack composer
The shopper-facing hook. Multi-camera rig baked into the Kit application:
Shopper drags SKUs onto the top-down surface, spins, swaps variants, composes a wellness pack (e.g. Chyawanprash + Ashwagandha + Brahmi), one-click routes ATC to the original merchant's checkout.
Scope for this issue (M1)
Ships: end-to-end paste → stream on one URL, one SKU, one camera, on AWS g5.xlarge spot. Multi-camera + wellness-pack composer land in follow-up issues.
packages/page-parser— DOM + JSON-LD + OG + PDP heuristics →product_twin.usda+brand_rules.jsonv1. LLM extract fallback via Mistral.apps/shoploop-studio-site—/intake box (one input, one submit),/{encoded-url}route that mounts the streamed configurator viewportapps/kit-configurator— Kit-App-Template fork with:infra/streaming— Omniverse App Streaming API on AWS g5.xlarge spot pool. WebRTC transport. Session pooling: ≥3 concurrent streams / instance target.infra/container— Kit application container image (Nvidia Omniverse Kit runtime base). Published to ECR.packages/embed—<shoploop-configurator src="…" />custom element forshoploop.studio/{url}and third-party embed.docs/architecture/url-to-stream.md— architecture doc with the two ref-arch diagrams inlined.Out of scope (spun into follow-ups)
#TBD— hero + 45° + top-down + macro)Success criteria
https://kapiva.in/products/ashwagandha-gold(or any of the 5 seed URLs) intoshoploop.studio, land onshoploop.studio/{encoded}, see the product streamed as an interactive 3D twin within 30s cold, <5s warm.shoploop.studiolive with the paste box functional against ≥5 seed URLs.ninan-versioning/shoploopunder AGPL-3.0.Cost envelope
Repo layout
Lives in
apps/kit-configurator+packages/page-parser+packages/embed+infra/streamingin this repo (shoploop). Twin storage + brand_rules schema inshoploop-core. Web-publish adapters (post-configurator ATC routing) inshoploop-delivery.Decision-gate answers (per AGENTS.md)
References
LOOP_SPEC.mdLoop 1 (URL Intake → Twin), Loop 4 (3D Render Batch), Loop 8 (Platform Health)soul.md§4 — "the URL is the anchor"