Custom UI
Build your own interface around the Mimeeq 3D configurator. Learn how to set up, develop locally, deploy through the admin panel and build a custom AR flow.
This guide explains how to build and deploy a Custom UI for the Mimeeq 3D configurator. Your approach to creating a Custom UI directly determines your development and deployment strategy, so it covers the recommended Web Components approach, the key differences between local and production environments, how the admin panel manages versioning and delivery, the embed UI lifecycle and a custom AR flow.
Custom UI creation
Technology choice
The Mimeeq 3D configurator is built using Web Components (specifically Stencil.js, though any Web Component framework is compatible). This architectural decision directly affects how slots are used and how the Custom UI is structured. Web Components represent the approach our development team has chosen, and the entire process is tested and optimised for this technology. We recommend this approach when you plan to use the Mimeeq admin panel for deploying and maintaining versioned Custom UI builds.
Production vs local structure
The HTML structure of your Custom UI differs between production (admin-deployed) and local development environments. Understanding this distinction is critical before writing any code.
Delivery
Admin panel ships the Custom UI bundle via the embed template
Wrapper
Your Web Component wraps the canvas using a <slot>
Tag
Standard <mmq-embed> tag is used by end clients
Versioning
Different UI versions can be assigned per embed template
Production structure (admin-deployed)
In production, configurators use the standard tag to ensure a consistent customer experience. To ship your Custom UI through this tag, your Web Component must define a wrapper that exposes a default slot for the component. Register your component in the Mimeeq admin at Settings → Custom UI Management — https://app.mimeeq.com/INN-OVEET/private/admin/settings/customUiList.
Admin registration — wrapper component:
When this component is shipped to the client browser, it renders as follows.
Rendered output on client:
Canvas-only embed
Custom UI requires Mimeeq Embed to ship a canvas-only build — no default Mimeeq UI. The most efficient way to achieve this is by selecting the Custom UI option in the embed template used by the 3D configurator. This ensures only the necessary packages are shipped.
Image unavailable in the source article: Screenshot 2026-02-26 at 14.20.48.png. Replacement required.
Benefits of this template approach:
Only required packages are bundled and shipped to the browser
Versioning is controlled from the admin panel per template
Different Custom UI versions can be supplied to different embed templates
Local development
Due to the specifics of how production embeds are delivered to the browser, local development requires a separate template that ships only the canvas. This approach can also be used in production, but it excludes shipping the Custom UI from the admin panel.
Local template configuration
In the Mimeeq admin, configure a dedicated development template with the following settings:
Use Custom UI
Enabled (checked)
Custom UI Version
None — leave empty for local development
Local HTML structure
Structure the embed in your local environment so that your wrapper component passes the Mimeeq embed (pure canvas) as a slot child.
Local development HTML:
Recommended component structure
Following this pattern results in a clear, maintainable component hierarchy.
Recommended component tree:
This hierarchy provides a clean separation of concerns: the canvas sits inside a dedicated wrapper, UI chrome (side panels, toolbars) are siblings, and the slot ensures the canvas is always correctly positioned regardless of environment.
Mimeeq app availability
There can be a race condition where your component loads after the mimeeq-app-loaded event has fired. To handle this case, use the following pattern:
Modular embed UI — lifecycle and data flow
The Mimeeq embed UI is the core component that orchestrates the 3D configurator experience when running in embed mode. It manages responsive layout, subscribes to the global store, renders the canvas and UI chrome, and handles keyboard shortcuts. Custom UI implementations must be aware of this lifecycle to integrate correctly.
Pseudo code with proposed root structure
AR modal — custom implementation
The AR (augmented reality) feature must be implemented by the Custom UI in a specific way, since it integrates directly with the Mimeeq core app via window.mimeeqApp.actions. This section provides a complete, step-by-step guide to building a custom AR flow.
Architecture overview
The AR launch flow follows a linear pipeline with branching for platform detection and error recovery:
1
Check permission
Verify the customer licence includes AR
2
Generate AR model
Create an AR-ready asset from the current configuration
3
Fetch AR data
Retrieve file URLs and metadata via shortcode
4
Wait for processing
Poll or subscribe until model files are ready
5
Detect platform
Branch to iOS, Android or desktop (QR) experience
6
Handle failures
Offer retry if generation fails or times out
7
Navigate back
Return the user to the configurator after AR ends
Step-by-step implementation
Fetch AR model data
Use the shortcode to retrieve model file URLs and associated metadata:
Key fields returned in arData:
glbPath
string
CDN-relative path to GLB file (Android)
usdzPath
string
CDN-relative path to USDZ file (iOS)
s3Path
string
Product thumbnail image URL
url
string
Original product page URL
allowScaling
string
Whether AR resizing is enabled
conversionStatus
string
'completed' or 'failed'
completeSubscription
Promise
Resolves when background processing finishes
Detect the platform and open AR
Platform detection determines which AR viewer to launch:
Android
GLB
Intent URL → Google Scene Viewer (ARCore)
iOS
USDZ
Anchor with rel='ar' → Apple AR Quick Look
Desktop
Landing page URL
QR code for user to scan with mobile device
Platform detection:
5a — Android: Google Scene Viewer. Construct an intent:// URL that launches ARCore Scene Viewer. The fallbackUrl redirects if ARCore is not installed:
5b — iOS: AR Quick Look. iOS requires an anchor element with rel='ar' to trigger AR Quick Look. The element is created programmatically, clicked, then removed:
5c — Desktop: QR code. On desktop there is no native AR viewer. Display a QR code linking to the Mimeeq AR landing page:
Complete implementation
All steps composed into a single launchAR entry-point function:
Events and API reference
Custom events
mimeeq-generate-ar-short-code
Mobile embed — shortcode ready for parent page
{ shortCode, allowScaling }
mimeeq-ar-get-back-to-configuration
User wants to return from AR (embed only)
{ variantCode, shortCode, isModular }
API methods
actions.showAR()
void
Built-in complete AR flow (handles all steps automatically)
actions.generateAR()
Promise<string>
Creates AR model from current config, returns shortcode
actions.getARShortCodeData(code, withSub?)
Promise<ARShortcodeData | null>
Fetches model file URLs, metadata, and optional completion subscription
actions.regenerateAR(arData)
Promise<string | null>
Retries a failed or timed-out AR generation
Quick reference
Development checklist
Environment comparison
Template type
Development template
Production template
Custom UI version
None (empty)
Versioned bundle from admin
Canvas delivery
Passed as slot via local mmq-embed
Shipped inside mmq-embed by admin
Embed script
Loaded via <script> tag in HTML
Managed by admin shipping
Versioning control
Code repository
Admin panel per template
Suitable for deployment
No
Yes
Related articles
Was this helpful?