Skip to main content
Back to portfolioB2B / E-Commerce Migration

Switch Cart

B2B managed migration service for WooCommerce and Shopify stores up to 5,000 products. 2,527-LOC migration engine, 48-hour SLA.

Switch Cart
Migration engine LOC
2,527
Max products per migration
5,000
SLA
48 hours
Source platforms supported
WooCommerce + Shopify

The Problem

E-commerce platform migrations are the kind of project every operator dreads. WooCommerce and Shopify both have REST APIs, but the shape of the data — variants, categories, media, orders, customers, SEO metadata — differs enough between them that a generic export-import tool always loses something important on the way across.

The common failure modes are all the same: variants get flattened into separate products, categories lose their hierarchy, media files get broken URLs, historical orders don’t transfer, SEO redirects are missing entirely, and the new store launches with half the traffic the old one had. The migrations that “work” often turn into multi-week rescue operations.

The opportunity I saw was to build a managed migration service with a real pipeline — not a download-one-CSV-upload-another tool — and sell it as a productized engagement with tiered pricing and a hard 48-hour SLA.

The Approach

I started with the two source platforms I needed to handle most often: Shopify Admin REST API (2024-10) and WooCommerce REST API v3. I spent the first few weeks building field-level knowledge of both — not just reading the docs, but actually exporting real stores of varying sizes and watching which fields are present, which are missing, and which have subtle differences between the two platforms.

From there I designed the migration engine as an abstract pipeline with SourceClient and MigrationTarget as the two ends. SourceClient handles reading from WooCommerce or Shopify; MigrationTarget handles writing into a TanStack Start storefront. Every data type — products, variants, categories, tags, media, orders, customers, SEO redirects — gets its own pipeline stage with its own failure handling.

For pricing, I tiered the service: Starter at $69 for up to 50 products, Growth at $199 for up to 500, Scale at $399 for up to 5,000. The Scale tier carries the 48-hour SLA because at that size the migration is mission-critical and the customer needs a guarantee.

What I Built

A 2,527-LOC migration engine with an abstract pipeline architecture. SourceClient is an interface; WooCommerceClient and ShopifyClient are implementations. MigrationTarget is the interface for destinations; the initial implementation targets TanStack Start storefronts. Adding a new source or destination is a matter of implementing one interface, not rewriting the pipeline.

Variant handling that preserves the full variant matrix: a T-shirt with size and color options transfers as a single product with the full variant grid intact, not as twelve separate products. Category hierarchy is preserved using a two-pass walk — first pass builds the category tree, second pass assigns products to the right nodes.

Media re-encoding on the way across: images get downloaded from the source, re-encoded to modern formats (WebP, AVIF), uploaded to the destination, and URLs are rewritten in product descriptions to point at the new locations. No broken image links on day one.

SEO redirects generated from the migration mapping: every old product URL gets a 301 redirect to the new one, so the new store inherits the old store’s search traffic instead of starting from zero. This is the single most important thing for a migration and the thing most migration tools completely miss.

Results

The engine handles stores up to 5,000 products on the Scale tier with a 48-hour SLA. That SLA is achievable because the pipeline is designed to parallelize where it can and fail gracefully where it cannot — a single product failing its media re-encode step does not block the rest of the migration.

Variant matrices, category hierarchies, media re-encoding, order history, and SEO redirects all transfer as first-class concerns. The resulting TanStack Start storefront is functionally equivalent to the source store from the customer’s perspective, but with modern performance and a cleaner codebase.

Pricing tiers map directly to pipeline complexity: Starter runs mostly from cache, Growth runs the full pipeline end-to-end, Scale runs with parallelization and dedicated SLA-backed attention. One operator can service multiple Scale migrations per week because the pipeline is the product, not the work.

Switch Cart runs as a productized B2B service, not a consulting engagement. Customers pay a fixed tier, receive a finished migration inside the SLA, and keep the storefront. The engine’s abstract pipeline means the next source or destination platform is an interface implementation, not a rewrite.

Tech Stack

TypeScriptNode.jsTanStack StartPostgreSQLShopify Admin REST API (2024-10)WooCommerce REST API v3Sharp (media re-encoding)BullMQ

More work like this

The portfolio has more shipped products. About me covers the background and philosophy that connects them.