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* HOLYCARDS— DONE 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