The pay-then-discover front door — two small apps joined at the hip — leaves Robert’s old personal monorepo for a company home Alie can own.
Jump by type: locked decisions · what moves · the journey · tripwires · honest risks · your six calls
Four calls made in-session, 2026-08-20 — everything below is built to these.
A new practice pays Digital Empathy at checkout.digitalempathyvet.com. The moment the payment lands, their discovery workspace is created at discovery.digitalempathyvet.com and every participant gets a personal link. That whole front door — two small Cloudflare Pages apps joined by one shared data store — lives today inside Robert’s old personal monorepo (the pre-neo Eve), where Alie can’t own it, review it, or safely change it.
The move changes where the code lives — never where the data lives, and never the addresses customers use. Same web addresses, same live workspaces, same payment flow.
Checkout app — chief-of-staff/checkout-page → Pages project checkout-page. One payment page + two functions: create-checkout.js (creates a Stripe Checkout Session — card or invoice flow — from an HMAC-signed link; the signature prefix binds the flow, so a card link can’t be tampered into invoice terms) and setup-discovery.js (verifies the paid session, seeds the workspace, returns per-person links).
Discovery app — chief-of-staff/brand-discovery → Pages project brand-discovery. ~71 files: the conversation engine (its own doc: “the system prompt IS the product”), ten API functions (chat · context · dashboard · manifest · participant · session · setup-chat · setup-discovery · synthesis · transcribe), docs, prompts, data.
The coupling: both apps bind the same KV namespace DISCOVERY_KV (id deaa24f6e7b9438da57e45f3fe110842). setup-discovery.js is byte-identical in both apps’ functions folders (diff-verified 08-20) — the same write path deployed twice.
Link minting today: signed checkout URLs come from chief-of-staff/scripts/lib/checkout_url.py, driven by deal-execution scripts. Separately, eve/neo carries an independent payment-link capability (src/runtime/hands/stripe-hand.ts: customer-create + checkout-link-create, kill-switched by STRIPE_HAND_ENABLED) — a potential second writer.
Uncommitted drift that travels: the discovery app’s untracked tests/setup-discovery.test.mjs and package-lock.json. The import takes the working tree at chief-of-staff commit b6f7d30; drift files named in the founding commit message.
What sheds automatically: the machine-local specialist routing lives in chief-of-staff’s root CLAUDE.md, not the apps’ own files. The discovery app’s own CLAUDE.md is self-contained product doc and travels; the checkout app has none.
The proven playbook from last week’s comms-repo move, resized to these apps. Stage 3 is the load-bearing one; stage 7 is the only phase-2 item.
Digital-Empathy/customer-onboarding, private. Folders checkout/ and discovery/. Trunk bootstrapped by branch-push + server-side rename (push-to-main is blocked machine-wide; ccio recipe: gh api .../branches/<b>/rename).b6f7d30, drift included (tests/, package-lock.json). Strip .vercel/, .DS_Store. setup-discovery.js is authored in the checkout app; the discovery app’s byte-identical copy is retired at cutover once the checkout deployment proves it serves. Fresh-start import — the old monorepo stays the permanent archive; no history rides along.DISCOVERY_CONTEXTS is referenced by the discovery app’s functions but absent from its wrangler.toml — dashboard-only. Inventory both Pages projects: bindings, env vars, secret names, custom domains. Provisioning doc lands in the repo. Known secret names so far: STRIPE_SECRET_KEY (both apps), CHECKOUT_SIGNING_SECRET (checkout), ANTHROPIC_API_KEY + OPENAI_API_KEY (discovery). Byte-parity assertion over every traveled file.wrangler pages deploy from the new repo’s clean main into projects checkout-page and brand-discovery. Pages keeps deployment history — rollback is re-serving the prior deployment. Cloudflare account migration is explicitly out of scope (later decision, same as ccio).Digital-Empathy/brand-discovery (stale June copy) with a pointer; archive ae-robertsanchez/checkout-page (Vercel-era, dead since 02-20) — pending your call 3.checkout_url.py lands in the repo (script or admin endpoint per call 4). eve’s hand: first inventory whether it ever held a green validation record or produced live receipts; then STRIPE_HAND_ENABLED=0 — reversible by flipping back. The declaration “customer-onboarding is the sole minter” goes in both repos’ docs.Team-readiness rides stages 1–6 rather than being a stage: a README a stranger can operate from (what this is · how a link is minted · how a workspace is seeded · how secrets are provisioned), a one-line receipt on every deploy, and a documented door for the known reality that live workspaces have needed hand-repair twice before (July) — documented, not improvised.
Each of these has already bitten once — here, or on the comms-repo move.