Home / Ops / More in this area

Demo + Beta Ops status (2026-06-30)

Updated Jul 01, 2026 · Affirmology_DemoBetaOps_Status_v1.md

Summary. Marathon ops day on the live demo (demo.affirmology.ai). Snapshot + open items.

Demo + Beta Ops status (2026-06-30)

Marathon ops day on the live demo (demo.affirmology.ai). Snapshot + open items.

Audience (CRM appSuTUcOQbpkxLUR, People tblOOWgEjVfX21NT3) - EXCLUDE founders Jeff + Sol in all counts

23 external people signed the NDA. Breakdown: - 15 completed a song -> sent the Welcome email (subject was "Your Origin Soul Song is ready"). - 5 stopped at the intake form -> sent the Form Stopper re-engagement email (link to the form). - 3 had failed renders (Taylor Pascoe, Alex de Carvalho, Leandro Jubilut) -> re-rendered + sent the Oops+Welcome email. - 3 came in WITHOUT Jeff inviting them (organic): Patrick Hilsbos, Tracie Briggs, Leandro. No referral tracking exists. - Phones: 0 collected. Email is the only channel.

What got fixed/shipped today (studio auto-deploys from github main; site from master)

Email mechanics (locked)

OPEN ITEMS

  1. Cloudflare token - RESOLVED (2026-06-30): Jeff issued a working "Edit Cloudflare Workers" token (cfut_..., saved to affirmology-studio/.env as CLOUDFLARE_API_TOKEN). Worker affirmology-demo-worker redeployed; the "Welcome to Affirmology" subject (worker/src/index.js line 207) is LIVE. Future worker deploys are now self-serve via cd affirmology-demo-site/worker && CLOUDFLARE_API_TOKEN=... npx wrangler deploy.
  2. Recover lost beta opt-ins: opt-ins clicked before today's fix were dropped (no record). Re-solicit the demo-takers by email to opt in again (now records). Draft pending.
  3. Attribution + phone capture: add "How did you hear about us?" + optional phone to the NDA gate -> CRM (same pattern as the beta fix). Jeff asked to advise+solve; build pending his go.
  4. Funnel tracking gap: "Demo listened" (and the beta field) only get set by explicit writes; the /api/track funnel events were never wired. The demo-taker reconciliation is manual.

Demo-takers opening their emailed result link saw a blank green page (header + footer only). Affected: the 18 people who got a song link (15 completers + 3 re-renders). The 5 form-stoppers were NOT affected (their email links to the intake form, not a results page). Three independent bugs in the chain, all fixed in affirmology-site/result.html + the worker: 1. Status fetch aborted on load - the cross-device returning poll fired the /api/status fetch while page media loaded; Chrome threw net::ERR_ABORTED and the poll treated it as "not ready" and hung on the loader forever. Fix: _pollReturning retries fast through the transient abort window (700ms x8 then ease off); hidden media (orrery video, teaser audio) set preload="none". 2. Inline display:none never cleared (the true blank) - showReturningLoading() set an INLINE style.display='none' on #delivered; showReturning() only added the .active class, which an inline style overrides, so the song hub stayed invisible even when data resolved. Fix: showReturning() now clears the inline display before revealing (_dl.style.display=''). 3. 307 dropped the #id on mobile - emailed links are result.html#; the clean-URL 307 to /result dropped the #fragment on mobile email webviews. Fix: worker route demo.affirmology.ai/result.html now serves a 200 hash->query shim that reads the #id (no redirect to drop it) and forwards to /result?j=. wrangler.toml + worker/src/index.js. Deployed. Verified by faithful CDP renders (real network, not DOM dumps) + screenshots on desktop AND iPhone emulation (Alex + Taylor songs render via their ORIGINAL result.html#id links), and Jeff confirmed on his real phone. NO re-send / "sorry" email needed; the existing 18 links work as-is on reopen. TOOLING NOTE: the validator must screenshot-render (prove the song paints), not just check HTTP 200; a 200 page was still blank. Verify tooling: scratchpad/cdp_probe.js, cdp_mobile.js (node + built-in WebSocket drives Chrome via CDP). Future delivery emails already use the robust /result?j= form.

INCIDENT 2026-07-01: Welcome email never auto-sent (RESOLVED)

The automatic Welcome email had NEVER fired in production. Root cause: the studio signals completion by POSTing to the Cloudflare worker (demo.affirmology.ai/api/job-complete), but that call was silently failing from the studio's Render datacenter IP (Cloudflare bot protection is the strong hypothesis; auth token matched, worker sends fine when called from a laptop/phone). Every Welcome to date (the 15, the 3 re-renders, and the tonight stragglers Amy/Arezu/Elizabeth) was sent by hand. Jeanette was a false alarm: her CRM email has a .con typo but she got hers at the corrected .com. FIX (affirmology-studio/api/demo_render.py): on render success, the studio now sends the Welcome DIRECTLY via Resend (no worker hop) on a Timer, delay = WELCOME_DELAY_SECONDS (default 300 = 5 min), with 4 retries + BCC to jeff@affirmology.ai. Canonical body embedded as _WELCOME_HTML (matches Affirmology_WelcomeEmail_Template_v1.html). Added token-gated POST /api/send-welcome (studio onrender) to reconcile/re-send any job so a welcome can never be permanently lost. No customer email on render failure. VERIFIED: deployed studio POST /api/send-welcome returned ok:true and delivered. Worker sendDeliveryEmail path still exists but is no longer the primary; the worker also now BCCs jeff@affirmology.ai. Edge case: a studio redeploy inside a person's 5-min window drops that Timer; reconcile via /api/send-welcome (durable startup sweep is a pending nice-to-have).

Launch

Market: Aug 11 2026. Until then a confidential beta. Priority: get investors + beta testers through a flawless experience. NDA-bypass (fake names/emails) is a minor, accepted risk; email is naturally self-validating (the song only reaches a real inbox).