Skip to main content

Knowledge > Products > Premium Page

Premium Page Overview

What It Is

PewSearch Premium Page is the $4.95/mo directory listing upgrade -- the original PewSearch product that existed before Pro Website was introduced. It transforms a church's free directory listing into a verified, enhanced profile with photos, staff, and ministry info. Think of it as the entry-level paid tier in the PewSearch funnel: free listing -> Premium Page -> Pro Website -> ChurchWiseAI.

Premium Page is sold and managed entirely within PewSearch. A church discovers their listing on pewsearch.com, claims it, upgrades to Premium Page, and manages it from the PewSearch admin dashboard. No chatbot is included at this tier — the chatbot is a Pro Website and ChurchWiseAI feature.

Key Facts

FieldValue
Price$4.95/mo (monthly billing only, no annual option)
Stripe env varSTRIPE_PREMIUM_MONTHLY_PRICE_ID
Plan column value'starter' in premium_churches.plan
Trial periodNone -- immediate billing at checkout
Billing cycleMonthly only
Target audienceSmall/mid-size churches who want a better directory listing
Codebasepewsearch/web/
Admin URLpewsearch.com/admin/{admin_token}

Features Included

Premium Page unlocks a specific set of features gated by the 'starter' plan in premium-shared.ts:

FeatureDescription
Verified badgeGreen checkmark on church listing indicating claimed, paid status
Premium search placementBoosted in directory results (photo_url DESC, reviews_count DESC sort order)
Custom photos & hero brandingUpload hero_photo_url and logo_url for visual identity
Staff profilesAdd staff with name, title, bio, and photo via custom_staff JSONB
Ministries showcaseList church ministries with descriptions via custom_ministries JSONB

Tier Feature Constants

From premium-shared.ts, the 'starter' plan includes exactly one feature flag:

TIER_FEATURES['starter'] = ['premium_page']

These are checked at runtime to gate UI elements and API access. No chatbot is included — basic_chatbot and hosted_chat are Pro Website and ChurchWiseAI features.

What Premium Page Does NOT Include

These features require Pro Website ($19.95/mo) or a ChurchWiseAI plan:

  • Video hero backgrounds (requires Pro Website)
  • Denomination-aware template design (requires Pro Website)
  • Vanity URL subdomain (requires Pro Website)
  • What to Expect section (requires Pro Website)
  • Events calendar editor (requires Pro Website)
  • Sermon embed (requires Pro Website)
  • Beliefs & values section (requires Pro Website)
  • Custom hours editor (requires Pro Website)
  • Full chatbot with 12+ tools (requires ChurchWiseAI Starter or higher)
  • Analytics dashboard (requires ChurchWiseAI Pro or higher)
  • FAQ/knowledge base management (requires ChurchWiseAI Pro or higher)

Claim Flow

The claim flow lives in pewsearch/web/src/app/claim/[slug]/page.tsx and handles four distinct states, each rendering a different page component:

State Machine

Visitor lands on /claim/[slug]
|
v
[1] GenericClaimPage
| No premium_churches record exists for this church.
| Shows: Claim form (name, email, role, tier selection)
| On submit: Creates premium_churches row with status='preview',
| then REDIRECTS TO ADMIN DASHBOARD (not Stripe)
|
v (admin dashboard, preview mode)
[2] Admin Dashboard with PreviewBanner
| Record exists with status='preview'
| Shows: 48-hour countdown banner at top of admin dashboard,
| "Activate Now" / "Complete Payment" CTA
| preview_expires_at = now + 48 hours (set on pre-checkout)
| Calling /api/stripe/checkout-link creates the Stripe session
|
v (Stripe checkout completes)
[3] ActivationSuccessPage (at /claim/[slug]?activated=true)
| URL has ?activated=true query param
| Shows: Success message, next steps checklist, admin link
| One-time display after checkout redirect
|
v
[4] AlreadyActivePage
Record exists with status='active' AND paid plan
Shows: "Already active" message, link to admin dashboard
Prevents duplicate claims

Note: If a pastor returns to /claim/[slug] (not the admin dashboard) while status='preview', the claim page renders PreviewPage with a 48-hour countdown. PreviewPage also calls /api/stripe/checkout-link to generate the Stripe session on CTA click.

Pseudocode: Claim Page Router

function ClaimPage({ slug }) {
premium = fetchPremiumRecord(slug)

if (searchParams.activated === 'true')
return <ActivationSuccessPage />

if (!premium)
return <GenericClaimPage slug={slug} />

if (premium.status === 'preview')
return <PreviewPage premium={premium} />

if (premium.status === 'active' && premium.plan !== 'free')
return <AlreadyActivePage premium={premium} />

return <GenericClaimPage slug={slug} />
}

Preview Expiration

The preview window is 48 hours from when the claim form was submitted (preview_expires_at = now() + 48h). The admin PreviewBanner and the claim page PreviewPage both display live countdowns. If a visitor returns after expiration, the banner shows an expired gate. The church can always re-submit the claim form to start a fresh 48-hour window.

Stripe Integration

Checkout Flow

  1. Church completes claim form on /claim/[slug]
  2. Server creates premium_churches row with status='preview' and sets preview_expires_at = now() + 48h
  3. Server redirects pastor to admin dashboard (/admin/[admin_token])
  4. Admin dashboard shows PreviewBanner with 48-hour countdown
  5. Church clicks "Activate Now" / "Complete Payment" on PreviewBanner (or on PreviewPage if returning to claim URL)
  6. Client POSTs to /api/stripe/checkout-link with adminToken
  7. Server creates Stripe Checkout session and returns the URL
  8. Customer completes payment on Stripe-hosted checkout page
  9. Stripe redirects to /claim/[slug]?activated=true
  10. Webhook fires checkout.session.completed asynchronously

