Product · everything that ships today
Two verticals. One engine. Every screen below is live.
CPQ Builder ships as a single thin layer over standard Odoo. Configure-to-order for both option-picking products (Mixtuur-style: pick attributes, link to BOM components, apply rules) and parametric products (cushion-style: dimensions × materials × formulas). Same engine, same Odoo integration, same admin.
Two product kinds
Whichever way your products are built, the engine speaks it
Pick the kind that matches how you currently quote in Odoo. Both share the same wizard, the same BOM-on-confirm flow, and the same multi-tenant admin.
Vertical 1 · Option-picking
Pick attributes from a fixed list
For products with discrete choices — Mixtuur's huiskamerorgels, hospitality service-sets, accessories. The customer ticks attributes; each option carries a price delta, a lead-time delta, and (optionally) a BOM component.
- ✓ Attribute groups · attributes · options (single / multi / qty / bool)
- ✓ Pickers: cards, swatches, thumbs, dropdown, slider, segmented
- ✓ Rules:
exclude·require(auto-apply optional) ·recommend - ✓ BOM components linked per option · subcontracting flagged
- ✓ Hover-preview pane swaps option images on focus
- ✓ Default-picks flow into Odoo line description even when hidden
Live example: Mixtuur Duett III ↗
Vertical 2 · Parametric
Free input · dimensions × materials × formulas
For products where the customer enters dimensions and the price + BOM follow from formulas. Cushions, cut-to-size cable, beams, panels — anything where length × width × thickness drives the quote.
- ✓ Shapes · fabrics · foams · finishes · piping · buttons
- ✓ Free dimensions with min/max validation per shape
- ✓ Multi-row cut lists (12.50 m + 8.40 m + 5.75 m, etc.)
- ✓ Roll-width / sheet-yield aware fabric calculations
- ✓ Per-piece price + lead time computed live as inputs change
- ✓ Same BOM-on-confirm path as option-picking
Live example: Steel cable Ø 5 mm cut-to-size ↗
Customer experience
A wizard that feels like part of your storefront
Embeds inside your Odoo product page (storefront-swap) or any site (embed.js). Branded per tenant. Mobile-first. Real-time price and lead time.
Layout
Side-by-side or 3-column
Per-product setting. Image-driven products get a sticky image left + horizontal stepper + sticky bottom bar. Technical products get a vertical step rail + canvas + running summary.
3D viewer
GLB / glTF with AR
Upload a single GLB per product. Customers drag-rotate, the smart-fit blur backdrop catches off-ratio images, and the AR button opens Quick Look on iOS for in-room preview.
Hover preview
Tap-to-preview image swap
Hovering or tapping an option swaps its photo into the preview pane. Falls back to the linked BOM component's photo. Smart-fit lets any aspect ratio sit cleanly on the card.
Share configuration
One-click share link
Sticky Share button copies a deep link that reloads the same configuration. Uses navigator.share() on supporting devices; clipboard fallback elsewhere.
Mobile-first
Configures on the train
Sticky topbar collapses, image pane becomes a band, options stack 1-column on phones, sticky bottom bar with total + Add to cart. Tested down to 360 px viewports.
Rule messages inline
"Blocked by", "Required for", "Recommended"
Rules surface as chips on option cards + as a messages panel with jump-to-step links. Auto-apply rules visibly nudge a choice into place so the customer never wonders why something flipped.
Admin & authoring
Multi-tenant control plane — the tenants ship themselves
Each customer (tenant) gets a fully branded admin with isolated data. Roles, invitations, audit log, live preview of every change. Built so your customers can self-serve onboarding.
Per-tenant branding
Colors · fonts · logo
Three colour tokens (accent, secondary, ink), three Google Fonts (heading, body, mono), one logo. The wizard restyles instantly; the admin keeps the platform branding.
Visual schema editor
Groups · attributes · options · rules
Per tab. No JSON poking. Drag-to-reorder, picker-type per attribute (smart default if blank), inline rule chips that link to the BOM tab. Advanced JSON editor available for power users.
BOM tab
Components · operations · pickers from Odoo
Component thumbnails inline, optional 3D model per part, subcontracting flag with partner. Pickers fetch component SKUs and work-centres directly from your Odoo so typos don't break build-bom.
Image upload
Drag-drop, paste URL, recommended size
G1 upload field reused everywhere (branding, hero, options, BOM, 3D). Per-mime size cap. Recommended-format advisory adapts to the chosen layout (3:2 or 4:3).
Preview tab
Live wizard iframe, no saves
Toggle 3-col / side-by-side without committing the choice. Three viewport pills (1280 / 900 / 420) to spot-check responsive behaviour against a fresh product schema.
Audit log
Per-tenant sync log
Every Odoo round-trip, every MCP tool call, every schema save — searchable per tenant. Successes carry a short JSON of what changed; failures carry Odoo's exact error message. Tenant admins self-diagnose.
Platform & integrations
Built on Cloudflare. Talks to your Odoo through the standard API.
No custom Odoo module. No SaaS lock-in beyond the wizard layer. Your data lives in your Odoo; CPQ Builder is the configurator + the storefront swap.
Odoo storefront-swap
Inherit a QWeb view from outside
One-click install plants ir.ui.view records into your Odoo via the standard API. Native Add-to-cart becomes "Configure your X →" + modal wizard. Uninstall removes the view; nothing else lingers.
BOM-on-confirm
SO → BOM → MO
When a configured line is added, CPQ Builder writes the mrp.bom for the configured variant. Subcontracted components get their own type='subcontract' BOM. Odoo's MTO route makes the MO on confirmation.
Variants per config
Stable variant hash
Every unique configuration becomes its own product.product identified by a stable hash so two customers picking the same options share the variant — and two different configs never overwrite each other's BOM.
MCP server
Drive tenants and products from Claude
OAuth 2.1 + PKCE on cpqbuilder.com/mcp. Claude Desktop / Code / claude.ai connect, walk through consent, then call list_tenants, create_product, update_product, archive_tenant… Audit log captures every call.
embed.js
One-tag drop-in
For sites that aren't Odoo: a single <script src=embed.js data-key=…> tag drops in the configurator iframe at the right size. No tenant code, no auth needed for end-customers.
Cloudflare edge
D1 + R2 + Workers
Per-tenant D1 rows, per-tenant R2 namespace for uploads, content-addressed file URLs, immutable cache headers. Wizard cold-start under 30 ms at edge POPs near your buyers.
Watch it run end-to-end, or pick a tier
The walkthrough is a four-minute narrated demo of the Mixtuur Duett III flow — storefront-swap, configure, cart, manufacturing order. Pricing tells you what each tier ships.