Sample architecture study — not a named client
Retail / wholesale operations
Overview
This is a sample architecture study. It does not describe a named Palmate Solutions client or audited commercial results. It shows how we typically approach inventory synchronisation when a storefront, a warehouse tool, and a marketplace all need a shareable stock figure.
Stock was updated in three places: the website admin, a warehouse spreadsheet, and a marketplace seller central. Oversells appeared during promotions. Refunds and support load followed, but nobody could point to a single stock ledger.
Each channel has a different idea of ‘available’: website available-to-sell, warehouse physical count, marketplace fulfilment lag. A naive two-way sync creates loops. Partial failures (marketplace rate limits, webhook retries) can resurrect old quantities.
Introduce a small integration service that owns mappings and reservations. WooCommerce and the marketplace are clients of that service. The warehouse system remains the authority for physical stock. The service exposes an internal API for available-to-promise and consumes order/refund webhooks.
01
Warehouse receipts and adjustments write to the inventory service. The website never writes on-hand quantity directly except through that API.
02
When a checkout starts or a marketplace order is acknowledged, a reservation is held. Expiry and payment-failure paths release it.
03
Channel-specific workers push available quantities. They honour rate limits and store last-successful timestamps.
04
A queue lag gauge and a dead-letter table. Operators replay a message after fixing mapping errors — they do not ‘run the spreadsheet again’.
In a real engagement, success looks like fewer oversells, a measurable sync lag, and an operator who can explain a mismatch without opening three admin panels. We do not attach invented percentage improvements to this sample.
Next step
If this pattern matches a system you run, bring the current tools and the failure mode. We will say whether a sample should stay a sample — or become a build.