Replacing the paid third-party app with a lightweight, theme-native free-gift feature — so add-to-cart is faster and the gift logic is fully ours to control. No visible change for shoppers.
EG runs its own extra network calls after every “Add to cart,” which is a big part of why the cart feels sluggish. Its logic lives on a third-party server we don’t control.
The gift logic moves into our own theme code — one lean script that reacts to the cart. Fewer round-trips, no third-party dependency, snappier checkout.
Same free gifts, same banners, same cart look. We keep the exact gift products and rules — we just stop paying an app to add them and do it ourselves.
Goal: get the store data ready so the code has real gifts and rules to work with. Runs alongside the build — not a blocker to starting.
qualifying tag per marketGoal: write the two new theme files (works with placeholder IDs first, real IDs swapped in after Stage 0). No edits to the cart, mini-cart, or theme core.
Goal: prove the native feature gives the exact same gifts as the app, in all 7 markets, with the mini-cart features intact. This is the long pole.
Goal: flip the switch in one clean move — turn our feature on and the app off at the same moment, on an unpublished theme, then publish.
Goal: watch live carts for a week, keep gift stock healthy, then uninstall EG for good and stop the subscription.
Build (Stage 1) and Ops prep (Stage 0) run in parallel in Week 1, so the calendar isn’t just the sum of the stages. QA is the widest bar — 7 markets take real time to verify.
| File / area | Change | What it does |
|---|---|---|
assets/nb-free-gift.js | NEW | Watches the cart, computes the right gifts from the ladder, adds/removes them to match. Adds each gift on its own so an out-of-stock gift is skipped, never blocking the cart. |
snippets/nb-gift-rules.liquid | NEW | Emits the per-market gift ladder + qualifying product list + the master on/off switch. |
| Mini-cart gift dedup | FIX | Existing bug (audit H4/H5) where different gift lines can merge/corrupt — worth fixing while we’re in the gift system. |
cart-drawer.liquid, main-cart.liquid, theme.js | NO CHANGE | Gifts stay as $0 tagged variants, so the cart & mini-cart render them exactly as today — zero edits to core. |
| Cart banners & PDP gift chart | NO CHANGE | Already theme-side (“Image with text overlay” + Rich Text + settings text). They survive the migration untouched. |
Gifts stack (cumulative) as the cart grows, and plateau at 7 free bags + 7 carabiners — confirmed against a live 21-bag cart. Smaller markets just have shorter ladders.
The whole feature is flag-gated. If anything looks wrong, one toggle turns it off and the app can be turned back on.
All QA happens on an unpublished test theme with the app still live. We only publish once 7-market parity is proven.
We keep the exact $0 gift variants and tags. The cart doesn’t know the difference — it renders gifts the same way.
Gifts are added in their own request. An out-of-stock or missing gift is skipped silently — the shopper’s actual item always goes in.