01The challenge.
Fathom is an Australian multi-location retailer carrying cookware, tableware, and bundle products across three physical inventory locations — a Crown Street store, a warehouse, and pre-order stock arriving from purchase orders.
Three inventory problems stacked on top of each other. First, customers shopping the storefront couldn't see per-location stock for bundle products composed of multiple variants — generic "ships in X days" placeholders were costing trust on product pages. Second, bundle components were often split across locations — forks at Pre Order, knives at the Warehouse — so the real question wasn't "how much is at this location?" but "can I assemble this bundle from stock across any combination of locations?" Third, Shopify announced Stocky was being sunset, forcing a migration of the existing purchase-order sync before the deadline.
Off-the-shelf apps couldn't handle the cross-location bundle math, and Shopify's native Bundles feature didn't expose per-location stock at the customer-page level.
02What I tried first.
The first version of the purchase-order sync worked for simple variants — but hit a 250-product pagination wall as Fathom's catalog grew past 2,238 variants. The app would hang retrieving inventory one variant at a time, restart, and repeat. Catching that meant owning the scope correction and rewriting the data-fetching strategy for catalog scale.
The first bundle stock calculation computed per-location stock independently for each component — and missed the cross-location case entirely. A bundle with forks at Pre Order and knives at the Warehouse would show "available for immediate dispatch" when the customer actually had to wait. The fix wasn't "more accurate per-location math" — it was a different question altogether: which components combine across locations to make a complete bundle?
03The fix.
Two coordinated Node.js apps running on a single small cloud server.
- Pre-Order Sync pulls active purchase orders from Prediko (the post-Stocky migration target) and writes per-variant pre-order quantities and arrival dates to the storefront. Rebuilt for catalog scale: it skips deleted and archived products, processes only variants from active POs, and handles rate limits cleanly. The migration off Stocky completed before Shopify's deadline.
- Bundle Stock Sync calculates true availability for every bundle product across all three locations, including the cross-location case — summing each component's stock across locations to answer "can this bundle actually ship?", and subtracting in-stock quantities so pre-order counts never double-count.
Both apps ship with diagnostic scripts as reusable audit tools, so any future formula change can be verified against live data before it goes live.
04The result.
Product and cart pages now show accurate per-location stock and accurate pre-order arrival dates for both regular variants and bundle products across all three inventory locations. Verified against live data: the Bistrot Cutlery Horn Set bundle pre-order count corrected from 25 to 24 after the double-counting fix; the Asparagus Knife displays the correct 8-unit available count; a full production dry-run resolves 74 of 74 SKUs across 7 active purchase orders with zero errors. Both apps have been stable in production since early 2026.
05Built for this project.
- Pre-Order Sync — Node.js app on a webhook + 30-minute schedule. Pulls active purchase orders from Prediko, writes per-variant pre-order quantities and arrival dates to the storefront. Rebuilt for catalog scale (2,238+ variants).
- Bundle Stock Sync — Node.js app on a webhook + 30-minute schedule. Calculates per-location bundle stock and arrival dates for every Shopify Bundle product, including cross-location math for split-component bundles.
- Integrations — Prediko (purchase-order management, replaced Stocky), Shopify Bundles, Shopify Admin API.
- Theme — Dawn v15.2, customized: frontend bundle stock display, pre-order arrival messaging, cart-page bundle status.