Commerce & Integrations
Kept a headless Shopify storefront, 37 stores, and the ERP in agreement on products, pricing, inventory, and every order.
The commerce stack of a multi-channel retailer, run end to end: a headless Shopify storefront, the integrations between Shopify, the POS, and the ERP, and the feeds that carry it to marketing and search.
Context & Goal
A multi-channel retailer selling on the web and in 37 stores, with Shopify Plus for commerce, NewStore for the stores' POS and order management, and NetSuite as the ERP. The goal was to keep all three in agreement on products, pricing, inventory, and orders, catch drift quickly, and carry the result out to marketing and search.
I own the headless storefront end to end, including its account features, and the Shopify, NewStore, and NetSuite integrations that connect it to the stores and the ERP.
The storefront
One Shopify cart behind every page a customer can buy from.
The storefront is headless: Shopify Plus holds products, carts, and web orders, and a Hydrogen storefront on Oxygen renders the shop through the Storefront API. Custom merchandising, subscription, review, and account features live in that storefront.
Alongside it, dozens of Astro landing pages on Vercel sell into the same Shopify cart, so a campaign gets its own page without a second checkout or a second source of orders.
The integrations, end to end
From a sale on any surface to the feeds that carry it back out.
A customer buys on the Hydrogen storefront, an Astro landing page, or a register in one of 37 stores.
Shopify, the POS, and the ERP stay in agreement on products, pricing, inventory, and the order lifecycle.
POS and OMS events publish to Pub/Sub and land in BigQuery through Cloud Run and Cloud Functions.
A Dagster job compares POS/OMS, ERP, and commerce every hour and alerts Slack when they drift.
BigQuery feeds Klaviyo events, Judge.me review requests, and the Merchant Center local-inventory feed.
Results
- 306,319 orders in 12 months across web and 37 stores, Oct 2025 to Sep 2026.
- 47,630 review requests sent to store customers since Apr 2026 through Judge.me.
- ~6,470 POS and OMS events a day captured into the warehouse through Pub/Sub, Cloud Run, and Cloud Functions.
- 4,199 store-level local-inventory offers published daily to Google Merchant Center.
What I built
The storefront, the integrations around it, and the feeds that carry it outward.
Headless Shopify storefront
Shopify Plus as the commerce backend and a Hydrogen storefront on Oxygen in front of it, run end to end.
Custom storefront features
Merchandising, subscription, review, and account features built into the Hydrogen storefront.
Astro landing pages
Dozens of Astro landing pages on Vercel that sell straight into the Shopify cart, so a campaign page never needs its own checkout.
Product, pricing, and inventory sync
Integrations that keep Shopify, NewStore POS, and NetSuite in agreement on what is sold, at what price, and how much is on hand.
Order lifecycle
Web and store orders carried through their lifecycle from Shopify and the POS into NetSuite.
Local-inventory feed
A daily Google Merchant Center feed of store-level offers, so search and shopping show what each store has in stock.
Store review requests
Review requests sent through Judge.me to customers who bought in a store, not only online.
Klaviyo event feeds
Commerce events fed from BigQuery to Klaviyo.
Hourly reconciliation
A Dagster job that compares POS/OMS, ERP, and commerce every hour and posts to Slack when they drift apart.
Architecture in detail
The flow runs left to right. The web surfaces sell into Shopify and the stores sell through the POS, while Shopify, the POS, and NetSuite stay in sync with each other. Store events land in BigQuery through Pub/Sub, and the warehouse feeds marketing, reviews, and search while Dagster checks that the systems still agree. Hover a node to trace its connections; click a node for details.