"Church Tradition" terminology: The claim form uses "Church Tradition" (not "Church Family") in the denomination dropdown label.

Webhook Events

The PewSearch Stripe webhook at /api/stripe/webhook/route.ts handles:

EventAction
checkout.session.completedActivate subscription: set status='active', store stripe_customer_id, stripe_subscription_id, activated_at
customer.subscription.createdBackup activation (if checkout event missed)
customer.subscription.updatedUpdate tier/plan if customer changes subscription
customer.subscription.deletedSet status='cancelled', clear subscription IDs

Important: ChurchWiseAI tier events are explicitly skipped in the PewSearch webhook handler. CWA has its own webhook endpoint in churchwiseai-web/.

Data Model

All Premium Page data lives in the premium_churches table:

Core Columns

ColumnTypePurpose
idUUIDPrimary key
church_idUUIDFK to churches.id
admin_tokenUUIDMagic link token for admin access (no password)
admin_emailtextContact email for the church admin
admin_nametextName of the person who claimed
plantext'starter' for Premium Page, 'pro_website' for Pro Website
statustext'preview' | 'active' | 'cancelled' | 'expired'
stripe_customer_idtextStripe customer ID
stripe_subscription_idtextStripe subscription ID
preview_created_attimestamptzWhen preview was created (for 72h countdown)
preview_expires_attimestamptzWhen preview expires
activated_attimestamptzWhen subscription was activated

Content Columns (Editable by Admin)

ColumnTypePurpose
custom_nametextOverride display name (if different from churches.name)
custom_descriptiontextChurch description / about text
logo_urltextUploaded logo image URL (Supabase Storage)
hero_photo_urltextHero banner image URL
custom_staffJSONB[{name, title, bio, photo_url, order}]
custom_ministriesJSONB[{name, description, order}]
contact_emailtextContact email for routing contact form submissions

Admin Dashboard

Premium Page administration is at pewsearch.com/admin/{admin_token}. The admin token is a UUID sent via email after claiming. No password required -- the token IS the authentication.

Available Tabs (Premium Page plan)

TabWhat It Shows
OverviewChurch profile summary, quick stats, recent activity
SettingsBasic contact info editor (email, name, description)
StatusCurrent plan, subscription status, upgrade CTA to Pro Website

What Premium Page Admins Can Edit

  • custom_name -- display name override
  • custom_description -- church description text
  • admin_email -- admin contact email
  • logo_url -- church logo (upload)
  • custom_staff -- staff directory entries
  • custom_ministries -- ministry listings

What They Cannot Edit (Pro Website Only)

  • Hero video selection
  • Custom hours
  • Events calendar
  • Beliefs & values
  • What to Expect section
  • Vanity URL slug
  • Social media links
  • Sermon embeds

Relationship to Pro Website

Premium Page is the entry-level product in the PewSearch upsell funnel:

Free Directory Listing ($0)
|
| "Want a verified listing with photos and staff? Upgrade to Premium Page"
v
Premium Page ($4.95/mo)
|
| "Want a full church website with video, chatbot, and more? Upgrade to Pro Website"
v
Pro Website ($19.95/mo — includes basic chatbot)
|
| Chatbot shows 1 tool only, creating demand for full ChurchWiseAI
v
ChurchWiseAI Plans ($14.95-99.95/mo)

Both products share the same premium_churches table. The plan column distinguishes them:

  • plan = 'starter' --> Premium Page features
  • plan = 'pro_website' --> Pro Website features (superset)

Upgrading from Premium Page to Pro Website changes the plan column and unlocks additional admin tabs and template features. The Stripe subscription is updated via the billing portal.

Current State (April 2026)

  • 0 paying Premium Page customers -- Premium Page records are founder test accounts
  • 4 total premium_churches rows, all founder test accounts
  • Claim flow functional with all 4 states working
  • Stripe integration tested in test mode with mirrored products
  • Pro Website marketing overhaul (2026-03-22/23) repositioned Premium Page as entry-level tier
  • Price drop + chatbot removal (2026-04-16): price dropped from $9.95 → $4.95/mo; chatbot removed from this tier entirely (moved to Pro Website + ChurchWiseAI exclusively)

Code Location

FilePurpose
pewsearch/web/src/app/claim/[slug]/page.tsxClaim flow: 4-state page router
pewsearch/web/src/app/api/stripe/pre-checkout/route.tsCreates preview record + sends magic link, returns admin dashboard URL
pewsearch/web/src/app/api/stripe/checkout-link/route.tsGenerates Stripe Checkout session for preview/cancelled records (called from admin dashboard + PreviewPage)
pewsearch/web/src/app/api/stripe/webhook/route.tsStripe webhook handler for subscription lifecycle
pewsearch/web/src/lib/premium-shared.tsClient-safe types, tier constants, feature flags
pewsearch/web/src/lib/premium-queries.tsServer-side Supabase queries for premium data
pewsearch/web/src/app/admin/[token]/page.tsxAdmin dashboard entry point (shows PreviewBanner when status=preview)
pewsearch/web/src/components/PreviewBanner.tsxCountdown banner with Activate Now CTA, shown in admin dashboard during preview

See Also