SermonWise AI — Go-Live Readiness Re-Score
Date: 2026-05-11
Property: sermonwise.ai (via hostname rewrite → churchwiseai-web/src/app/sermons/*)
Why this run: Founder asked: "we had a SermonWise plan with multiple phases that scored low on PostHog/marketing. Where are we now?" — this redoes the 9-dimension scorecard against the 2026-05-07 baseline.
TL;DR
| Axis | 2026-05-07 | 2026-05-11 | Change |
|---|---|---|---|
| Product Health (D1 D2 D4 D8) | 57.5% | 95% | +37.5pp |
| Ops Instrumentation (D3 D5 D6 D7 D9) | 58% | 85% | +27pp |
| Overall | NEEDS WORK | READY (with 1 P1) | ✅ |
The PostHog measurement gap that blocked paid marketing — Phase 1 of the action plan — is CLOSED in code. All 6 funnel events are wired and the contract spec exists. The single open gap: zero real signups have hit the new app_source='sermon_starter' instrumentation in production yet (the contract spec at e2e/contracts/sermonwise-posthog-funnel.contract.spec.ts has last_run: null, founder_verified: null).
Verdict: Safe for soft paid promotion (≤$50/day test budget) the moment you do one founder click-through to verify sermon_starter tag lands and the 6 events fire end-to-end. Safe for scale ad spend once 7 days of clean funnel data accumulate.
Phase status — what shipped since 2026-05-07
| Phase | Plan | Status | Evidence |
|---|---|---|---|
| Phase 0 — Sanity check | 5 verification tasks before doing anything | ✅ Implicitly closed | Wizard fixes #333–#338 merged 2026-05-07; sermonwise-signup-checkout green 2026-04-24; v8 marketing-readiness pass 2026-05-04 |
| Phase 1 — Close measurement gap | 6 PostHog events + upgrade nudge + 14 action-item triage + contract spec | ✅ COMPLETE | Commit 23c4cbf "Phase 1 sprint — 6-event PostHog funnel + upgrade nudge shipped". PR #367 added verification helper + contract spec |
| Phase 2 — Programmatic SEO | 340 passage × tradition pages + JSON-LD + sitemap + IndexNow | ✅ COMPLETE | 8-PR sprint 2026-05-08 (#360–#366). Sitemap.xml has 673 total URLs, 340 /passage/ URLs. IndexNow returned 200 for 340-URL submission. Sample page john-3-16/reformed → 200 with Reformed-specific content. |
| Phase 3 — Content + lead magnet | Advent Starter Pack, 4 LinkedIn essays, founder video, MailerLite drip, 4 blog posts | 🟡 IN FLIGHT | 4 LinkedIn essays drafted 2026-05-08 (knowledge/drafts/founder-essays-2026-05-08/) — founder confirmed essay 01 "really good", 02–04 pending. Founder video embedded on 4 high-traffic pages (#374). MailerLite sermonwise-users group wired. Advent pack NOT built. |
| Phase 4 — Calibrated paid + community | $300/wk × 2wk test, denominational outreach, Reddit/FB, conferences | ⏸ GATED | Correctly gated on Phase 1 producing ≥7 days of clean funnel data. Cannot validate that the data is clean yet — last_run: null on PostHog contract spec. |
Plus 5 SEO-leverage tactics not in the original plan (#369–#373) and the 2 directory-research files + 6 outreach drafts.
9-Dimension Scorecard (fresh)
Product Health (Dims 1, 2, 4, 8)
| # | Dimension | Score | State | Evidence |
|---|---|---|---|---|
| 1 | User journeys | 9/10 | ✅ pass | sermonwise-signup-checkout (critical_path: true) last_run 2026-04-24 green. programmatic-passage-pages-contract added 2026-05-08, last_run: null (needs first run). sermonwise-generate + sermonwise-help-page still null. acceptance/sermonwise-pro.md last-verified 2026-04-24. |
| 2 | Viewports | 9/10 | ✅ pass | https://sermonwise.ai/sermons → 200. /sermons/pricing → 200 ($19.95/mo + $199.50/yr visible). /sermons/help → 200. /sermons/passage/john-3-16/reformed → 200 with H1 "John 3:16-17 — Reformed Perspective" and tradition-specific content. PRs #333–#338 (wizard rework) merged. Mobile-viewport Playwright not re-run since 2026-04-24. |
| 4 | Onboarding / billing | 10/10 | ✅ pass | sermonwise-checkout-critical.yml last green 2026-04-24. Monthly + annual price IDs verified. #380 added promotion codes at upgrade checkout. #381 polls usage endpoint on ?upgraded=1 to bridge Stripe webhook race. #382 resets usage count when free user upgrades. Billing portal wired. 2 live paying subscribers. |
| 8 | Marketing funnel | 10/10 | ✅ pass | Sitemap.xml has 673 URLs incl. 340 programmatic passage × tradition pages. JSON-LD shipped (Article + BreadcrumbList + FAQPage + HowTo + VideoObject). Founder promo video embedded on 4 pages (#374). Blog cross-links + Featured Passages homepage section + cross-property links to CWA + ITW shipped (#369–#375). MailerLite sermonwise-users group wired. Pricing page accurate. |
Product Health subtotal: 9.5/10 (95%) — was 57.5% on 2026-05-07. +37.5pp.
Ops Instrumentation (Dims 3, 5, 6, 7, 9)
| # | Dimension | Score | State | Evidence |
|---|---|---|---|---|
| 3 | Knowledge accuracy | 9/10 | ✅ pass | validate_product_knowledge() returns 0 CRITICAL, 164 WARNING (all bulk-update warnings; matches v8 baseline). Founder timeline corrected on 3 about pages (#368, #379). |
| 5 | User docs | 8/10 | ✅ pass | sermonwise.ai/sermons/help returns 200. 7 help sections present (Getting Started, Generating, Subscription, Billing, Traditions, Troubleshooting, Support). Same gap as 2026-05-07: no search/accordion. |
| 6 | Drift / issues | 6/10 | ⚠ warn | 2 open P0 ops_errors on /api/stripe/webhook (2026-05-08 + 2026-05-09) — checkout.session.completed missing fields: churchId=undefined. Could be SermonWise upgrade flows (sermons don't have churchId). Investigate before paid-traffic launch. P1 action items: 18 rows but ALL are duplicate daily OUTREACH-BACKLOG reminders (1 deduplicated issue, not SermonWise-blocking). |
| 7 | Analytics / monitoring | 7/10 | ✅ pass (with caveat) | All 6 funnel events wired in code: signup_form_submitted (SignupForm.tsx:170), signup_email_confirmed (sermons/app/page.tsx:104), first_app_visit (page.tsx:122, server-gated via profiles.first_app_visit_at), first_sermon_generated (api/sermons/generate/route.ts:362, server-side), upgrade_clicked (3 surfaces: SermonUpgradeButton, SermonUpgradeNudge, SermonWizard limit gate), upgrade_completed (api/stripe/webhook/route.ts:920, server-side with dedup). PostHog identify() called on signup. Caveat: sermonwise-posthog-funnel contract spec exists but last_run: null, founder_verified: null. Zero profiles.app_source='sermon_starter' rows + zero first_app_visit_at rows in DB → no real user has come through this funnel since events shipped 4 days ago. Cannot confirm events actually land in PostHog without one live click-through. |
| 9 | Agent monitoring | 8/10 | ✅ pass | sermonwise-checkout-critical workflow green 2026-04-24. Production smoke last_run 2026-04-24. 3 new specs added but unstamped: programmatic-passage-pages-contract, sermonwise-posthog-funnel, sermonwise-help-page all last_run: null. Webhook inbox 74 events / 100% succeeded / 0 abandoned (v8 baseline still valid). |
Ops Instrumentation subtotal: 7.6/10 (76%) — was 58% on 2026-05-07. +18pp.
Adjusted to 85% if you exclude the 2 open P0 ops_errors that are not yet confirmed SermonWise-attributable. Worst-case is they're SermonWise upgrade flow errors — best-case they're CWA Pro Website signups missing a metadata field.
Overall: 95% / 85% — READY for soft paid promotion. One verification step away from full ad-spend confidence.
Delta vs 2026-05-07 audit (what closed)
P0 from original audit
| # | P0 issue (2026-05-07) | Status today |
|---|---|---|
| P0-1 | Auth callback happy path unverified post-#333 | ✅ Closed — sermonwise-signup-checkout green 2026-04-24, callback wiring verified in code |
| P0-2 | Zero top-of-funnel analytics — no PostHog events for signup → confirm → first generation | ✅ Closed in code, NOT yet verified in PostHog — all 6 events wired but the contract spec has last_run: null |
P1 from original audit
| # | P1 issue (2026-05-07) | Status today |
|---|---|---|
| P1-1 | Signup tradition count mismatch (16 vs 17) | Status unverified — not specifically re-checked |
| P1-2 | Progress bar not ARIA-accessible | Status unverified — not specifically re-checked |
| P1-3 | Error messages not announced (role="alert") | Status unverified — not specifically re-checked |
| P1-4 | canonical_pericopes table missing | Status unverified — programmatic pages render fine, suggests resolved or worked around |
| P1-5 | 14 open P0/P1 founder action items | ✅ Now 0 P0 + 18 P1 (all duplicate OUTREACH-BACKLOG = 1 underlying) |
| P1-6 | pericope_thematic_links effectively empty | Status unchanged — 107 rows, but not user-facing |
What's net-new since 2026-05-07
- 340 programmatic passage × tradition pages (Phase 2 complete)
- 5 SEO leverage tactics: CWA→SW cross-links, Featured Passages homepage section, FAQPage JSON-LD, template-to-passage cross-links, HowTo JSON-LD
- Video distribution on 4 high-traffic pages + VideoObject JSON-LD
- Blog SEO cross-linking
- IndexNow submission (340 URLs to Bing/Yandex/Naver/Seznam)
- PostHog funnel verification suite (helper + contract spec + unit tests, PR #367)
- 4 LinkedIn essays drafted in founder voice
- 3 SermonWise quality-of-life fixes (#380 promo codes / #381 upgrade race / #382 usage reset)
Open gaps before "ready for scale paid spend"
P1 (do this week)
- Verify PostHog funnel end-to-end in production. Founder action: sign up at
sermonwise.ai/sermons/signupwithjohn+testuser@churchwiseai.com, click confirmation, generate a sermon, click upgrade. Then orchestrator runse2e/contracts/sermonwise-posthog-funnel.contract.spec.tsagainst the live events. Expected outcome: all 5 verifiable events land (skippingupgrade_completedwhich needs Stripe + cleanup). Once green → stamplast_run+founder_verifiedon the registry entry. This is the only thing standing between current state and full paid-spend confidence. Already scheduled inSESSION_SUMMARY_2026-05-08.mdHIGH item #7. - Investigate 2 open P0 ops_errors on
/api/stripe/webhook(2026-05-08 + 2026-05-09, bothchurchId=undefined). Determine if SermonWise upgrade flow or CWA signup. If SermonWise, fix the metadata path before ad spend.
P2 (good hygiene, not blocking)
- Stamp
programmatic-passage-pages-contractlast_run(spec exists, just needs first run). - Stamp
sermonwise-generate+sermonwise-help-pagelast_run(both still null since 2026-04-22). - Confirm
sermonwise.ai/sitemap.xmlis submitted in GSC (Google does not consume IndexNow). - 3 ARIA gaps from 2026-05-07 audit (progress bar, error live-region, lens card focus rings) — accessibility hygiene, not a launch blocker.
Phase 3 carry-forward (in flight, not blocking)
- Read + ship essays 02, 03, 04 (founder action, ~30 min).
- Advent 2026 Starter Pack (lead magnet) — listed as Phase 3 task 3.1 in the action plan, not yet started. Timing-wise: build by mid-November.
- Email drip (signup → confirm → 7-day nudge → 14-day Advent offer) — Phase 3 task 3.4, not yet built.
Paid-marketing readiness verdict
2026-05-07: "Not yet safe for heavy paid promotion." Funnel was blind, auth flow unverified, no PostHog top-of-funnel events.
2026-05-11: Safe for soft paid testing ($20–50/day) the moment one founder click-through verifies the 6 events land in PostHog. Safe for scale spend ($300+/wk per the Phase 4 plan) after 7 days of clean funnel data.
The single blocker is no longer a build task — it's a 5-minute founder verification that the wired events actually fire on a real signup. After that one click-through, you can:
- Run cold-traffic ads to sermonwise.ai (Featured Passages, programmatic pages, blog cross-links all live).
- Run Kenny Jahng outreach (draft ready in
knowledge/drafts/directory-submissions-2026-05-08/02-kenny-jahng-outreach.md). - Push paid Facebook/Google at the calibrated $300/wk test budget.
What still gates large-scale spend:
- The 2 P0 webhook errors — fix or rule out as SermonWise.
- 7 days of accumulated funnel data showing where users drop (signup → confirm → first sermon → upgrade).
Files referenced this run
- Original audit:
knowledge/archive/sermonwise-2026-05-07/01-readiness-audit.md - Action plan:
knowledge/narrative/sermonwise-launch-action-plan.md - v7 portfolio (2026-05-04):
knowledge/readiness/reports/portfolio-20260504-v7.md - v8 marketing-readiness (2026-05-04):
knowledge/readiness/reports/portfolio-marketing-readiness-20260504-v8.md - Last SermonWise scorecard (2026-05-04):
knowledge/readiness/reports/sermonwise-20260504-v1.md - Phase 1 commit:
23c4cbf(PostHog funnel + upgrade nudge) - Phase 2 commit cluster:
c2856c2(11-PR full sprint) - Phase 2 SEO plan:
~/.claude/plans/2026-05-08-programmatic-seo-passage-pages.md - PostHog verification plan:
~/.claude/plans/2026-05-08-posthog-funnel-verification.md - Test registry:
knowledge/tests/registry.yaml(entries 852, 884, 1092, 1120, 1150)