Feature #11838
openAdd free shipping concept based on admin side configuration
60%
Description
1. Admin configuration
Good as is. A few additions:
Wording: “$200 and above” qualifies, not “up to $200”.
Add an enable/disable toggle, and make it per tenant.
Decide what the threshold is measured against. The usual choice is the subtotal after discounts, excluding tax and shipping.
Decide which shipping methods it applies to. Usually only standard shipping is free, and express stays paid.
If you support multiple currencies or regions, store the threshold per currency or region.
2. Checkout
Don’t hide the shipping row completely. Show Shipping: Free ($0.00). A missing row makes customers wonder whether shipping was forgotten.
Show a progress hint below the threshold, like “Add $35 more for free shipping”. It raises average order value.
Hiding the carrier name from the customer is fine, but still store the shipping method on the order for fulfillment.
The server should always recompute eligibility. Never trust the client’s flag.
3. Order placement and Stripe
I’d change this part most. Don’t “remove” shipping and rely on a flag to adjust displays. Store the full breakdown on the order as a snapshot:
subtotal
discount_total
shipping_original (what it would have cost)
shipping_discount (equal to shipping_original when free)
shipping_final (0 when free)
tax_total
grand_total
free_shipping_applied (true/false)
free_shipping_threshold_at_order (so later admin changes don’t affect old orders)
With this, every screen, invoice, and email shows the same lines, and no display logic like “total minus shipping if flag is true” is needed. Stripe gets grand_total, which already has shipping at 0. This is also how Shopify and Magento model it: free shipping is a shipping discount, not a deleted charge. It also lets you treat free-shipping coupons the same way later.
Also update the Stripe PaymentIntent amount whenever the cart or address changes before payment.
4. Returns and cancellations
The idea is right, but it needs more precision:
Full cancellation before shipment: refund everything actually paid. If shipping was paid, refund it too. If it was free, there is nothing to refund for shipping.
Return after delivery: refund item amounts plus their share of tax and discount. Refund paid shipping only if the return is the merchant’s fault (damaged, wrong item).
Partial return that drops the order below the threshold is the case people miss. Pick a policy:
Simple and customer-friendly: keep free shipping.
Stricter: deduct the shipping_original amount from the refund. This must be stated in your return policy.
Never refund more than was actually charged. Track refunded amounts per line item so multiple partial refunds stay consistent.
Subtasks
Related issues