Skip to main content

Pre-CEO Hardening Audit — 2026-03-30

Purpose: Proactively check all remaining products for the same categories of issues found during the Starter Chat CEO test (40+ issues across marketing copy, tier-gating, email content, UX labels, payment flows).

Products audited:

  1. IllustrateTheWord Premium ($9.95/mo)
  2. PewSearch Premium ($9.95/mo) / Pro Website ($19.95/mo)
  3. SermonWise Pro ($19.95/mo)
  4. CWA Pro Chat ($34.95/mo)
  5. CWA Voice Starter ($39.95/mo)

Auditor: QA hardening agent Date: 2026-03-30


1. IllustrateTheWord Premium ($9.95/mo)

Marketing Copy Consistency

CheckStatusNotes
Pricing amounts correctPASS$9.95/mo, $99.50/yr — matches PRICING.md
Annual savings % correctPASSCalculates ~17% dynamically from prices
Feature list accuratePASS50,000+ illustrations, 17 traditions, favorites, etc.
FAQ matches featuresPASSNo FAQ section on pricing page (just email support link)
No church-size languagePASSNo church-size references found
No competing upsellsPASSOnly B2C loyalty discount banner (contextually appropriate)

Checkout Flow

CheckStatusNotes
No DB writes before paymentPASSCheckout only creates Stripe session, webhook handles DB
Currency forced to USDFIXEDWas missing currency: 'usd' on checkout session creation. Fixed in feat/harden-itw
adaptive_pricing disabledWARNNot set. Less critical since price is already in USD via Stripe price object, but inconsistent with CWA
Trial noticeN/AITW has no trial (per PRICING.md — correct)
Founder notifiedPASSCross-promo seed logged; trial reminder email wired

Email Content

CheckStatusNotes
Welcome emailN/AITW has no welcome email — uses Supabase Auth + Stripe confirmation email + redirect to /profile?subscription=success. This is by design (B2C auth pattern, not token-based)
Payment failed emailPASSClear copy, correct links, branded template
Trial reminder emailPASSDynamic urgency, correct feature list, proper CTA
Plain-text URL fallbacksN/ANo welcome email to need fallback

UX Labels/Jargon

CheckStatusNotes
"visibility_tier" exposedPASSNot user-facing — internal DB/code only
"B2C loyalty" labelPASSUser sees "ChurchWiseAI family" and "save 20%" — no jargon
Billing toggle labelsPASS"Monthly" / "Annual" with "Save X%" badge

Summary: ITW is clean. One fix made (USD currency), one minor inconsistency noted (no adaptive_pricing).


2. PewSearch Premium ($9.95/mo) / Pro Website ($19.95/mo)

Marketing Copy Consistency

CheckStatusNotes
Pricing amounts correctPASS$9.95/mo Premium, $19.95/mo Pro Website — matches PRICING.md
Feature lists accuratePASSPremium: branding, staff, events, verified badge. Pro Website: templates, chatbot, vanity URL
FAQ matches featuresPASS7 FAQs all accurate, including CWA upsell FAQ
No church-size languagePASSOnly found in state-content.ts (geographic descriptions, not sizing)
Demo links correctPASSCWA upsell links point to churchwiseai.com
Upsell placementPASSCWA upsell section is below the pricing cards, not competing with buy buttons

Checkout Flow

CheckStatusNotes
No DB writes before paymentPASSBoth pre-checkout and checkout routes pass metadata to Stripe; webhook creates premium_churches row
Currency forced to USDPASSBoth checkout routes set currency: 'usd'
adaptive_pricing disabledWARNNot set. Same minor inconsistency as ITW
Trial noticeN/APewSearch has no trial (preview mode serves this purpose — correct per PRICING.md)
Founder notifiedPASSsendClaimNotificationEmail fires on pre-checkout to admin@churchwiseai.com

Email Content

CheckStatusNotes
Welcome email accuracyPASSTier-aware: Premium vs Pro Website have different subject, header, body, features list, CTA
Plan features in emailPASSPremium: photos, staff, events, social. Pro Website: templates, vanity URL, chatbot
Plain-text URL fallbackFIXEDWas missing. Added plain-text URL fallback in feat/harden-pewsearch
Trial reminderPASSWired to webhook, sends church name and admin token
Payment failurePASSSends email with church name and admin link

UX Labels/Jargon

CheckStatusNotes
Claim flow labelsPASS"Claim Your Church" — clear, non-technical
Plan namesPASS"Premium" and "Pro Website" — clear
Admin panelPASS"Your Admin Panel" — clear

Summary: PewSearch is solid. One fix made (plain-text URL fallback in welcome email). One minor inconsistency (no adaptive_pricing).


3. SermonWise Pro ($19.95/mo)

Marketing Copy Consistency

