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

Custom BYOB UI

This guide walks through building a fully custom Build Your Own Bundle UI from scratch, using the Elite Bundle Builder SDK for data and actions while rendering your own HTML.

The default Puck-rendered template continues to exist — you can replace individual parts or the whole thing.


Prerequisites

  • SDK access enabled in App → Settings → Developer SDK

  • A bundle product set up with at least one step

  • Access to your Shopify theme files


1. Add your HTML scaffold

In your theme, add the container elements where your custom bundle UI will render. Place these on the bundle product page — either in the product template or a theme section.

<!-- _theme/sections/custom-byob.liquid or similar -->
<div id="my-bundle-root" style="display: none;">
  <div id="my-steps"></div>
  <div id="my-cart-drawer">
    <ul id="my-cart-items"></ul>
    <p>Total: <span id="my-cart-total">$0.00</span></p>
    <button id="my-checkout-btn" disabled>Checkout</button>
  </div>
</div>
<div id="my-bundle-loading">Loading bundle…</div>
<div id="my-bundle-error" style="display: none;"></div>

2. Wait for the SDK to be ready

The SDK populates window.eliteBundle.sdk.byob after React mounts and products load. Listen for the ready event before reading any state.


3. Render steps and products


4. Keep the cart in sync

Listen for elite:byob:cart-change to update your UI after every cart mutation.


5. Handle checkout


6. Show a discount tier indicator (optional)


7. Handle errors


Hiding the default UI

If you want to replace (not augment) the default Puck-rendered template, hide it with CSS. The default bundle renders inside a [data-byob-bundle] element.

Or hide it in JavaScript after the ready event, so there's no flash:

Last updated

Was this helpful?