Playbook · Cart drawer / AJAX cart not updating
Shopify cart drawer / AJAX cart not updating after add to cart — theme JS, sections API, app conflicts.
Written for a Shopify DTC owner whose cart drawer, mini-cart, or AJAX cart badge never refreshes after Add to cart — usually theme cart JavaScript that stopped listening, a Sections API section id that no longer matches the live theme, or a cart-drawer / sticky ATC / upsell app fighting the theme publish cycle. DIY-first: prove cart JSON vs drawer HTML, check theme JS and section ids, isolate app conflicts. Distinct from thank you / order status page upsell broken, Shop Pay / accelerated checkout missing, discount code not applying, abandoned checkout email not sending, and theme agency vs ops install. No earnings claims, no invented case studies.
Nico at Latch AI Ops · Sep 7, 2026 · ~12 minute read
Buy the 72-hour install — $997Thank you upsell brokenShop Pay missingMerchant FAQ
01
Cart drawer / AJAX cart — not thank you upsells, Shop Pay, discount codes, abandoned checkout, or theme agency.
Several products can look like “something about the cart is broken.” They do not share a settings panel. This page is only when Shopify cart drawer, mini-cart, or AJAX cart UI does not update after add to cart. Post-purchase upsells that never load are thank you / order status page upsell broken. Missing Shop Pay buttons are Shop Pay / accelerated checkout missing. Codes that refuse at checkout are discount code not applying. Recovery mail that never sends is abandoned checkout email not sending. Hiring a theme shop vs the install is theme agency vs ops install. This page is only: drawer / AJAX cart refresh after add.
Seven ordinary reasons the drawer looks dead: add-to-cart succeeded in cart JSON but theme JS never re-rendered the drawer, cart-drawer custom element missing or unbound after a theme edit, Sections API section id renamed or removed, a cart-drawer / sticky ATC / upsell app overwriting theme listeners, console errors from a third-party script aborting the publish cycle, stale cached section HTML, or you are debugging thank you upsells / Shop Pay / discount codes / abandoned checkout / theme agency quotes instead. Walk them in that order. You already pay for Shopify. You do not need another cart app seat to straighten the drawer that already exists.
02
Prove add-to-cart succeeded while the drawer stayed stale.
On a product page, open DevTools → Network. Click Add to cart. Confirm a request to /cart/add, /cart/add.js, or the Cart Ajax API returns 200 with the line item. Then open /cart.json in another tab — the item should be there. Screenshot the open cart drawer / mini-cart / bubble. Note whether quantity badge, line items, or totals stayed at the pre-add state while cart JSON is correct.
Honest proof: if cart JSON has the line and the drawer HTML does not, stay on this page — that is a render / sections / listener bug, not a cart API failure. If add-to-cart itself 4xx / 5xx or never fires, fix the form / variant / inventory first — not the drawer. If Shop Pay never appeared on the product, use Shop Pay / accelerated checkout missing. If a discount refused later at checkout, use discount code not applying. Do not mix those proofs.
03
Theme cart JS, cart-drawer custom element, and publish listeners.
Dawn-family and most Online Store 2.0 themes use a cart-drawer (or similar) custom element plus a publish / subscribe pattern: after add-to-cart, the theme publishes a cart update and the drawer re-fetches section HTML. A theme edit that removed the custom element, deleted cart.js / product-form.js includes, or broke the event name leaves add-to-cart working while the UI never moves.
Fix: in Theme editor / Code, confirm the cart drawer section and its JS assets are still on the live theme (not only the unpublished duplicate). Check console for uncaught errors on product and cart pages right after Add to cart. Restore the stock cart-drawer snippet from the theme’s original version if a freelancer deleted the listener. A full theme redesign quote is still theme agency vs ops install— this page is the drawer listener, not a brand job.
04
Sections API / section Rendering — wrong section id or missing cart fragments.
Themes refresh drawer markup with Shopify’s Section Rendering API: a GET to /?sections=cart-drawer (or your theme’s section id) returns HTML fragments the JS swaps in. If the section was renamed, split into two sections, or the request still asks for the old id, Network shows 200 with empty or wrong HTML and the drawer stays stale. Multiple section ids in one request that omit the open drawer also look like “AJAX cart broken.”
Fix: after Add to cart, inspect the sections request URL and response body. Match the section id to the live sections/*.liquid filename / schema name. Update the JS constant or liquid data attribute if a rename landed without a JS update. Retest on an unpublished theme preview first, then publish. Thank-you / order-status extension bugs after payment still belong on thank you page upsell broken— that is post-purchase, not cart drawer.
05
Cart drawer / upsell / sticky-ATC apps fighting the theme.
Cart drawer apps, sticky add-to-cart bars, free-shipping progress bars, and cart upsell widgets often replace or wrap the theme’s cart events. Two owners on the same Add to cart click can succeed in cart JSON while neither UI refreshes — or one opens an empty drawer. An app left installed after you switched back to the native Dawn drawer is a common silent conflict.
Fix: disable cart-drawer / sticky-ATC / cart-upsell apps one at a time on a development theme. Retest Add to cart with only the theme drawer. Keep one owner. If the “broken” thing was actually a discount that never applied later, leave this page for discount code not applying. Abandoned-cart recovery mail is still abandoned checkout email not sending— that is email, not drawer HTML.
06
Stale HTML, CDN / browser cache, and third-party script errors.
Aggressive browser extensions, stale service workers, and third-party scripts that throw on product pages can abort the theme’s cart publish before the drawer fetches. A console red error from a pixel, reviews widget, or chat bubble right after Add to cart is a clue — the cart request may still 200 while the JS chain never reaches the drawer render.
Fix: retest in a clean browser profile with extensions off. Hard-refresh. Check Application → Service Workers if a PWA / offline app is installed on the storefront. Fix or defer the throwing third-party script. Wallet buttons that never appear are still Shop Pay missing— different product from a stale drawer after a successful add.
07
You tested thank you upsells, Shop Pay, discount codes, abandoned checkout, or theme agency instead.
Broken thank you / order status upsells are thank you page upsell broken. Missing Shop Pay / accelerated checkout is Shop Pay / accelerated checkout missing. Codes that refuse at checkout are discount code not applying. Abandoned checkout mail silence is abandoned checkout email not sending. Theme redesign / agency retainers vs the install is theme agency vs ops install.
The only honest test for this page: cart.json shows the line after Add to cart, Network shows the sections / cart-drawer fetch, console is clean through the publish cycle, and only one cart-drawer owner is installed. Anything else is a different product.
08
When to stay DIY vs pay $997.
Stay DIY if you can spend one afternoon on the list above: prove cart JSON vs drawer HTML, restore theme cart JS / cart-drawer listeners, fix Sections API section ids, and clear competing cart-drawer apps. That is the whole playbook. No agency required. Short answers also live on the merchant FAQ. Related pages: thank you page upsell broken, Shop Pay / accelerated checkout missing, discount code not applying, theme agency vs ops.
Pay for help when the work is not the drawer toggle — it is connecting the stack you already have so lead capture is not dying in DMs, storefront and checkout-ready exceptions land in a channel you already check, and the live store is one workflow instead of a spreadsheet plus a Slack bot you forgot. That is the Latch AI Ops install.
What $997 USD one-time buys: lead capture on the live store, ops alerts in a channel you already check, and a checkout-ready workflow. 72 hours after collaborator access, not after payment. One live Shopify store. Access plus a delivery thread. Store URL collected at checkout. Not a SaaS seat, not a theme rebuild retainer, not a cart-conversion guarantee, not a brand or theme job.
Other shops’ public ranges, not testimonials: a checkout / ops install typically runs $500–$2,500. A full ops consulting block typically runs $2,000–$5,000. $997 is the cheap end of that work, sold as a 72-hour install of three systems — not as an earnings number or conversion-lift claim.
What it does not buy: more orders, recovered revenue, perfect cart drawers forever, or a case study. Latch AI Ops has not published customer proof because there are no customers yet. You are buying the install.
Checkout is on Whop. Operator is Nico. United States offer. You can revoke collaborator access after handoff. We do not take owner passwords.