CheckStatusNotes
Pricing amounts correctPASS$19.95/mo, $199.50/yr — matches PRICING.md and sermon-pricing.ts
Annual savings calculatedPASSDynamically shows savings (e.g., "save $39.90/year")
Feature list accuratePASS15 outlines/mo, 17 traditions, RAG illustrations, export formats
FAQ matches featuresPASS5 FAQs all accurate — free plan details, premium AI, billing, limits, cancellation
"300,000+ resources" claimPASSConsistent across homepage and pricing page
No church-size languagePASSNo church-size references found
Illustration countPASS"300,000+ curated theological resources" (refers to RAG corpus, not ITW library)

Checkout Flow

CheckStatusNotes
No DB writes before paymentPASSCheckout only creates Stripe session
Currency forced to USDPASScurrency: 'usd' set in checkout route
adaptive_pricing disabledWARNNot set (same pattern as ITW/PewSearch)
TrialN/ASermonWise has no trial (correct per PRICING.md)
B2C loyalty discountPASSCross-property discount wired and tested

Email Content

CheckStatusNotes
Welcome emailN/ASermonWise uses B2C subscription pattern (user_subscriptions table) — redirect to /app?upgraded=1, no welcome email (same as ITW pattern)

UX Labels/Jargon

CheckStatusNotes
"RAG-powered" labelPASSUsed in feature list but explained as "Real illustrations, not hallucinated stories" — contextually clear
"Premium AI model"PASSFAQ explains what it means in plain language
Billing togglePASS"Monthly" / "Annual Save 17%" — clear
Sermon vs HomilyPASSMetadata description says "sermon & homily outlines" — denomination-aware

Summary: SermonWise is clean. No fixes needed. One minor inconsistency (no adaptive_pricing).


4. CWA Pro Chat ($34.95/mo) + Suite Chat ($59.95/mo)

Marketing Copy Consistency

CheckStatusNotes
Agent countsFIXEDStripeSetupTab said "2 agents" for Pro — actually 4 agents (Care, Coordinator, Discipleship, Stewardship). Fixed in feat/harden-sermonwise
Tool countsPASSStarter: 12, Pro: 35, Suite: 39 — consistent across pricing.ts, PricingGrid, chatbot page, and pricing page
Role countsFIXEDchatbot/page.tsx and PricingGrid.tsx said "7 roles" — actual TeamRole type has 9 roles. pricing.ts was correct with "9 roles". Fixed all to 9
Pricing amountsPASS$14.95/$34.95/$59.95 — consistent everywhere
Duplicate featuresFIXEDpricing.ts Starter had both "Embed widget for your website" and "Embed widget" — duplicate removed
Pro Website included claimPASSPro tier correctly claims "Pro Website included"
FAQ accuracyPASSAll 10 FAQs accurate and consistent with product capabilities
ITW illustration countFIXEDStripeSetupTab said "30,000+" for ITW — corrected to "50,000+"

Checkout Flow

CheckStatusNotes
No DB writes before paymentPASSOnboard route has "Payment-first: NO database writes here" comment. Checkout-embedded and church-checkout both correct
Currency forced to USDPASSAll 3 checkout routes set currency: 'usd'
adaptive_pricing disabledPASSEmbedded checkout sets adaptive_pricing: { enabled: false }
14-day trial for chat plansPASStrial_period_days: 14 only applied when isChatbotTier
No trial for voice plansPASSVoice plans correctly skip trial
Founder notifiedPASSsendNewSaleNotification and sendPaymentReceivedNotification wired

Email Content

CheckStatusNotes
Welcome email accuracyPASSTier-aware: Starter vs Pro get different 5-minute checklist items
Trial notice with datePASSTrial end date shown when present: "You won't be charged until [date]"
Voice setup noticePASSVoice plans get additional "About your phone number" section
Plain-text URL fallbackPASS"If the button doesn't work: [URL]" included
Starter Kit deliveryPASSsendStarterKitDeliveryEmail wired in webhook

Dashboard Tier-Gating

CheckStatusNotes
Pro features unlockPASScanAccess('pro', ...) gates FAQ management, document upload, analytics, theological lens
Suite features unlockPASSUnlimited docs/FAQs, 90-day analytics, CSV export, API access, remove badge
Starter restrictionsPASSFAQ management, document upload, analytics all locked behind canAccess
Pro Website plan gets Starter-levelPASScanAccess explicitly returns Starter features for pro_website plans

UX Labels/Jargon

CheckStatusNotes
"H.E.C.I.C." trademarkPASSUsed on chatbot page with explanation ("Hear, Empathize, Connect, Invite, Capture")
"RAG" labelPASSNot exposed to users — internal only
"Agentic"PASSNot used in user-facing copy
Agent namesPASS"Care Agent", "Coordinator Agent" etc. — clear and friendly

Summary: Multiple fixes made. Duplicate feature removed, role/agent/illustration counts corrected across 4 files.


