The product
Tiger Gems is a US handmade, conflict-free silver jewelry brand that sells across multiple storefronts at once, including Shopify, Etsy, and its own direct site. I built and delivered an integrated CRM that runs all of those stores from one unified platform, automating the order, inventory, and dispatch workflows so the team manages every channel in one place instead of logging into each marketplace and reconciling it by hand. The system became the operational backbone the business runs its day on: orders in, stock reconciled, labels printed, parcels out.
My role
I was the full-stack developer who designed and delivered the complete backend and the staff-facing application: the order and inventory engine, the integrations with each storefront and courier, the cloud label-printing pipeline, and the dispatch interface that warehouse and packing teams use every day. I owned the engineering decisions end to end, from how each marketplace’s data was ingested and normalized to how stock stayed consistent across channels and how an order moved from placed to packed to shipped. With 15+ years building production systems, I treated this as one coherent operational platform rather than a set of disconnected scripts.
Architecture
The CRM was built as a cleanly layered system so that marketplace quirks never leaked into the core business logic, and so a new sales channel or courier could be added without rewriting the engine:
- Layered separation of concerns. A thin web and API layer delegates to a domain service layer (orders, inventory, dispatch, returns, reporting), which talks to a data-access layer over MySQL. Business rules live in the services, not in controllers or SQL, so the parts that change most often stay isolated from the parts that should not. This is SOLID applied in practice rather than cited on a slide: each service has a single responsibility, and the higher layers depend on abstractions rather than on a specific marketplace API.
- A per-marketplace integration adapter pattern. Shopify, Etsy, and the direct storefront each have their own API shapes, pagination, and webhook formats, so each one is its own adapter behind a common channel contract. Orders, products, and stock updates flow through a single internal model regardless of where they came from, and adding a channel means adding an adapter, not editing the core. That is the Open/Closed Principle doing real work.
- Event-driven, webhook-fed sync. The platform listens to marketplace webhooks (order placed, item sold, stock changed) and reacts out of band rather than polling on the request path. A sale on one channel raises an internal event that fans out to update stock on the others, queue the dispatch job, and notify staff, so the heavy reconciliation work never blocks the user placing or processing an order.
- Cloud printing and courier integration. On order placement the system generates the shipping label through a cloud printing integration and books the parcel with the right carrier (USPS, FedEx, and others) through their APIs, then writes the tracking number back against the order. The print-and-ship path is automated end to end instead of being a manual copy-paste between three tabs.
- Role-based access across a multi-team workflow. Management, warehouse, and packing staff each see a different slice of the same platform through role-based access control, so the packing queue, dispatch board, and revenue reporting are scoped to the people who should see them.
The engineering challenge
Running one product catalog across Shopify, Etsy, and a direct site means constant reconciliation, and the failure mode is expensive: oversell the same one-of-a-kind piece on two marketplaces and you have to cancel on a customer. SKUs, stock counts, and product codes drift between platforms, each marketplace has a different API and a different idea of what a webhook means, and a sale on one channel has to update the others fast enough that it never oversells. The hard part was keeping inventory consistent in near real time across marketplaces that do not agree on anything, and catching discrepancies proactively, surfacing a mismatch to an admin before a customer hit it, rather than discovering it after an order had already been placed against stock that was gone. I solved it with a single internal source of truth for stock, event-driven updates fanned out to every channel on each sale, and a reconciliation layer that compares channel state against the master and raises an alert the moment they disagree.
What I built
- Centralized order management across Shopify, Etsy, and direct-to-site storefronts from one dashboard
- Automated order printing that generates shipping labels and books couriers on order placement, then writes tracking back to the order
- Smart inventory and stock tracking across every platform, reconciling SKU, code, and count discrepancies against a single source of truth
- Proactive admin alerts the moment a product or stock mismatch is detected across channels
- Bulk product import and export with catalog sync between stores
- Dispatch management with shipment tracking and courier integration (USPS, FedEx, and others), plus automated tracking notifications to customers
- A staff queue interface that auto-sorts orders to packing staff with packing slips and live dispatch status
- Returns and refund processing with a complete audit trail
- Invoicing, billing, and cross-channel sales, inventory, and revenue analytics
Engineering practices
The platform was built to run unattended, so the engineering around it focused on resilience and visibility. Marketplace and courier calls are wrapped so a third-party outage degrades gracefully and retries rather than dropping an order, webhook handlers are idempotent so a marketplace redelivering the same event never double-processes a sale, and every state change on an order or a return is recorded as an audit trail the team can trust when money and stock are on the line. Recurring work (catalog sync, stock reconciliation, tracking-status polling) runs on scheduled jobs off the request path, and the role-based dashboard keeps the operational picture (queue depth, mismatches, dispatch status) in front of the people who act on it.
Stack
PHP for the backend automation and domain services, MySQL for storage, and modern JavaScript (ES6+) for the staff-facing interface. Integrations run over the Shopify and Etsy APIs plus REST APIs and webhooks for order and stock events, courier APIs (USPS, FedEx, and others) for booking and tracking, and a cloud printing integration for shipping labels. A real-time notification engine drives staff alerts and customer tracking updates, role-based access control scopes the platform per team, and S3-backed cloud storage holds documents and assets.
Outcome
The result was centralized multi-store control with 100% automated order dispatch and proactive discrepancy alerts. Fulfillment time dropped by roughly 60% and manual errors were effectively eliminated, turning order processing and shipping into close to a single-click operation across every channel. The same normalized, cross-channel order and inventory data that powers the platform today is exactly the foundation an AI roadmap would build on next: demand forecasting per SKU, smarter reorder and restock suggestions, and anomaly detection that flags a pricing or stock mismatch before a human notices it.