For developers and agencies

One tag. Your theme's styles. Every event.

Drop an AndOr widget anywhere with a single HTML tag. It renders in your theme's light DOM, takes your CSS, and tells your code what it does.

Any theme file
<!-- Product page -->
<andor-offer-picker></andor-offer-picker>
<andor-goal></andor-goal>

<!-- Cart page -->
<andor-claim></andor-claim>

<andor-goal><andor-offer-picker><andor-claim><andor-tiers><andor-price><andor-badge><andor-discount-callout>

The app embed fills each tag in. No namespace, no product id, nothing else to pass.

Built for developers

Small to add. Easy to own.

Customizable

One global token restyles every widget. Widget tokens, data attributes, events and a JavaScript API do the rest.

Full token reference
theme.css
:root {
  --andor-color-accent: #0b6b4f;
  --andor-color-border: rgba(11, 107, 79, 0.18);
  --andor-radius: 999px;
}

andor-goal {
  --andor-goal-track-height: 8px;
}

Analytics for widgets

Views, clicks, adds, orders and added revenue for each promotion and offer, plus the placement that sells. Offers also send events to your custom pixel.

Events
Custom pixel
// Shopify admin: Settings > Customer events > Add custom pixel
analytics.subscribe("andor:offer_added", (event) => {
  const { offerId, placement, valueCents } = event.customData;
  console.log("upsell add", offerId, placement, valueCents);
});

Flexible

  • Theme app blocks or one-line tags.
  • Tested on Dawn, Horizon, Sense and Tinker.
  • Product page, cart page and cart drawer.
  • Vintage themes: tags and the app embed only.
Theme guides

Performant

  • Served by Shopify as a theme app extension.
  • Deferred scripts, loaded only where used.
  • No third-party requests.
  • No layout shift on load.
Performance

Accessible

  • Volume picker: real radio inputs.
  • Goal bar: role="progressbar".
  • Countdown: role="timer", never noisy.
  • Gift chooser: a native dialog.
Accessibility
For agencies

Set it up once. Hand it over.

  • No-code handoverMerchants run it from the app.
  • Rules travel as JSONExport once, import anywhere.
  • Same tags on every storeWrite your styles once.
  • No AndOr brandingShoppers see the store's look.