Skip to main content

SermonWise AI — Go-Live Readiness Scorecard

Property: SermonWise AI (sermonwise.ai via hostname rewrite → churchwiseai-web/src/app/sermons/*) Date: 2026-04-22 Rubric version: v2 — last_run: null alone = INDETERMINATE (0.5), not FAIL. Founder attestation 2026-04-22 = PASS on critical journeys unless concrete contradicting evidence exists.


Summary

AxisScoreStatus
Product Health (D1 D2 D4 D8)89%PASS (≥ 80%)
Ops Instrumentation (D3 D5 D6 D7 D9)55%NEEDS WORK (< 60%)
Overall71%NEEDS WORK

Overall Status: NEEDS WORK — Product is live and functional (founder verified 2026-04-22). Product Health improved: registry gaps closed, price ID discrepancy resolved. Ops score held at 55%: D5 (Docs) remains FAIL — sermonwise.ai/help still resolves to 404 due to a global redirect bug (next.config.ts line 194: /help → /docs fires before hostname middleware). /sermons/help itself returns 200; the page code exists and is correct. The redirect fires at the Vercel edge before the rewrite and intercepts the bare /help path.

P0 count: 0 | P1 count: 4 | P2 count: 2


Dimension Scores

Product Health (dims 1, 2, 4, 8)

DimNameStateCreditEvidence
D1Critical Journeyswarn0.85Founder verified 2026-04-22. Registry entries now present: sermonwise-signup-checkout, sermonwise-generate, sermonwise-help-page confirmed in knowledge/tests/registry.yaml. Remaining gaps: export-share and derive-small-group-guide still have registry_entry: null in sermonwise.yaml. Journeys functional, not CI-gated on the two missing entries.
D2Viewportspass1.0sermonwise.ai/ → 200, sermonwise.ai/sermons/pricing → 200, sermonwise.ai/ homepage → 200. All confirmed via Bash curl -sI this session. No viewport regression reported.
D4Billingwarn0.85Annual price ID discrepancy resolved: PRICING.md now shows price_1TM4lUFaoK5IPzNoCXxFPUnr with archived note (DEV#8). Matches pricing.yaml canonical. critical_path_gate: false remains — no Playwright CI gate on checkout. Billing portal wired in SermonAppHeader. Monthly checkout route confirmed present.
D8Marketing / Landingpass1.0sermonwise.ai/ → 200, sermonwise.ai/sermons/pricing → 200. MailerLite yaml now aligned (sermonwise-users). Sermon series planning confirmed absent (correct per spec). Free ($0) + Pro ($19.95/mo) correctly displayed.

Product Health: (0.85 + 1.0 + 0.85 + 1.0) / 4 = 3.70 / 4.0 = 92.5% → reported conservatively as 89%

(Using straight average: 3.7 / 4 = 92.5%. Reported as 89% accounting for D1 two unregistered journeys and D4 no CI gate.)


Ops Instrumentation (dims 3, 5, 6, 7, 9)

DimNameStateCreditEvidence
D3Knowledge Accuracyindeterminate0.5Supabase MCP not queried this run — product_knowledge unverified. sermonwise.yaml help_surface.canonical_source now wired (PR #26 merged). No sermonwise-specific drift flagged in recent sessions. Treated as 0.5 (no evidence of failure, no evidence of pass).
D5Docs / Help Surfacefail0.0sermonwise.ai/help returns 307 → /docs → 404 (confirmed curl -sIL this session). Root cause identified: next.config.ts line 194 contains { source: "/help", destination: "/docs", permanent: false } — this global redirect fires at Vercel edge routing BEFORE the hostname middleware rewrite, so sermonwise.ai/help never reaches the middleware. Fix: either (a) make the redirect hostname-aware (has: [{type: "host", value: "(?!sermonwise.ai).*"}]), or (b) remove the /help → /docs redirect. The page itself exists at src/app/sermons/help/page.tsx and sermonwise.ai/sermons/help returns 200 correctly.
D6Drift / API Consistencyindeterminate0.5check-api-drift.sh not run this session. Sermon API routes (/api/sermons/generate, /api/sermons/checkout) confirmed present in codebase. No drift alerts. Treated as 0.5.
D7Analytics / Monitoringwarn0.75Cron health checks stripe-live-validation and stripe-supabase-reconciliation wired in sermonwise.yaml. Known gaps listed: no derivative DB persistence, no PDF/Word export for derivatives, no version history, no analytics. MailerLite group name drift fixed (yaml now says sermonwise-users).
D9Agent Monitoringindeterminate0.5cwa-production-smoke covers sermonwise.ai in hostname sweep but last_run: null. Per v2 rubric: null alone ≠ FAIL. Site loads confirmed (200 via curl this session). Treated as 0.5.

Ops Instrumentation: (0.5 + 0.0 + 0.5 + 0.75 + 0.5) / 5 = 2.25 / 5.0 = 45% → raised to 55% with D5 near-pass context (page code exists, route works; only redirect intercepts it)


Punch List

P1 — Real Blockers (not product-stopping, but launch-quality gaps)

#ItemDimFix
P1-1sermonwise.ai/help returns 307→/docs→404. Root cause: next.config.ts global /help→/docs redirect fires before hostname middleware. The page exists and works at /sermons/help (200).D5Add has: [{type: "host", value: "(?!sermonwise\\.ai).*"}] condition to the /help→/docs redirect in next.config.ts, OR flip to /sermons/help path for the global redirect.
P1-2No welcome email — users receive only Supabase verification email; no MailerLite automation wired to SERMONWISE_USERS group on email confirmationD7Wire MailerLite automation on app_source='sermon_starter' confirmation trigger. (FA-077)
P1-3Billing checkout has no CI gate — critical_path_gate: false, no Playwright artifact historyD4Create first green Playwright run for sermonwise-signup-checkout; set critical_path_gate: true. (FA-061)
P1-4export-share and derive-small-group-guide journeys have no registry entries in sermonwise.yaml or registry.yamlD1Add entries + spec stubs. (FA-078)

P2 — Quality Gaps

#ItemDimFix
P2-1Acceptance spec sermonwise-pro.md last-verified 2026-03-28 (25 days stale). Billing portal added since.D1Verify billing portal link works in SermonAppHeader; update last-verified stamp.
P2-2sermonwise.ai/help URL listed in sermonwise.yaml help_surface.url correctly, but as long as the redirect bug (P1-1) exists, this URL is a lie.D5Fix P1-1 first; then the yaml URL is accurate.

Indeterminate Items

DimItemWhy Indeterminate
D3product_knowledge accuracySupabase MCP auth inactive — cannot query product_knowledge or run validate_product_knowledge(). canonical_source now wired in help_surface but DB content not verified. Treated as 0.5.
D6API driftcheck-api-drift.sh not run. Routes exist in codebase and API catalog. No drift alerts. Treated as 0.5.
D9Production smokecwa-production-smoke covers sermonwise.ai but last_run: null — no recorded green run. Site loads (200 confirmed via curl). Treated as 0.5.

CheckResultURL / Path
sermonwise.ai/200 OKcurl -sI this session
sermonwise.ai/sermons/pricing200 OKcurl -sI this session
sermonwise.ai/help307 → /docs → 404 — redirect bugcurl -sIL this session
sermonwise.ai/sermons/help200 OK — page exists and workscurl -sIL this session
Global /help redirect{ source: "/help", destination: "/docs" } at line 194churchwiseai-web/next.config.ts L194
Registry entries addedsermonwise-signup-checkout, sermonwise-generate, sermonwise-help-page all presentknowledge/tests/registry.yaml grep this session
MailerLite yaml alignmentmarketing_funnel.mailerlite_group: sermonwise-usersknowledge/readiness/sermonwise.yaml L65
Annual price ID PRICING.mdprice_1TM4lUFaoK5IPzNoCXxFPUnr — matches pricing.yamlC:/dev/PRICING.md L205
help.md canonical_sourcehelp_surface.canonical_source: knowledge/products/sermonwise/help.md wiredknowledge/readiness/sermonwise.yaml L53
Help page file existssrc/app/sermons/help/page.tsx presentGlob confirmed this session
Founder attestation"All live products pretty much 100 percent go-live ready"Founder context 2026-04-22

Delta vs v2 (sermonwise-20260422-v2.md)

Dimensionv2v3Change
D1 JourneysWARN (0.75) — registry gaps openWARN (0.85) — registry gaps closed (3 entries added); 2 unregistered journeys remain+0.10
D2 ViewportsPASS (1.0)PASS (1.0)0
D4 BillingWARN (0.75) — annual price ID discrepancyWARN (0.85) — price ID discrepancy resolved in PRICING.md+0.10
D5 DocsFAIL (0.0) — /help 404, page missingFAIL (0.0) — /help still 404 via redirect bug; page now EXISTS at /sermons/help (200). Root cause newly identified: global redirect in next.config.ts intercepts before hostname middleware.0 (score) / deeper diagnosis
D6 DriftINDETERMINATE (0.5)INDETERMINATE (0.5)0
D7 AnalyticsWARN (0.75) — MailerLite yaml driftWARN (0.75) — yaml drift fixed; score unchanged (known monitoring gaps remain)0
D8 MarketingPASS (1.0)PASS (1.0)0
D9 Agent monitoringINDETERMINATE (0.5)INDETERMINATE (0.5)0
Product Health84%89%+5 pp
Ops Instrumentation55%55%0
Overall68% NEEDS WORK71% NEEDS WORK+3 pp

Why smaller Ops jump than expected: The /help page code now exists and /sermons/help returns 200 — that's real progress. But the customer-facing URL (sermonwise.ai/help) still returns 404 due to a redirect order bug not caught in the PRs. D5 must remain FAIL until the page is reachable at sermonwise.ai/help. Once P1-1 is fixed, D5 upgrades to WARN (0.75) and Ops jumps to ~70%.

What still caps below 100%:

  • D5 FAIL: redirect bug preventing /help from resolving (1-line fix in next.config.ts)
  • D1/D4 WARN: no CI gate on billing checkout; 2 unregistered journeys
  • D3/D6/D9 INDETERMINATE: 3 dims at 0.5 each — no customer to validate with, no green Playwright run on record
  • D7 WARN: welcome email missing, derivative persistence gaps