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
| Field | Value |
|---|---|
| Price | $4.95/mo (monthly billing only, no annual option) |
| Stripe env var | STRIPE_PREMIUM_MONTHLY_PRICE_ID |
| Plan column value | 'starter' in premium_churches.plan |
| Trial period | None -- immediate billing at checkout |
| Billing cycle | Monthly only |
| Target audience | Small/mid-size churches who want a better directory listing |
| Codebase | pewsearch/web/ |
| Admin URL | pewsearch.com/admin/{admin_token} |
Features Included
Premium Page unlocks a specific set of features gated by the 'starter' plan in premium-shared.ts:
| Feature | Description |
|---|---|
| Verified badge | Green checkmark on church listing indicating claimed, paid status |
| Premium search placement | Boosted in directory results (photo_url DESC, reviews_count DESC sort order) |
| Custom photos & hero branding | Upload hero_photo_url and logo_url for visual identity |
| Staff profiles | Add staff with name, title, bio, and photo via custom_staff JSONB |
| Ministries showcase | List 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-linkto 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
- Church completes claim form on
/claim/[slug] - Server creates
premium_churchesrow withstatus='preview'and setspreview_expires_at = now() + 48h - Server redirects pastor to admin dashboard (
/admin/[admin_token]) - Admin dashboard shows PreviewBanner with 48-hour countdown
- Church clicks "Activate Now" / "Complete Payment" on PreviewBanner (or on PreviewPage if returning to claim URL)
- Client POSTs to
/api/stripe/checkout-linkwithadminToken - Server creates Stripe Checkout session and returns the URL
- Customer completes payment on Stripe-hosted checkout page
- Stripe redirects to
/claim/[slug]?activated=true - Webhook fires
checkout.session.completedasynchronously
"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:
| Event | Action |
|---|---|
checkout.session.completed | Activate subscription: set status='active', store stripe_customer_id, stripe_subscription_id, activated_at |
customer.subscription.created | Backup activation (if checkout event missed) |
customer.subscription.updated | Update tier/plan if customer changes subscription |
customer.subscription.deleted | Set 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
| Column | Type | Purpose |
|---|---|---|
id | UUID | Primary key |
church_id | UUID | FK to churches.id |
admin_token | UUID | Magic link token for admin access (no password) |
admin_email | text | Contact email for the church admin |
admin_name | text | Name of the person who claimed |
plan | text | 'starter' for Premium Page, 'pro_website' for Pro Website |
status | text | 'preview' | 'active' | 'cancelled' | 'expired' |
stripe_customer_id | text | Stripe customer ID |
stripe_subscription_id | text | Stripe subscription ID |
preview_created_at | timestamptz | When preview was created (for 72h countdown) |
preview_expires_at | timestamptz | When preview expires |
activated_at | timestamptz | When subscription was activated |
Content Columns (Editable by Admin)
| Column | Type | Purpose |
|---|---|---|
custom_name | text | Override display name (if different from churches.name) |
custom_description | text | Church description / about text |
logo_url | text | Uploaded logo image URL (Supabase Storage) |
hero_photo_url | text | Hero banner image URL |
custom_staff | JSONB | [{name, title, bio, photo_url, order}] |
custom_ministries | JSONB | [{name, description, order}] |
contact_email | text | Contact 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)
| Tab | What It Shows |
|---|---|
| Overview | Church profile summary, quick stats, recent activity |
| Settings | Basic contact info editor (email, name, description) |
| Status | Current plan, subscription status, upgrade CTA to Pro Website |
What Premium Page Admins Can Edit
custom_name-- display name overridecustom_description-- church description textadmin_email-- admin contact emaillogo_url-- church logo (upload)custom_staff-- staff directory entriescustom_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 featuresplan = '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_churchesrows, 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
| File | Purpose |
|---|---|
pewsearch/web/src/app/claim/[slug]/page.tsx | Claim flow: 4-state page router |
pewsearch/web/src/app/api/stripe/pre-checkout/route.ts | Creates preview record + sends magic link, returns admin dashboard URL |
pewsearch/web/src/app/api/stripe/checkout-link/route.ts | Generates Stripe Checkout session for preview/cancelled records (called from admin dashboard + PreviewPage) |
pewsearch/web/src/app/api/stripe/webhook/route.ts | Stripe webhook handler for subscription lifecycle |
pewsearch/web/src/lib/premium-shared.ts | Client-safe types, tier constants, feature flags |
pewsearch/web/src/lib/premium-queries.ts | Server-side Supabase queries for premium data |
pewsearch/web/src/app/admin/[token]/page.tsx | Admin dashboard entry point (shows PreviewBanner when status=preview) |
pewsearch/web/src/components/PreviewBanner.tsx | Countdown banner with Activate Now CTA, shown in admin dashboard during preview |
See Also
- Pro Website Overview -- the next tier up, full hosted church website
- PewSearch Directory -- the free listing that feeds the claim funnel
- Chatbot Tier Restrictions -- how chatbot features are gated by plan
- Claim Flow Process -- detailed process documentation
- Checkout Flow Process -- Stripe checkout integration