5. CWA Voice Starter ($39.95/mo) + Voice Pro ($69.95/mo)

Marketing Copy Consistency

CheckStatusNotes
Pricing amountsPASS$39.95 Starter, $69.95 Pro — correct everywhere including JSON-LD
Feature listsPASSStarter: 100 calls, 24/7, prayer, visitor, transcripts, service times. Pro: unlimited, custom personality, multi-language, PCO
Demo phone numbersPASS(469) 615-2221 and (365) 825-4095 displayed on voice page
"No free trial" calloutPASSExplicitly stated: "No free trial — each agent gets its own dedicated phone number provisioned instantly"
Founder pricing badgePASS"Limited Founder Pricing. Lock in $39.95 USD/mo for Voice Starter for life"

Checkout Flow

CheckStatusNotes
No trial on voicePASSisChatbotTier check correctly excludes voice from trial
Currency USDPASSSet in checkout routes
Voice setup emailPASSsendVoiceSetupAlertEmail wired for voice plans

Email Content

CheckStatusNotes
Voice-specific welcomePASSWelcome email includes "About your phone number" section for voice plans
No voice copy in chat emailsPASSincludesVoice flag controls voice-specific sections

Dashboard Tier-Gating

CheckStatusNotes
Voice features visiblePASSplanIncludesVoice gates voice-specific dashboard tabs
Chat features on voice-onlyPASSVoice-only plans still get basic chatbot features (Starter-level)

Summary: Voice is clean. No issues found.


Cross-Product Issues

1. adaptive_pricing Not Disabled Everywhere

Severity: Low Products affected: ITW, PewSearch, SermonWise, CWA church-checkout Status: CWA embedded checkout has adaptive_pricing: { enabled: false }. All other checkout routes do not. Since all prices are defined as USD in Stripe, the risk is that Stripe may show localized pricing to international visitors. Not a showstopper but worth standardizing. Recommendation: Add adaptive_pricing: { enabled: false } to all checkout session creation calls across all 3 codebases.

2. No Welcome Email for B2C Products (ITW, SermonWise)

Severity: Low Status: By design. B2C products (ITW, SermonWise) use Supabase Auth + Stripe confirmation emails. Users redirect to /profile?subscription=success or /app?upgraded=1 after checkout. No separate welcome email is sent. This is a different pattern from the B2B products (CWA, PewSearch) which send branded welcome emails with admin dashboard links. Recommendation: Consider adding a simple "welcome to Premium" email for ITW subscribers to improve onboarding. Not urgent.

3. Inconsistent Source of Truth for Counts

Severity: Medium (now fixed for known instances) Status: Multiple files had different role/agent/illustration counts. Fixed the known instances, but this pattern will recur without a centralized source. Recommendation: Create a shared constants file or use the knowledge system derivation to propagate counts to all marketing pages. The knowledge/data/features.yaml file should be the single source for these numbers.


Priority Fixes (Things That WILL Confuse the CEO)

Already Fixed (on feature branches)

FixBranchFile(s)
Force USD currency on ITW checkoutfeat/harden-itwsrc/app/api/stripe/checkout/route.ts
Add plain-text URL fallback to PewSearch welcome emailfeat/harden-pewsearchweb/src/lib/email.ts
Remove duplicate "Embed widget" from Starter featuresfeat/harden-sermonwisesrc/lib/pricing.ts
Fix "7 roles" -> "9 roles" on chatbot page + PricingGridfeat/harden-sermonwisesrc/app/chatbot/page.tsx, src/app/pricing/PricingGrid.tsx
Fix "2 agents" -> "4 agents" for Pro in StripeSetupTabfeat/harden-sermonwisesrc/app/founder/[token]/components/StripeSetupTab.tsx
Fix "30,000+" -> "50,000+" illustrations in StripeSetupTabfeat/harden-sermonwisesrc/app/founder/[token]/components/StripeSetupTab.tsx
IssueProductEffortPriority
Add adaptive_pricing: { enabled: false } everywhereITW, PewSearch, SermonWiseSmallLow
Add welcome email for ITW Premium subscribersITWMediumLow
Centralize feature/role/agent counts in shared constantsAllMediumMedium

Conclusion

The non-CWA products (ITW, PewSearch, SermonWise) are substantially cleaner than what was found on Starter Chat. The payment-first pattern is correctly implemented across all products. Email templates are branded and tier-aware where applicable. No DB records are created before payment confirmation in any product.

The most impactful fixes were:

  1. ITW missing USD currency — could have caused international customers to see non-USD checkout
  2. PewSearch missing email URL fallback — could have left new subscribers unable to access their admin panel if email button was broken
  3. Role/agent/illustration count inconsistencies — CEO would have immediately noticed "7 roles" on the chatbot page vs "9 roles" on the pricing page

All fixes are on feature branches ready for review. No changes pushed to main/master.