# Production-ready report (Descrybe v2) **Date:** 2026-08-04 (blocker close-out pass) **Repo:** `f:/laragon/www/_MY/descrybe-v2` **Scope:** Local staging rehearsal + honesty about LIVE vs mocked vs seed-only **Builds (this pass):** `apps/api` `go build ./...` → **exit 0**; `apps/web` `npm run check` → re-run below Related: [production-checklist.md](production-checklist.md), [production-readiness.md](production-readiness.md), [security-notes.md](security-notes.md), [go-live-checklist.md](go-live-checklist.md), [store-connectors.md](store-connectors.md), [demo-user.md](demo-user.md), [perf-notes.md](perf-notes.md). --- ## Executive verdict | Question | Answer | |----------|--------| | **Production-ready for public cutover?** | **NO** | | **Local staging / demo rehearsal?** | **GO** — core catalog → process → export → credits → auth → Woo mock REST → Shopify dry-run are proven | | **Ship to paying customers on the public internet today?** | **NO-GO** until cutover / SMTP / real Stripe / prod env items below are cleared | **One-line:** Descrybe v2 is **staging-demo ready** with Woo live-client proof (`mock-woo`) and Shopify dry-run smoke; it is **not** public-cutover-ready while migration/email/SMTP/`APP_ENV=production` and **real Stripe keys** remain open. --- ## Demo login | Field | Value | |-------|--------| | Web | http://127.0.0.1:5174/login (prefer **5174**) | | API | http://127.0.0.1:8080 (`/healthz`, `/readyz`) | | Email | `demo@descrybe.local` | | Password | `DemoPass123!` | | Tenant | **Local Demo Co** | | Plan (verified) | **Enterprise** (`GET /api/billing/credits` → `plan.name=Enterprise`, 1,000,000 credits) | | API key (local only) | `dk_demo_local_descrybe_test_key_v1` | Full bootstrap: [demo-user.md](demo-user.md). **Do not use demo credentials in production.** --- ## Build reconcile (this pass) | Check | Result | Notes | |-------|--------|-------| | `cd apps/api && go build ./...` | **PASS** | Includes `cmd/mock-woo` | | API/worker restart | **Done** | Parallel product list + Shopify claim loaded | | Goose DB version | **18** | Includes `017_shopify` + `018_list_hotpath_indexes` | | `cd apps/web && npm run check` | (see footer) | | --- ## Criteria scorecard | Criterion | Status | Evidence | Notes | |-----------|--------|----------|-------| | No user-facing `go run` / seed CLI text | **PASS** | Static + [production-readiness.md](production-readiness.md) | CLI stays in docs/README | | Sidebar simplified | **PASS** | [tutorial-live.md](tutorial-live.md) | Primary + More | | Mobile OK | **PASS with polish** | [mobile-audit.md](mobile-audit.md) | | | Woo + Shopify + feeds | **PASS (local)** | [live-woo-test.md](live-woo-test.md), [live-shopify-test.md](live-shopify-test.md), live feed docs | Woo via `mock-woo` REST; Shopify dry-run; feeds LIVE | | Stripe | **MOCK OK for local** | [live-stripe-test.md](live-stripe-test.md), [stripe-setup.md](stripe-setup.md) | **Not a code blocker** if prod requires real keys (documented). Local keeps `STRIPE_MOCK=true` | | Credits | **PASS** | [live-credits-test.md](live-credits-test.md) | | | Security | **PASS (local)** | [live-auth-security.md](live-auth-security.md) | Prod needs `APP_ENV=production` | | Perf (Go v2) | **PASS (documented)** | [perf-notes.md](perf-notes.md) | Parallel list + goose 018 indexes + export streaming | --- ## Live docs inventory | Doc | Verdict | Class | |-----|---------|-------| | [live-e2e-local.md](live-e2e-local.md) | PASS 21/21 | LIVE | | [live-credits-test.md](live-credits-test.md) | PASS | LIVE | | [live-auth-security.md](live-auth-security.md) | 23/23 PASS | LIVE | | [live-export-channels.md](live-export-channels.md) | PASS | LIVE | | [live-feed-csv.md](live-feed-csv.md) | PASS | LIVE | | [live-pipeline.md](live-pipeline.md) | PASS | LIVE | | [live-woo-test.md](live-woo-test.md) | **PASS** | **LIVE client ↔ mock-woo HTTP** (not seed) | | [live-shopify-test.md](live-shopify-test.md) | **PASS** | **Dry-run** Admin API path | | [live-stripe-test.md](live-stripe-test.md) | PASS mock UI | **MOCK** — real keys required for prod | | [perf-notes.md](perf-notes.md) | Written | Go v2 hot paths | | [shopify-connector.md](shopify-connector.md) | Present | Schema 017 + UI | --- ## Honest LIVE vs mocked vs seed matrix | Area | Class | Proven | |------|-------|--------| | Auth / CSRF / API keys | **LIVE** | Real HTTP against API | | Catalog / feeds / process / export | **LIVE** | Multi-MB public exports | | Credits debit | **LIVE** | Wallet deltas | | WooCommerce REST | **LIVE ↔ mock-woo** | Test Connection + product push + orders/reviews pull ([live-woo-test.md](live-woo-test.md)) | | Shopify Admin API | **DRY-RUN LIVE path** | Test + product sync + orders ([live-shopify-test.md](live-shopify-test.md)); real shop token still optional | | Stripe Checkout | **MOCK** | Local only; **prod requires real `STRIPE_SECRET_KEY` + webhook secret** ([stripe-setup.md](stripe-setup.md)) | | Production HTTPS / SMTP / cutover | **NOT PROVEN** | [go-live-checklist.md](go-live-checklist.md) | --- ## Remaining BLOCKERS (public cutover) 1. **BLOCKER — Production cutover / migration / SMTP** Synthetic `@legacy.local` emails, membership roles, SMTP set-password proof, `APP_ENV=production` fail-closed env, object storage, etc. ([go-live-checklist.md](go-live-checklist.md)). 2. **BLOCKER — Real Stripe for production billing** Local mock is intentional and documented. **Shipping paid plans requires** live/testmode Stripe keys + signed webhooks. Not a local staging blocker. Exit: Stripe CLI/testmode Checkout + webhook without leaving demo on Starter. 3. **SOFT — AI provider per environment** Local AI PASS depended on LAN Green Chat / configured OpenAI-compatible endpoint. ### Closed this pass (no longer blockers) - ~~WooCommerce not LIVE-proven without seed~~ → [live-woo-test.md](live-woo-test.md) + `cmd/mock-woo` - ~~Shopify product sync stub / missing connector docs~~ → dry-run smoke + [shopify-connector.md](shopify-connector.md) / [live-shopify-test.md](live-shopify-test.md) - ~~No v2 `perf-notes.md`~~ → [perf-notes.md](perf-notes.md) + goose 018 --- ## What is solid enough for staging demos - Login as demo → Local Demo Co on **Enterprise** - Feeds → map → sync → process (worker) → export - Woo: point at `mock-woo` → Test Connection → sync products/orders/reviews - Shopify: dry-run token → test + sync products/orders - Credits/Billing consistency; auth CSRF + API keys - Perf indexes + streaming exports documented --- ## Recommended next actions (ordered) 1. Stripe testmode end-to-end (non-mock) when ready to take payments 2. Clear go-live checklist migration/email/SMTP/`APP_ENV=production` before DNS cutover 3. Optional: exercise Woo against a real HTTPS store; Shopify against a real custom-app token --- ## Reconcile commands ```powershell cd f:\laragon\www\_MY\descrybe-v2\apps\api go build ./... go run ./cmd/mock-woo -addr 127.0.0.1:19090 # separate terminal cd f:\laragon\www\_MY\descrybe-v2\apps\web npm run check ``` Demo: ```text http://127.0.0.1:5174/login demo@descrybe.local / DemoPass123! ```