Problem
The move had to carry more than products. FAQs, sliders, banners and city pages lived in metafields and metaobjects. Indexed URLs had to survive, the design had to match the Shopify theme, and the manager still needed a way to edit data that the BigCommerce admin has no screen for.
Solution
A Node.js command-line migrator with a profile per store and a guard that blocks writes to live stores. It moves products with variants, categories, pages, blog, files, metafields, metaobjects, navigation, redirects, SEO fields and reviews, and checks the storefront through GraphQL. Metaobjects are stored as inline JSON metafields plus a store-level registry. My own metafields manager edits them like the Shopify admin.
Key decisions
Chose to store metaobjects as inline JSON metafields plus a store-level registry
Why BigCommerce has neither metaobjects nor metafield definitions, and inline JSON is read in one storefront query with no joins.
Chose to build my own metafields manager instead of a paid app
Why The client needed typing from the Shopify definitions, several stores, reference fields and a metaobject editor that works like Shopify's.
Chose Shopify's URL structure character for character
Why Indexed pages and outside links keep working. I checked that BigCommerce accepts those custom URLs and redirects the trailing-slash form.
Chose to host the manager from a clean copy with basic auth and migration endpoints off
Why The migrator repository holds client exports and must never be part of a deployment.