Graftstudio

Shopify Plus · 11 Sep 2026 · 4 min read

Gift-with-purchase and international delivery on one Shopify store

Gift-with-purchase, gift wrapping, free sample thresholds and international delivery all touch the same stage of checkout, and on most stores they fight each other. Miller Harris's cart runs them together, with Shopify Functions keeping the pricing honest. This is how it was built and what it took to keep it steady.

Miller Harris Perfumes

The cart is where a luxury store either earns its price point or gives it away. A customer who has spent time choosing a fragrance arrives at the cart expecting the same care to continue. What they usually get is a drawer that flickers while three apps argue about the total, a gift that appears and disappears, and a delivery message written for a different country.

Miller Harris, the British fragrance house, needed their cart to carry the same care as the perfume. Gift wrapping, gift-with-purchase offers, free sample thresholds and international delivery all had to sit together without confusing the customer or slowing anything down. Several of those touch the same moment in checkout, which is exactly why they so often go wrong.

Why gift-with-purchase is harder than it looks

A gift-with-purchase offer sounds like a single feature. It is at least four. Something has to decide whether the customer qualifies. Something has to let them choose the gift, if there is a choice. Something has to add it to the cart at the right price, which is usually nothing. And something has to take it away again if the customer removes the item that qualified them.

The app store answer bolts all four onto the theme from the outside, which is where the flicker comes from: the cart renders, the app notices, the app corrects it, the cart renders again. It is also where the pricing risks live. If the gift's price is set to zero in the theme, a customer who knows what they are doing can add it without qualifying.

Functions for the price, the theme for the picker

The build on Miller Harris's store splits the problem along the line Shopify Plus actually provides.

A Shopify Function owns the price. The gift goes into the cart as a normal product and a Function discounts it when the qualifying conditions hold. Because the Function runs inside Shopify's own pricing, the customer cannot end up with a free gift they did not earn, and the number on the cart is the number at checkout. If the qualifying item comes out, the discount goes with it. There is nothing to game and nothing for the theme to correct after the fact.

The theme owns the experience. A custom gift-with-purchase picker sits in the cart drawer, so the customer chooses their gift where they are rather than being sent to a separate page. The picker checks stock before offering a gift, so nobody chooses something that cannot ship, and it was built to stay steady on screen while the cart updates. That steadiness took real work. A cart drawer re-rendering around a picker is where most gifting experiences fall apart on mobile.

Gift wrapping that moves as one

Gift wrapping on this store comes with a ribbon, and the two are separate products for good operational reasons. In the cart they must never be separate. If a customer removes the wrapping, the ribbon has to go too, and the price has to reflect both or neither.

Pairing them in the cart logic so they always move together is a small thing that removes a whole category of support tickets and mis-picked orders. The cart layout was reworked at the same time so wrapping, gifts and samples all hold up on a phone screen, which is where most of this store's customers are.

Delivery that reads correctly wherever you are

Free delivery and free sample thresholds only work if the customer can see how close they are, in a currency and with a message that makes sense for where they are. Miller Harris ships internationally, so the delivery messaging was localised by currency rather than written once in pounds and hoped for the best.

Multi-store support was added alongside it, so the same gifting and delivery features run across regions without being rebuilt per store. When the offer changes, it changes everywhere.

The part that keeps it working

Everything above sits at the most fragile point of the store, and it does not stay working on its own. Shopify changes, apps update, the offer changes for Christmas, and each of those can quietly break a cart that took months to get right.

What Miller Harris has is not just the build. It is a developer who knows the codebase, picks up the maintenance as the store grows, and can turn new work around quickly because there is no first day spent working out how the theme fits together. That is the arrangement most of Graftstudio's longest-standing clients end up on, and it is what a retainer is for.

Related service: Retained Support

Work with us

Got a project in mind?

Interested in working together? We'd love to hear from you.