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



