SermonWise Launch Action Plan
Owner: John Moelker (founder) Audit date: 2026-05-07 Goal: Take SermonWise from 0 paid subscribers to $5K MRR in ≤6 months without burning ad spend on a blind funnel.
TL;DR — what the audits agreed on
- Product works. 19,447 pericope perspectives @ 0.85 quality. 7 free users, 84 sermons. Stripe checkout green. Wizard tradition→lens regression fixed today.
- Funnel doesn't. Zero PostHog events for signup → confirm → first sermon → upgrade. Spending ad money would be blind.
- Highest-ROI growth lever = 340 passage × tradition programmatic pages (the pericope DB already has the unique content; this is templating). NOT all 32K — Phase 1 is 340, validated before scaling.
- Asymmetric advantage = founder's pastoral voice (15 years systems analysis/development + 15 years pastoral ministry; 1 CPE unit; trained Stephen Leader, currently inactive). The engineer-pastor combination is rare and credible. Generic AI marketing copy throws this away.
- Single biggest accelerator = 1 denominational network endorsement (Baptist association director, Reformed presbytery, etc.). Outside this plan's scope — relationship work.
Phase 0 — Sanity check (1-2 hours, must complete before anything else)
These are the "did the recent fixes actually work in production" checks. If any fail, fix before proceeding.
| # | Task | Owner | Done when | Effort |
|---|---|---|---|---|
| 0.1 | Run e2e/sermonwise-full-journey.spec.ts against https://sermonwise.ai | agent | Spec exits green; auth callback (PR #333) verified; signup → confirm → first sermon completes | 30 min |
| 0.2 | Founder manual: sign up with a fresh +test email, click confirmation in different browser profile, verify "Email confirmed!" green banner appears on login | founder | Banner correct; sign in succeeds | 5 min |
| 0.3 | Verify 4 backfilled users still show correct lens in their wizard | founder | Pentecostal/Reformed/Reformed/Baptist all auto-select correctly | 5 min |
| 0.4 | Confirm topic-first toggle works for "grief" + Pentecostal | founder | 5 cards appear with rationale + "Rich pericope data" badges; "Use this →" populates scripture | 5 min |
| 0.5 | Confirm pericope panel shows BOTH Universal + lens-specific (PR #338) for John 3:16 + Pentecostal | founder | Two stacked emphasis cards + both angle groups in tabs | 2 min |
Gate: All 5 green before Phase 1.
Phase 1 — Close the measurement gap (Week 1, ~6 hours of agent work + 2 hours founder)
Why first: Every downstream decision (ad spend, content cadence, conversion experiments) needs funnel data. Currently blind.
| # | Task | Owner | Files / surface | Done when | Effort |
|---|---|---|---|---|---|
| 1.1 | Add PostHog events: signup_form_submitted, signup_email_confirmed, first_app_visit, first_sermon_generated, upgrade_clicked, upgrade_completed | agent | SignupForm.tsx, auth/callback/route.ts, sermons/app/page.tsx, sermons/pricing/page.tsx, api/sermons/generate/route.ts, Stripe webhook | All 6 events fire on the right transitions; PostHog dashboard shows funnel | 3-4 hr |
| 1.2 | Add upgrade nudge after 2nd sermon (free-tier limit hit) | agent | SermonResult.tsx, sermons/app/page.tsx | At usage 2/2, banner shows "Upgrade for 13 more this month" with one-click checkout. Currently silent. | 1-2 hr |
| 1.3 | Triage 14 open P0/P1 founder action items in FOUNDER_ACTIONS.md | agent | FOUNDER_ACTIONS.md | Each item: keep open / close / dispatch fix-PR. Founder reviews triage. | 1 hr |
| 1.4 | Contract spec: assert PostHog event names exist in code (regression guard against silent removal) | agent | e2e/contracts/posthog-funnel-events.contract.spec.ts | Test passes against current code; would fail if any event name is renamed | 30 min |
| 1.5 | Founder reviews + approves PostHog dashboard | founder | Dashboard saved; founder bookmarks daily check | 30 min |
Phase 1 gate: PostHog shows real signup funnel data for 7+ days before spending paid ad dollars.
Phase 2 — Programmatic SEO + free→paid lever (Weeks 2-3, ~12 hours of agent work)
Why now: Highest-ROI growth lever per SEO audit. Pericope DB content is already there; this is templating + caching. Plus the upgrade nudge from 1.2 starts converting trickle traffic.
| # | Task | Owner | Files / surface | Done when | Effort |
|---|---|---|---|---|---|
| 2.1 | Pick 20 highest-volume passages (Phase 1 of 340) | agent + founder approval | New: knowledge/data/sermonwise-phase1-passages.yaml | Founder confirms passage list; balanced across OT/NT/lectionary/topical | 1 hr |
| 2.2 | Build dynamic route /sermons/passage/[passage-slug]/[tradition-slug] | agent | New: app/sermons/passage/[passage-slug]/[tradition-slug]/page.tsx. ISR 24h. Reads pericope_lens_perspectives via the existing RPC. | 340 pages return 200, render unique content, lighthouse SEO score ≥90 | 6-8 hr |
| 2.3 | Add JSON-LD schemas: Article + BreadcrumbList + Organization (with sameAs cross-property) | agent | Same template + app/layout.tsx | Validated via schema.org validator; cross-property links to ITW/PewSearch/CWA | 1-2 hr |
| 2.4 | Fix /sermons/community CSR → RSC (Google sees empty shell currently) | agent | app/sermons/community/page.tsx | Page source contains real content; bot-fetch shows full text | 2-3 hr |
| 2.5 | Update sitemap generator to include 340 new URLs | agent | app/sermons/sitemap.ts | Sitemap returns 340 new entries with lastmod | 30 min |
| 2.6 | Submit new sitemap to GSC + IndexNow (Bing/Yandex) | agent | scripts/submit-indexnow.ts (existing) | Bing reports submission; GSC shows discovery within 7d | 30 min |
| 2.7 | Cross-property link audit + fix | agent | SermonWise blog templates → ITW illustrations links missing per audit | At least 3 contextual links from /sermons/* to illustratetheword.com pages | 1 hr |
| 2.8 | Contract spec: programmatic pages return 200 + have unique content | agent | e2e/contracts/programmatic-passage-pages.contract.spec.ts | Spec hits 5 random pages, asserts each has lens-specific content | 1 hr |
Phase 2 gate: 340 pages live, sitemap submitted, Lighthouse SEO ≥90, no thin-content warnings in GSC.
Phase 3 — Content + lead magnet (Weeks 4-5, ~10 hours of agent work + ~6 hours founder writing)
Why now: Phase 1 measurement is calibrated, Phase 2 is indexing. Now feed the funnel.
| # | Task | Owner | Files / surface | Done when | Effort |
|---|---|---|---|---|---|
| 3.1 | Build Advent 2026 Starter Pack (lead magnet) | agent | New: app/sermons/advent-2026/page.tsx (free download landing). Pre-built starters for every Advent Sunday × Reformed/Catholic/Lutheran/Pentecostal. | Page live; PDF/preview available; opt-in form syncs to MailerLite sermonwise_newsletter group | 4-5 hr |
| 3.2 | Founder writes 4 LinkedIn essays | founder | LinkedIn drafts | Founder voice; HEAR protocol; published 2x/wk | 4 hr |
| 3.3 | Founder records 1 short founder-intro video (3 min) | founder | Video on YouTube + embedded on landing | Discoverable; embedded on /sermons landing | 1 hr |
| 3.4 | Build email drip: signup → confirm → 7-day nudge if no first sermon → 14-day Advent pack offer | agent | MailerLite automation (founder Gmail integration already wired) | All 4 emails authored + automation live; test+flows@churchwiseai.com receives sequence | 3-4 hr |
| 3.5 | 4 SermonWise blog posts on Phase 1 keywords (founder approves drafts; agent writes from outlines) | agent | src/content/blog/ | Founder approves + publishes; pinned on /blog | 4 hr |
Phase 3 gate: 100+ MailerLite SermonWise subscribers; 4 LinkedIn posts driving 100+ profile visits; Advent pack downloaded 50+ times.
Phase 4 — Calibrated paid + community (Weeks 6-8)
Why last: Without Phase 1 funnel data, paid ads are blind. Without Phase 2 organic, paid acquisition cost has no organic baseline. Without Phase 3 content, you have no remarketing inventory.
| # | Task | Owner | Surface | Done when | Effort |
|---|---|---|---|---|---|
| 4.1 | Calibrated paid test ($300/wk × 2 weeks) — 3 keywords | founder | Google Ads | Conversion data: signups, paid subs, CAC, LTV proxy. Decide whether to scale. | 2 hr setup + monitor |
| 4.2 | Reach 5 denominational network leaders (Baptist association director, Reformed presbytery, etc.) | founder | LinkedIn DMs / cold email | 1 endorsement/integration secured. Single biggest accelerator. | 4 hr |
| 4.3 | Reddit + Facebook group seeding (r/Pastors, r/Reformed, denominational FB groups) | founder | Reddit, FB | Founder participates organically; mentions SermonWise where contextually appropriate (no spam) | 2 hr/wk |
| 4.4 | Conference outreach (next 6 months): pick 2 conferences for booth or sponsored content | founder | Conference websites | 2 conference partnerships in pipeline | 3 hr |
What NOT to do (carry over from audits)
- No paid ads in Weeks 1-3. Phase 1 funnel events must exist + accumulate ≥7 days of data first.
- No ChatGPT-tone marketing copy. Founder's pastoral voice is the moat — generic AI prose loses the differentiator.
- No 32K-page SEO build. Phase 2 is 340. Validate phase 1 indexes + ranks before phase 2.
- No bulk customer-data writes without explicit founder approval.
- No critical-path file changes without paired Playwright verification (CLAUDE.md rule #10).
- No skipping the 19 contract tests — they're the regression backstop for everything shipped today.
Risk register
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Phase 2 programmatic pages get flagged as thin content by Google | Medium | High | Use full pericope content (~500-800 words/page), not stubs. Lighthouse + manual spot-check first 10 pages before scaling. |
| LinkedIn algorithm doesn't pick up theological content | Medium | Medium | Diversify to Substack/Threads in week 4. Don't rely on a single channel. |
| Founder voice essays get rate-limited as "AI-generated" by LinkedIn | Low | High | Founder writes/dictates personally; agent only proofreads. Never auto-publishes. |
| Advent pack content quality is inconsistent across traditions | Medium | High | Founder reviews each tradition's pack. Generate from pericope_lens_perspectives where lens has high coverage. Charismatic/Dispensational/Liberation are thin (455/320/242 rows respectively) — skip those traditions in v1. |
| Paid ad waste before funnel calibrated | Low (gated by Phase 1) | High | Hard gate: do not start Phase 4 ads until Phase 1 dashboard has ≥7 days of clean data. |
Success metrics — 8-week target
| Metric | Today | Week 4 target | Week 8 target |
|---|---|---|---|
| Free signups | 7 (incl. test) | 75 | 200 |
| Paid subscribers | 0 | 5 | 20 |
| MRR | $0 | $100 | $400 |
| Sitemap URLs indexed | ~15 | ~250 | ~340 |
| MailerLite SermonWise subscribers | <5 | 100 | 350 |
| Founder LinkedIn followers | (current) | +200 | +500 |
| Top organic keyword position | n/a | top 50 | top 20 |
| Conversion rate (signup → paid) | unmeasured | 3% baseline | 5% |
If Week 4 misses 50%+, regroup before Phase 4 (no paid ads if organic isn't moving). If Week 8 hits targets: scale paid ($1K/wk), commit to Phase 2B (additional 1,700 programmatic pages).
Appendix — references
- Today's PRs: #333 #334 #335 #336 #337 #338 (all merged)
- Contract specs:
e2e/contracts/*.contract.spec.ts(19 tests, ~5s combined). Don't break these. - Detailed audit reports:
01-readiness-audit.md— 9-dim scorecard, journey-by-journey findings02-marketing-strategy.md— 8-week calendar, revenue math, founder voice angles03-seo-strategy.md— keyword pillars, 20 blog titles, programmatic SEO phasing
- Project conventions:
C:\dev\CLAUDE.md,C:\dev\churchwiseai-web\CLAUDE.md - Founder memory:
~/.claude/projects/C--dev/memory/MEMORY.md