Each claim ships with concrete evidence — env vars, table names, cadence chips. No marketing fluff.
△Agent backbonePer-SKU total-THC computed at migration time, drives the Phase 2 cutoff
Each SKU's total-THC fraction is computed once at Wix → Medusa migration time and stored alongside the product. The Phase 2 Sunset cutoff (Nov 11 2026) is a database query — `WHERE total_thc <= 0.003` — not a hand-curated SKU list. No room for a missed delisting on Nov 12.
◉RetentionThree-phase strategy baked into the schema
Phase 1 (Liquidation, Apr 19 → Oct 31): full catalog on current rails. Phase 2 (Sunset, Nov 1-11): only compliant SKUs visible, Stripe + Aeropay rails. Phase 3 (Post-ban, Nov 12 →): adaptogen coffee + CBD wellness + compliant smokable hemp. The phase is a runtime flag; product visibility, payment rail, and compliance copy all consult it.
▲Real-time pushAlpineIQ + Klaviyo + Bland — retention infra survives the catalog pivot
SMS (AlpineIQ, cannabis-compliant), email (Klaviyo), and outbound wholesale voice (Bland) all read from the Medusa customer table, not from the Wix subscriber list. When the catalog shrinks, the messaging surface keeps running — same audience, different SKUs.
◉Retention23,924 legacy Wix contacts — stratified by consent, not blast-imported
The easy move is to dump every Wix contact into the marketing list. The honest one is to audit them. 23,924 contacts pulled from the old store, classified into five legal tiers (subscribed / past-purchaser / site-member / bulk-import / unsubscribed). Only 116 cleared as marketable; 16,712 bulk-import leads were written CRM-only with metadata.crm_only=true so no Klaviyo/AIQ sync ever touches them. CAN-SPAM and TCPA compliance is a column, not a promise — and the suppression list for the red tier is written before a single send.
- ▸23,924 contacts audited via the Wix Contacts v4 API (paginated)
- ▸116 green-tier (4 subscribed + 112 verified purchasers) → marketable
- ▸16,712 yellow_bulk quarantined crm_only=true; 0 red-tier ever written
- ▸Stratifier: scripts/wix-customer-import-stratified.ts (5-tier classifier)
△Agent backboneA Slack-driven, human-gated approval pipeline — agents draft, the owner ships
Shop workers and superusers queue content and design work into Slack; a 5-minute cron ingests it, an AI classifier routes it into one of eight action kinds, and nothing reaches a customer or production without a human tap. Two lanes: content drafts (SMS / email / blog) wait on the brand owner; site-design changes assemble a Vercel preview and wait on the account owner to promote. The agents operate on real store data and surface edge cases to a review queue instead of guessing — the discipline that keeps them from drifting.
- ▸Neon bmh-storefront-ops: triage_queue, superuser_uploads, design_requests, approval_audit
- ▸canPromoteToProd() = owner-only hard gate, re-checked server-side on every ship action
- ▸Every state transition written to an append-only approval_audit table
- ▸Structurally cloned from the jackiej.events triage architecture, not its content
▲Real-time pushOrder → confirmed → shipped → delivered, verified end-to-end to a real inbox
The transactional spine isn't a stub. An order fires a confirmation email, a shipping email with carrier tracking, and a delivery email — each rendered, sent, and confirmed landing in a real IMAP inbox. The send path is Resend → AWS SES → a self-hosted Stalwart mail server, all on verified domains. Customer SMS rides AlpineIQ's v2 transactional endpoint, consent-gated against AIQ's own opt-out suppression so it never texts a stranger.
- ▸3/3 lifecycle emails delivered + IMAP-confirmed (Resend → SES → Stalwart)
- ▸AIQ migrated off dead v1.1 piiSend/piiLookup → POST /api/v2/sms + GET /api/v2/loyalty/lookup
- ▸Order-placed webhook fans out: email + consent-gated SMS + AIQ retention tag
- ▸SES bounce/complaint → identity suppression, fail-closed
◆DesignAn operating surface, not just a storefront — live Medusa-backed admin on mobile
The old store had a Wix dashboard. The rebuild has an admin that reads live from Medusa over a Bearer-JWT bridge: orders with payment + fulfillment status pills, a per-order activity timeline (placed / paid / shipped / delivered), search and filters, and an iOS-style bottom nav so it runs as an installable PWA from a phone. A customer preferences page round-trips consent to the cross-brand OG.Life identity layer so a shopper never opts in four times.
- ▸/admin/orders renders 'Live from Medusa' over admin.bigmoosehemp.com (JWT-authed)
- ▸Per-order timeline + status pills + search/filter; mobile bottom-nav PWA
- ▸/preferences/[token] ↔ OG.Life biz-preferences webhook (HMAC-signed)
- ▸Backend recovered from a 4-day outage onto a fresh Postgres with zero meaningful data loss