Rocket Shop - Multi-channel Commerce Suite
Streamlined product synchronization with Klaviyo, reliable shipping integrations, and simplified product management workflows for a multi-channel commerce platform.
The challenge
Crag Techlabs' multi-channel commerce platform served affiliate retailers, brand shops, and social sellers but lacked reliable product synchronization with Klaviyo and visibility into fulfilment across carriers. Manual product imports were error-prone, sync failures went undetected, and shipping updates arrived unpredictably. They needed a scalable, fault-tolerant sync engine and a unified fulfilment-tracking layer that could grow without adding operational headcount.
What we built
A serverless, event-driven architecture for Klaviyo catalog sync paired with a REST API and a React admin dashboard. AWS Lambda workers, triggered by EventBridge schedules and manual API Gateway calls, push products, variants, and categories into Klaviyo via the Catalog API - decoupled from the core API by SQS retry queues and a DLQ. A dual-state fulfilment layer bridges Shopify fulfilment events with AfterShip tracking, with separate sync state for reliable retry and audit. The platform runs on AWS Lambda, RDS PostgreSQL, and Express with Sequelize, supporting multi-vendor shops, commission splits, and Nautical headless checkout.
Key features
Klaviyo catalog sync
- Catalog API v17 bulk sync for products, variants, and categories via Serverless Framework Lambdas
- Idempotent upserts keyed by external_id, with metafield mapping for custom attributes (color codes, supplier IDs, cost)
- SQS retry queue + DLQ for automatic replay, exponential backoff, and post-mortem visibility on failed syncs
- Bottleneck-based rate limiter (~2 req/sec) plus bulk job polling for async completions, staying inside Klaviyo's 60-req/min limit
- EventBridge-scheduled syncs every 6 hours, with manual on-demand triggers via API Gateway
Fulfilment & shipping
- Dual-state model: Shopify fulfilment status (pending / success / cancelled) plus AfterShip sync state (pending / synced / failed)
- Shopify webhook handler ingests fulfilment events and queues AfterShip lookups for tracking number and URL
- FulfillmentTracking entity carries AWB, carrier (UPS, FedEx, DHL, regional), and delivery events for unified reporting
- Delivery-status updates wired into order notifications and Klaviyo flows
Admin dashboard (React)
- Shop-level fulfilment list with filters by status, date range, customer, and carrier
- Shipping rule builder: weight bands, destination zones, per-carrier selections
- Bulk product import, Klaviyo sync status dashboard, and category mapping UI
- Order detail view with fulfilment timeline, tracking links, and commission breakdowns
Multi-vendor architecture
- Per-shop fulfilment routing, commission rates, and shipping rules
- Seller-earnings tracking split across item subtotal and shipping
- ACH payouts via Stripe Connect for automated seller settlement
- Role-based access (admin, creator, seller) with Firebase Auth
Integrations
- Nautical Headless Commerce GraphQL for checkout creation with country validation and inventory check
- Shopify inventory sync via GraphQL and fulfilment-webhook subscriptions
- Stripe customer + Connect payouts for shopper and seller flows
- Mux for product video; AWS S3 with signed URLs for documents
Challenges solved
Rate-limited bulk sync with automatic backoff
Bottleneck queues outbound requests inside Klaviyo's 60-req/min ceiling while batching products into 100-item bulk jobs. SQS retry + DLQ guarantees zero-loss sync and post-mortem visibility on every failure.
Decoupled fulfilment tracking state
Shopify order state and AfterShip sync state live in separate tables. AfterShip retries don't re-trigger Shopify webhooks, which is critical for high-volume sellers behind flaky carrier APIs.
Idempotent catalog sync via metafield mapping
Custom attributes map to Klaviyo metafields; updates key on external_id, so duplicate syncs are safe and never produce duplicate variants or categories.
Serverless event-driven architecture
EventBridge schedules + SQS fan-out replace cron management entirely. Lambda scales zero to thousands of concurrent syncs with no DB connection-pool bottleneck because each invocation is isolated.
Commission-aware order reconciliation
Order revenue is split (Rocket fee + creator commission + referrer fee) and persisted at creation. Stripe Connect handles multi-leg payouts to sellers from an audit-proof ledger.
Dual checkout: Nautical + Shopify
A unified Checkout controller abstracts Nautical GraphQL and Shopify REST behind one interface, so inventory checks, payment routing, and A/B testing happen server-side without client changes.
Structured observability for async work
Winston + CloudWatch capture sync ID, item counts, error context, and retry attempts on every Lambda invocation. CloudWatch Alarms on log patterns catch stuck syncs without a separate APM.
Outcomes
Live
Klaviyo product sync
Multi-carrier
Shipping integrations
Simplified
Product workflows
Have a product idea or a system to scale?
Tell us what you're building. You'll hear back within one business day - from a senior engineer, not a sales rep.
- Free 30-min discovery call
- Fixed-scope or T&M engagements
- NDA on request - first reply within 24h
