Verve — bundles, upsells, popups, bars & sections in one app, on every surface (currently completely free)

Hi everyone — I’m Patrick, solo founder of Verve, and I’d love to introduce it properly.

The idea: most stores end up running four or five separate apps for the cart experience — one for the drawer, one for bundles, one for popups, one for the announcement bar, one for upsells. Each is good at its thing, but together they mean several subscriptions, several design systems to align with your theme, and several scripts on your storefront. Verve started with a simple question: what if all of this lived in one place?

So it’s built as a matrix, not a single widget. You take any tool — bundles (quantity breaks, BOGO, fixed sets, mix & match, plus Shopify’s native bundles), upsells with conditional rules, forms & quizzes, countdowns, trust badges, gift wrap, shipping protection, announcements — and place it on any surface: the slide-cart drawer, popups & exit intent, announcement & free-shipping bars, or embedded page sections. Every placement gets its own triggers (exit intent, scroll, cart contents, schedule) and targeting (page, country, language). That combination is genuinely hard to assemble from single-purpose apps — and it’s the heart of Verve.

It’s kind to your operations. Bundle components stay real line items on the order, so your 3PL sees actual SKUs, your inventory counts real stock, and your reports stay clean. Discounts are computed server-side with Shopify discount functions, so the price in the cart is exactly the price in checkout. Everything builds on Shopify’s own primitives — your order history and inventory stay intact, whatever happens.

And it’s kind to your design. The drawer reads your theme’s fonts, colors and corner radii instead of bringing its own look — with 140+ presets if you want a quick start and full design control if you want precision. Everything is localized into 20 languages via native Shopify Markets.

Right now it’s completely free — and if you install while it’s free, it stays free for you. No plans, no caps, no trial timer, no card. We’re a small team in the growth phase, and honest feedback means more to us than revenue right now.

So here’s my open invitation: try it today and keep it. Install it, pick one of the 140+ presets, and your new cart drawer is live in about ten minutes — bundles and upsells a few minutes after that. Whatever you build is yours to keep. And if Verve earns a place in your store, an honest review on the App Store would mean the world to a team our size.

I read every support message myself, and what you tell us genuinely shapes the roadmap — so bring me your questions, from cart transform and discount functions to theme compatibility. I’ll answer everything right here in this thread.

thanks Steve — these are the four questions i’d ask too, so let me take them in order and be honest about where the edges are.

Migration. theres no importer, and i dont want to pretend otherwise: i cant read another apps config, so bundles and upsells get rebuilt in Verve. install, activate the app embed, pick a preset, re-create the offers — for a normal setup thats an evening, not a project. the one thing i’d flag hard, because its the mistake that generates most of my support mail: switch the OLD cart apps embed OFF before you activate ours. both apps hook the cart-icon click in the capture phase and cancel the event, so whichever one registered first wins and the other appears dead — or you get two drawers. two seconds to fix under Theme settings > App embeds, but it looks like a broken install if you dont know to look there. tell me which app youre coming from and ill be specific about what maps to what — some concepts translate 1:1, tiered upsell logic usually doesnt.

Performance. i deliberately dont publish a number. anything i measured on my test theme would tell you nothing about yours, and i’d rather not be the vendor quoting a benchmark you cant reproduce. what i can describe is the structure. one app embed, one module entry (plus a small static defaults file) instead of one vendor script per app. and the storefront never calls my servers to render: the config lives in metaobjects on your own shop, the extension reads it through your own Storefront API, and caches it in localStorage keyed by shop/country/locale plus a version number, so most repeat views skip that request entirely. the only things that touch my backend from the storefront are a form/quiz submit and a fire-and-forget analytics ping. thats the real consolidation argument — fewer independent things booting and doing their own roundtrips, not a magic bundle size.

Unused modules. this one i can answer cleanly: they dont load. every system is its own dynamic-import chunk, and on boot the extension walks your active config, collects the system ids you actually placed, and preloads only those. never place an upsell and the upsell chunk is never requested. it splits one level below that too — bundles are per mechanic, so a BOGO offer fetches the BOGO chunk and not mix&match. what you cant avoid is the entry plus shared runtime; thats the floor once the embed is on. so “drawer + free shipping bar only” really is cheaper than the full matrix, not just visually.

Old and customized themes. no OS 2.0 requirement for the main surfaces — drawer, popups and bars run as app embed blocks, which Shopify supports on vintage themes as well because they dont depend on sections or JSON templates. the one part that does need 2.0 is embedded page sections, since those are app blocks and need a JSON template to live in.

add-to-cart is intercepted at browser level rather than theme level: a capture-phase submit listener on /cart/add forms plus fetch/XHR patching. jQuery themes, custom JS, doesnt matter, and no theme code gets edited. the cart icon is the honest weak spot — i match it with a curated selector list for known themes plus a heuristic for unknown ones, and a bespoke header with a custom cart element is exactly where that can miss. design is similar: the drawer inherits your theme font by default, and theres a one-click read that pulls colors, corner radius and font weight from your themes settings, but its a heuristic over setting names, so an unusual theme returns less and you finish it by hand.

short version — old themes are fine, heavily customized ones are mostly fine with an occasional selector fix. if youre on one, send me the store url and ill look at the header markup myself. that takes me five minutes and i’d rather do it before you install than after.

youre right, and its not in there today. the setup guide on the app home is three steps, and step one is just “enable app embed” with a deeplink into the theme editor. it says nothing about the embed you already have running - so the app is quiet at exactly the moment youre standing in the panel where both toggles sit next to each other. thats the worst possible place to be quiet, and its one line of copy, so its going in there.

detection is the harder half, and i’d rather explain why i havent just automated it. i do get a signal when the add-to-cart interception fails on a live storefront, but that signal cant tell me who won the click - “this theme has no cart icon i recognise” and “another app cancelled the event first” look identical from inside my own code. the admin side has the same blind spot: the app bridge call i use to show whether our embed is active only reports my own apps extensions, not anyone elses. i can go read the theme settings file where all embed blocks are stored and pattern-match known cart apps out of it, and thats probably where this lands, but its a list that goes stale the day someone renames a block, and im wary of shipping “we scanned your theme for competitors” as a feature.

so the boring version wins: put the sentence in step one, where both toggles are visible anyway, and repeat it in the first support reply when someone writes in that the drawer doesnt open. on the list - thanks for pushing on it, this is the kind of thing i’d otherwise have learned from the fifth support mail.