For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

If deploying Custom UI through the admin panel is not a priority, you have complete freedom in choosing your preferred framework. Simply embed the component in your code to get started.

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.

Aspect
Detail

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:

Setting
Value

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:

This structure mirrors the admin-based production approach and allows you to use the same deployment logic when you are ready to publish. It also ensures the slot passing mechanism works identically in both environments.

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.

The built-in actions.showAR() method runs the entire flow automatically. Implement it manually only when you need full control over the UI and UX of the AR experience.

Architecture overview

The AR launch flow follows a linear pipeline with branching for platform detection and error recovery:

#
Stage
Action

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

1

Check permission

Not every customer licence includes AR. Always check before rendering an AR button or initiating the flow:

2

Generate the AR model

Call generateAR() to create an AR-ready model from the current product configuration. The product must already be loaded in the configurator. This returns a unique shortcode.

3

Fetch AR model data

Use the shortcode to retrieve model file URLs and associated metadata:

Key fields returned in arData:

Field
Type
Description

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

4

Wait for processing

Models may still be generating on the server. Check whether files exist; if not, subscribe and wait for completion with a timeout:

5

Detect the platform and open AR

Platform detection determines which AR viewer to launch:

Platform
Format
Mechanism

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:

6

Handle failures and retry

If generation fails or times out, offer the user a retry using regenerateAR():

7

After the AR experience ends, return the user to the configurator. The mechanism differs between embed and standalone contexts:

Complete implementation

All steps composed into a single launchAR entry-point function:

Events and API reference

Custom events

Event
When to listen
Detail payload

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

Method
Returns
Description

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

Aspect
Local development
Production (admin)

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


Was this helpful?