Problem
Shoppers remember one more item right after paying. They write to support or place a second order, which means double packing and double shipping. Shopify lets only the merchant edit an order, and automatic discounts do not apply to items added later.
Solution
The app has a web process and a separate worker, both on a shared Postgres database. A small storefront button appears in the cart. Prices come from a simulated combined cart, and the difference is covered with per-item discounts. Payment goes through Shopify's native balance page, and unpaid additions roll back on a schedule.
Key decisions
Chose Shopify's native payment page for the difference
Why A completed checkout cannot be resumed, and this way the app never touches card data.
Chose to take the price from a simulated combined cart
Why Automatic discounts freeze during an order edit, so the naive formula under-priced the added items.
Chose a check before every order edit is committed
Why If the total differs from the expected one, the edit is refused rather than shipped with a wrong price.
Chose a separate worker with Postgres as the queue
Why One database instead of extra infrastructure, with webhooks kept thin and rollbacks retried in the background.
Results
- Live on the Shopify App Store with a 5.0 rating.
- Storefront script under 10 KB gzipped.
- Add-ons wait on a fulfilment hold until the balance is paid.
- Built for review: data-privacy webhooks, an onboarding checklist and an in-app help centre.

