START HERE

CHECKLIST — what is done, what is left (2026-09-15)

prayer/CHECKLIST.md

CHECKLIST — what is done, what is left (2026-09-15)

Status words are strict. LIVE-VERIFIED = Fable ran it this session and saw the result. CODE-COMPLETE = typecheck and tests pass, not exercised against a real service. PLANNED = written down, not built.

Review site: https://prayer-review.vercel.app · Funnel preview (mock payments): https://prayer-funnel-preview.vercel.app

1. Research and decisions — DONE

  • Deep dive, competitor ads, funnel teardown (2026-09-12) — MASTER background
  • Fable review of the original package, 6 contradictions + 7 product holes found — Phase A review
  • Shaw's dictated decisions, then 10 final answers — Decisions
  • PrayerSong teardown, 16 lessons + live funnel walk, mapped onto our offer — Mapping · Lesson index
  • TagadaPay identified, signed terms and API surface digested — TagadaPay digest
  • Divine Rev reuse map (portal, upsell v2, worker skeleton, ads doctrine, reply engine) — Reuse digest
  • Research pass 1: Judaism GO, Buddhism MODIFY, Hinduism GO with video, Islam and Sikhism NO for the AI-photo shape — Research pass 1
  • Brand context, 9 stages, mechanism "The Witnessed Carry" — Offer brief · Hook bank
  • Economics model, one brand and nine fronts incl. Mecca partner shape — Economics
  • Single build plan — Plan v2

2. Build docs — DONE, reviewed twice, 36 findings applied

  • SPEC — read
  • OPS runbook (routes, schema, TagadaPay wiring, worker, emails, dashboard, day 0–13) — read
  • Copy: landing, survey, transition, sales page, checkout, 3 OTOs, thank-you, portal, membership, replace, 17 emails, ads EN+ES — read
  • Prompt packs: donor spec per location, card-in-hand recipe, QA read-back, 7 hero photos, rotation — read

3. Code — repo /home/sha/vibing/prayer-engine (no commits yet)

Piece Status Proof
Monorepo, BrandConfig, 2 brands (St. Peter's, Western Wall) LIVE-VERIFIED brand resolution by hostname on a running server
Database schema, migration, 11 tables LIVE-VERIFIED applied to a local Postgres 16, seed check passes
Engine: pricing, order state, ph handle cookie, ownership check, rate limit, events, dates CODE-COMPLETE 57 tests
Payments: adapter interface, mock rail, TagadaPay adapter, charge-intent guard CODE-COMPLETE (mock LIVE-VERIFIED in browser) 43 tests; Tagada untested against the real API
Funnel: landing → survey → transition → offer → checkout → OTO1/2/3 → thanks, supporting routes LIVE-VERIFIED Playwright 17/17 on mock store and 17/17 on live Postgres
Portal (timeline, gallery with reveal, intention, membership manage, email preferences, tokenised offers) LIVE-VERIFIED in the 17 browser cases
Admin dashboard (revenue, orders, CPA, take rates, SLA, disputes with 0.45/0.6% bands) LIVE-VERIFIED in the 17 browser cases
Worker: job queue, donor-conditioned two-pass, 7-check QA gate with flame delta, retry, dead-letter, rush, reveal tick, member monthly LIVE-VERIFIED on fake models drained 108 real job rows to 110 deliverables, 0 dead letters; 20 tests
Imaging: OpenAI and Nano Banana clients, vision QA, prompt builder, donor loader CODE-COMPLETE 27 tests; no real model call yet
Audio: TTS client, ambience mix, fakes CODE-COMPLETE 7 tests; no real call yet
Email: 17 templates byte-matched to copy, Resend sender, opt-out, gift dual-send, webhook parser CODE-COMPLETE 42 tests; no real send yet
Email previews (rendered) DONE 01 confirmation · 03 delivery · 05 membership invite · 08 abandoned 1 · 12 member delivery · 13 dunning 1 · 16 membership ended · all 17 at /emails/
Fresh-context code review DONE, verdict FIX: 11 blockers, 15 fixes, ALL APPLIED and re-verified 2026-09-16 (22/22 e2e on mock and Postgres); reasoner verify pass done (10 new defects, all fixed, second commit d5398a2 on 2026-09-16) Code review

The review's headline: the pure-logic layer is correct and matches the specs; the layer where money and delivery happen was not wired (no real mailer in the worker, portal showed storage keys not signed URLs, a timed-out charge could permit a second charge, no webhook route, no cron scheduler, no Meta purchase signal). All 26 items are applied and re-verified as of 2026-09-16. Real models (OpenRouter) ran one demo order end to end; the photo was rejected only by the flame-count rule, which is under review.

Bug found only by the live run: the job claim returned Postgres column names, so every claimed job had an undefined type. Fixed, tested, re-verified.

4. Left to do

Shaw (Phase B, blocks anything live)

  • Stripe account live under Numina House (acct_1UGPHEKGASr0FGk4) — DONE 2026-09-16
  • Domain, Resend sending domain, support mailbox
  • Meta Business Manager, page, fresh pixel, CAPI token
  • Cloudflare account resources (Workers, D1, R2)
  • OpenAI key, Nano Banana key, ElevenLabs key, S3-compatible bucket
  • Statement descriptor: NUMINA* HOLYCARDSDONE 2026-09-16
  • One donor photo of St. Peter's from Pinterest that passes the checklist in PROMPT-PACKS §2, then the APPROVED line
  • Decision: commit the repo now

Fable (after Phase B)

  • Apply code-review findings
  • TagadaPay sandbox end-to-end with a real browser card submit, webhook chaos test, reconciliation sweep
  • 10-order fulfilment gate on the real image model: every card legible, every name spelled right; set the QA retry rate into ECONOMICS
  • Seven example hero photos generated and dropped into the brand assets
  • Resend domain verified, one real send of each template
  • Deploy to the droplet (docker compose + Caddy), TLS green
  • One live purchase and refund on production; CAPI dedupe seen in Events Manager
  • Support answer key and refund script in the persona's voice (the operational tail of "no AI framing")
  • Meta ads: 3 creatives, $50/day US+CA women 40+, day-13 CPA read
  • Reply engine v2 and Telegram escalations ported (week 3+)

Later

  • Wave 1: Western Wall brand ($29.90) + Fatima expansion
  • Wave 2: Buddhism (Chinese-language front); Wave 3: Hinduism (video partner); Wave 3b: Mecca (partner shape)
  • Research pass 2 gaps