Switch Cart
B2B managed migration service for WooCommerce and Shopify stores up to 5,000 products. 2,527-LOC migration engine, 48-hour SLA.
- Migration engine LOC
- 2,527
- Max products per migration
- 5,000
- SLA
- 48 hours
- Source platforms supported
- WooCommerce + Shopify
Why We Built It
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 failure modes are the same every time. Variants get flattened into separate products. Category hierarchies lose their parents. Media URLs break. Historical orders do not transfer. SEO redirects go missing entirely, and the new store launches with half the search traffic the old one had. Migrations that “work” in the technical sense often turn into multi-week rescue operations after the fact.
The thesis for Switch Cart was that this is not a tooling problem; it is a pipeline problem. A managed migration service with a real engine underneath it — one that knows the shape of both source platforms, preserves what matters, and can be productized with tiered pricing and a hard 48-hour SLA at the top — delivers the outcome that a DIY tool cannot.
How It's Built
The starting point was field-level knowledge of both source platforms. Shopify Admin REST API (2024-10) and WooCommerce REST API v3 — not from the docs, but from exporting real stores of varying sizes and watching which fields are present, which are missing, and which have subtle differences between the two platforms. The quiet divergences are where the generic tools lose data.
From there, the migration engine is structured as an abstract pipeline with SourceClient and MigrationTarget as the two ends. SourceClient reads from WooCommerce or Shopify; MigrationTarget writes 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. A failing stage does not take the whole migration down with it.
Pricing is tiered to match pipeline complexity, not to maximize ARPU. Starter at $69 up to 50 products, Growth at $199 up to 500, Scale at $399 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 commitment. Smaller tiers run faster through the same engine and do not need the same guarantee attached.
What It Is
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, with the current implementation targeting TanStack Start storefronts. Adding a new source or destination is an interface implementation, not a pipeline rewrite.
Variant handling that preserves the full variant matrix. A T-shirt with size and color options transfers as a single product with the variant grid intact, not as twelve separate products. Category hierarchy is preserved using a two-pass walk — first pass builds the tree, second pass assigns products to the correct nodes — so parent/child relationships survive the migration.
Media re-encoded on the way across. Images get pulled from the source, re-encoded to modern formats (WebP, AVIF), uploaded to the destination, and URLs rewritten in product descriptions to point at the new locations. The storefront does not launch with broken image references, which is the most common visible failure mode of a lazy migration.
SEO redirects generated from the migration mapping. Every old product URL gets a 301 redirect to the new one, so the storefront inherits the old store’s search traffic instead of starting from zero. This is the single most important piece for the customer’s long-term revenue — and the piece that is easiest for a generic export/import flow to drop.
Where It Is
The engine handles stores up to 5,000 products on the Scale tier inside the 48-hour SLA. The SLA is achievable because the pipeline parallelizes where it can and fails gracefully where it cannot — a single product failing its media re-encode step does not block the rest of the migration, and partial failures surface individually rather than masquerading as whole-migration failures.
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 on modern performance primitives and a cleaner codebase.
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. One operator can service multiple Scale migrations per week because the pipeline is the product, not the work.
The architectural bet underneath all of it is the abstraction boundary. Because SourceClient and MigrationTarget are interfaces, the next source platform (BigCommerce, Magento) or the next destination (a different frontend framework) is an afternoon of interface work, not a rebuild. That is where the margin on the service comes from — the engine gets more valuable with every tier it can serve without growing.
Tech Stack
More work like this
The portfolio has more shipped products. About me covers the background and philosophy that connects them.