Skip to main content

Pro Website decoupled from PewSearch (2026-04-18)

Context

Pro Website ($19.95/mo) was originally launched on PewSearch in early 2026 as a $19.95/mo upsell card on pewsearch.com/pricing and pewsearch.com/pro-website. Cold-email outreach funneled pastors through pewsearch.com/starter-kit/[token] with a Pro Website CTA deep-linking to pewsearch.com/claim/[slug]?tier=pro_website.

In parallel, ChurchWiseAI developed its own canonical Pro Website pipeline: churchwiseai.com/pro-website marketing → churchwiseai.com/onboard?plan=cwa_pro_website → embedded Stripe checkout → /api/stripe/webhook → provisioning as plan='cwa_pro_website' with vanity_slug + admin dashboard at churchwiseai.com/admin/{token}.

Both pipelines used the same Stripe price (price_1TEJh4FaoK5IPzNojyaDlegM), same Supabase premium_churches table, and the same {vanity}.john316.church public render — but produced different plan column values (ps_pro_website vs cwa_pro_website) and different admin URLs.

Problem

Two parallel pipelines created split-brain:

  1. Customer confusion — "where do I log in?" For PewSearch-sourced signups: pewsearch.com/admin/{token}. For CWA-sourced signups: churchwiseai.com/admin/{token}. Support surface doubles.
  2. Metrics dilution — The readiness scorecard's Axis A cap (unlocks at the first real non-founder paying Pro Website customer) filters on plan='cwa_pro_website'. A pewsearch-sourced conversion wouldn't move the metric.
  3. Maintenance cost — Two webhooks, two admin UIs, two claim flows, two sets of marketing CTAs. Lockdown would freeze code duplication.
  4. Brand coherence — ChurchWiseAI is the AI product brand; PewSearch is the directory. Pro Website is an AI product (it bundles a chatbot). It belongs on ChurchWiseAI.

Actual conversion state at decouple: 0 pewsearch-sourced Pro Website signups (136 cold emails, 5 starter-kit clicks, 0 Pro Website CTA clicks). No customers to migrate.

Decision

Pro Website is sold exclusively on churchwiseai.com as the canonical plan key cwa_pro_website. PewSearch no longer offers Pro Website as a product.

Implementation (2026-04-18)

pewsearch.com

  • Deleted src/app/pro-website/page.tsx + TemplateShowcase.tsx
  • next.config.ts:
    • 301 /pro-website and /pro-website/*https://churchwiseai.com/pro-website
    • 302 /claim/:slug?tier=pro_websitehttps://churchwiseai.com/onboard?plan=cwa_pro_website&pewsearch_slug=:slug
    • 302 /claim/:slug?tier=ps_pro_website → same
    • 302 /directory?tier=pro_websitehttps://churchwiseai.com/pro-website
  • Homepage + pricing + header + cold-email starter-kit + church-detail + admin UpgradeTab + StickyClaimCTA + give/demo page all updated to either remove Pro Website mentions or cross-link to churchwiseai.com
  • /api/stripe/checkout — removed pro_website / ps_pro_website from VALID_TIERS; any stale request 302s to churchwiseai.com
  • /api/stripe/pre-checkout — returns 410 Gone for pro_website tier
  • /api/stripe/checkout-link — removed ps_pro_website / pro_website from PEWSEARCH_PLANS
  • /api/stripe/webhook — logs warning and skips new pro_website / ps_pro_website checkout.session.completed and customer.subscription.created events. activateChurch() branches for these tiers retained ONLY for 2 legacy demo rows.

churchwiseai.com

  • No behavior change. Added deprecation comment headers to the 6 files that still reference ps_pro_website / pro_website:
    • src/lib/premium-shared.ts (PRO_WEBSITE_PLANS array)
    • src/lib/tier-config.ts (isProWebsitePlan)
    • src/app/s/[slug]/page.tsx (PRO_WEBSITE_PLANS array)
    • src/lib/stripe-prices.ts (tier → price alias switch)
    • src/app/api/stripe/webhook/route.ts (PEWSEARCH_TIERS skip list)
  • Added Pro Website to the marketing footer (was missing from Products column).
  • Wrote memory/feedback_pro_website_cwa_only.md — loaded into agent context on every session.
  • Updated knowledge/architecture/db/plan-column-contract.md with deprecation note.

Database

  • No schema change. premium_churches.plan CHECK constraint still allows all three legacy values.
  • Demo rows (2) retain plan='ps_pro_website' — both still render on {vanity}.john316.church because /s/[slug] accepts all three keys.
  • Founder test preview row (1) retains plan='ps_pro_website' — harmless.

Consequences

Immediate:

  • Pewsearch.com /pro-website 301s; cold-email recipients clicking "Tell me more about Pro Website" land on churchwiseai.com/onboard with the church pre-matched via pewsearch_slug. Outreach attribution preserved via ref=outreach_{token}metadata.refattributeOutreachConversion() on webhook.
  • Readiness Axis A cap can now be unlocked by any real signup (all new ones are cwa_pro_website by construction).
  • One less thing to maintain. Code freeze post-test covers a unified surface.

Follow-ups (deferred):

  • FA-047 — Migrate 2 demo rows from ps_pro_websitecwa_pro_website. After this, the legacy array values can be narrowed in code.
  • FA-048 — Tighten premium_churches.plan CHECK constraint to drop ps_pro_website and pro_website from the allowlist (requires FA-047 first).

Not considered / rejected

  • Unify on the backend (keep both pipelines, cross-sync rows) — over-engineered for <1 conversion/week at decouple time; doubles webhook complexity.
  • Leave both pipelines running — defeats the lockdown goal; tech debt compounds.

References

  • Manual review log: knowledge/readiness/reports/pro-website-20260418-manual-review.md (Section 10a)
  • Plan column contract: knowledge/architecture/db/plan-column-contract.md
  • PR #17 on pewsearch: feat/decouple-pro-website-from-pewsearch (merged)
  • PR on churchwiseai-web: feat/pro-website-cwa-only-deprecation (this PR)