Add docs/parallel-migration.md

This commit is contained in:
WellBuilder Admin 2026-05-26 16:13:29 +00:00
parent 3b906ac974
commit cc6c9fd5f2

120
docs/parallel-migration.md Normal file
View file

@ -0,0 +1,120 @@
# Parallel Migration Guide
Run your sovereign stack alongside Shopify during migration — no cutover risk, no forced downtime.
## Overview
Five phases:
1. **Deploy** — Stand up the NotShop bundle (Replit + Fly.io)
2. **Mirror** — Import your product catalog from Shopify Storefront API
3. **Route** — Send a small percentage of traffic to your sovereign stack
4. **Validate** — Confirm orders, payments, and customer accounts work correctly
5. **Cut over** — Move all traffic; cancel Shopify
Customers always hit one URL. The Fly.io routing layer handles the split transparently.
---
## Phase 1: Deploy
### 1.1 Fork and deploy to Replit
1. Fork [git.wellspr.ing/WellBuilder/notshop-bundle](https://git.wellspr.ing/WellBuilder/notshop-bundle)
2. Import into Replit (New Repl → Import from Git)
3. Add environment variables in the Secrets tab (see `.env.example`)
4. Click Run — storefront starts on your Replit domain
### 1.2 Deploy the Fly.io routing proxy
```bash
flyctl auth login
flyctl launch --copy-config --name yourstore-proxy
flyctl secrets set SHOPIFY_ORIGIN=https://yourstore.myshopify.com
flyctl secrets set SOVEREIGN_ORIGIN=https://yourrepl.replit.app
flyctl secrets set SOVEREIGN_WEIGHT=0
flyctl deploy
```
### 1.3 Point your domain to Fly
Update DNS (Bunny.net recommended) to CNAME your domain to the Fly.io app:
```
yourstore.com CNAME yourstore-proxy.fly.dev
```
At this point 100% of traffic still routes to Shopify. Your sovereign stack is deployed but idle.
---
## Phase 2: Mirror — import product catalog
```bash
npm run catalog:import
```
Pulls products, variants, and collections from the Shopify Storefront API into your PostgreSQL database.
See [storefront-api.md](storefront-api.md) for token setup.
Re-run anytime to sync changes. For real-time sync, configure the webhook bridge (`server/webhook-bridge.ts`).
---
## Phase 3: Route — split traffic
Once the catalog is imported and the storefront renders correctly:
```bash
flyctl secrets set SOVEREIGN_WEIGHT=10 # 10% to sovereign, 90% to Shopify
flyctl deploy
```
The proxy assigns a session cookie on first visit so each visitor stays on the same backend for their entire session.
Ramp gradually: 10 → 25 → 50 → 90 → 100. Each step is a 30-second Fly.io deploy.
---
## Phase 4: Validate
While traffic is split:
- **Orders** — Check `/admin` for successful orders
- **Payments** — Confirm Authorize.net transactions in your Authorize.net control panel
- **Checkout flow** — Go through checkout yourself
- **Customer accounts** — Test account creation and login
---
## Phase 5: Cut over
```bash
flyctl secrets set SOVEREIGN_WEIGHT=100
flyctl deploy
```
All traffic now goes to your sovereign stack. Then:
1. Cancel Shop Campaigns (if not already paused — do this first)
2. Export order history from Shopify Admin as CSV
3. Downgrade from Shopify Plus (requires notice period per your contract)
---
## Timeline
Most merchants complete migration in 24 weeks:
| Week | Work |
|---|---|
| 1 | Deploy, mirror catalog, validate storefront |
| 2 | Route 10% traffic, monitor orders |
| 3 | Ramp to 50%, tune any issues |
| 4 | Cut over to 100%, cancel Shopify |
---
## Support
Questions: [notshop.org/report](https://notshop.org/report) or open an issue in this repository.