Skip to content
← Work index

01Case study

OrbitSKU

Real-time multi-channel inventory sync

Year
2025-26
Role
Architecture, backend, deployment
Status
Live

A merchant selling one physical unit across three marketplaces can sell it three times. OrbitSKU is the ledger that stops that happening - a hub-and-spoke engine that treats one channel as the source of truth and drives the rest from it.

14
Merchants live
42
Connected storefronts
<5s
Shopify / Etsy propagation
$149
Top subscription tier

The constraint

What made it hard

Marketplace APIs disagree about almost everything: rate limits, webhook guarantees, identifier schemes, and what a "variant" even is. Shopify and Etsy will push you an event; eBay expects you to come and ask. Building a separate integration per channel means every new marketplace is a schema migration and a fresh set of edge cases in the sync path.

Approach

  1. 01

    One Channel Manager abstraction

    Each marketplace implements the same interface - authenticate, list, map, read stock, write stock, reconcile. The sync core never learns a channel’s name. Adding a marketplace means writing an adapter, not touching the engine.

  2. 02

    JSONB payloads instead of migrations

    Channel-specific fields live in JSONB columns in PostgreSQL alongside the normalised SKU rows. A new marketplace with an unfamiliar shape gets stored faithfully on day one, with no downtime and no schema change for existing merchants.

  3. 03

    Push where possible, poll where necessary

    Shopify and Etsy webhooks drive updates that land in under five seconds. eBay is polled on a schedule deliberately budgeted to sit inside the Trading API rate limits, so a merchant with fourteen storefronts never trips a ceiling.

  4. 04

    Errors surfaced, not swallowed

    Every failed write lands in a per-error correction queue with the payload attached, so a merchant can see exactly which listing rejected which quantity and retry it, rather than discovering the drift a week later during stocktake.

Architecture

OrbitSKU hub-and-spoke synchronisation topologyPostgreSQLSKUs + JSONBone row per SKUchannel payload as jsonbSync coreChannel Managersource of truthShopifyadapterEtsyadaptereBayadapterwebhook - push, under 5swebhook - push, under 5sscheduled poll - budgetedto sit inside the rate limitCorrection queueper-error replayrejected writesaccent - real-time channel · dashed - polled channel · the core never learns a marketplace’s name
Hub-and-spoke topology. Writes converge on the sync core; channel adapters translate in both directions.

Specification

Auth
Per-channel OAuth 2.0, refresh rotation
Data model
Normalised SKUs + JSONB channel payloads
Ingest
Webhooks (Shopify, Etsy) + scheduled poll (eBay)
Mapping
Automated SKU matching with manual override
Billing
Stripe tiered subscriptions, Free → $149/mo
Failure mode
Correction queue with per-error replay

Stack

  • Node.js
  • PostgreSQL
  • Shopify API
  • eBay Trading API
  • Etsy API
  • Stripe
  • Webhooks

Where it landed

  • 01

    Fourteen merchants running forty-two connected storefronts in production.

  • 02

    New marketplace integrations ship as adapters - no schema migration, no downtime for existing tenants.

  • 03

    Stock drift became visible and replayable instead of silent.

Next case study

02

WhatTheFood

AI nutrition analysis, photo to macros

Read →

Something that has towork in production?

I take on contract engineering and full-time roles. Most useful first message: what you are building, what is currently in the way, and when you need it live.