2026-04-16 19:59:33 -04:00
"use client" ;
import { useState } from "react" ;
import Link from "next/link" ;
import {
ScanLine ,
Mail ,
Upload ,
Users ,
BarChart3 ,
Shield ,
Zap ,
ArrowRight ,
Check ,
ChevronDown ,
ChevronUp ,
Church ,
Globe ,
Workflow ,
Clock ,
Heart ,
Building2 ,
CalendarDays ,
FileText ,
Webhook ,
} from "lucide-react" ;
2026-04-16 20:09:52 -04:00
import { MarketingNav } from "@/components/marketing/nav" ;
import { MarketingFooter } from "@/components/marketing/footer" ;
2026-04-16 19:59:33 -04:00
function Hero() {
return (
< section className = "relative pt-32 pb-20 sm:pt-40 sm:pb-28 overflow-hidden" >
< div className = "absolute inset-0 gradient-mesh pointer-events-none" / >
< div className = "relative mx-auto max-w-4xl px-6 text-center" >
< div className = "inline-flex items-center gap-2 rounded-full border border-border/60 bg-card/60 px-4 py-1.5 text-xs font-medium text-muted-foreground mb-8 glass" >
< Church className = "h-3.5 w-3.5" / >
Built for churches & amp ; ministries
< / div >
< h1 className = "text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight leading-[1.1] mb-6" >
Stop hand - typing
< br / >
< span className = "bg-gradient-to-r from-primary via-foreground to-primary bg-clip-text text-transparent" >
visitor cards .
< / span >
< / h1 >
< p className = "text-lg sm:text-xl text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed" >
Echo uses AI - powered OCR to scan your guest cards , prayer requests , and
response forms & mdash ; then sends the data straight into Planning Center ,
your CRM , or wherever your team needs it . In seconds , not hours .
< / p >
< div className = "flex flex-col sm:flex-row items-center justify-center gap-4" >
< Link
href = "/signup"
className = "inline-flex items-center gap-2 rounded-xl bg-primary px-8 py-3.5 text-base font-semibold text-primary-foreground shadow-lg hover:opacity-90 transition-opacity"
>
Start Free & mdash ; 50 Cards / Month
< ArrowRight className = "h-4 w-4" / >
< / Link >
< a
href = "#how-it-works"
className = "inline-flex items-center gap-2 rounded-xl border border-border/60 bg-card/60 px-8 py-3.5 text-base font-medium text-foreground hover:bg-accent/40 transition-colors glass"
>
See How It Works
< / a >
< / div >
< p className = "mt-6 text-xs text-muted-foreground" >
No credit card required & middot ; Set up in under 5 minutes
< / p >
< / div >
< / section >
) ;
}
function ProblemStatement() {
return (
< section className = "py-16 sm:py-20" >
< div className = "mx-auto max-w-5xl px-6" >
< div className = "glass-card rounded-2xl p-8 sm:p-12" >
< div className = "grid md:grid-cols-3 gap-8 text-center" >
< div >
< div className = "text-4xl font-bold text-destructive mb-2" > 3 + < / div >
< div className = "text-sm text-muted-foreground" >
Hours per week spent manually entering guest card data
< / div >
< / div >
< div >
< div className = "text-4xl font-bold text-destructive mb-2" > 40 % < / div >
< div className = "text-sm text-muted-foreground" >
Of visitor follow - ups delayed by slow data processing
< / div >
< / div >
< div >
< div className = "text-4xl font-bold text-destructive mb-2" > 1 in 5 < / div >
< div className = "text-sm text-muted-foreground" >
Guest records contain transcription errors from handwriting
< / div >
< / div >
< / div >
< / div >
< / div >
< / section >
) ;
}
function HowItWorks() {
const steps = [
{
number : "01" ,
icon : ScanLine ,
title : "Scan or Upload" ,
description :
"Drop a stack of cards into your office scanner and send them via email or FTP. Or upload photos directly from your phone." ,
} ,
{
number : "02" ,
icon : Zap ,
title : "AI Reads Every Field" ,
description :
"Our vision AI extracts names, phone numbers, emails, addresses, prayer requests, decisions — even messy handwriting." ,
} ,
{
number : "03" ,
icon : Workflow ,
title : "Review & Integrate" ,
description :
"Your team reviews the results in a clean dashboard, then syncs directly to Planning Center, Google Sheets, or your CRM with one click." ,
} ,
] ;
return (
< section id = "how-it-works" className = "py-16 sm:py-24" >
< div className = "mx-auto max-w-5xl px-6" >
< div className = "text-center mb-16" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
From paper to people in three steps
< / h2 >
< p className = "text-muted-foreground text-lg max-w-2xl mx-auto" >
No more squinting at handwriting on Monday morning . Echo handles the
tedious work so your team can focus on follow - up .
< / p >
< / div >
< div className = "grid md:grid-cols-3 gap-6" >
{ steps . map ( ( step ) = > (
< div
key = { step . number }
className = "glass-card rounded-2xl p-8 text-center group hover:scale-[1.02] transition-transform"
>
< div className = "text-xs font-bold text-muted-foreground/50 tracking-widest mb-4" >
STEP { step . number }
< / div >
< div className = "mx-auto mb-5 h-14 w-14 rounded-xl bg-primary/10 flex items-center justify-center group-hover:bg-primary/20 transition-colors" >
< step.icon className = "h-7 w-7 text-primary" / >
< / div >
< h3 className = "text-lg font-semibold mb-3" > { step . title } < / h3 >
< p
className = "text-sm text-muted-foreground leading-relaxed"
dangerouslySetInnerHTML = { { __html : step.description } }
/ >
< / div >
) ) }
< / div >
< / div >
< / section >
) ;
}
const features = [
{
icon : ScanLine ,
title : "AI-Powered OCR" ,
2026-04-16 20:09:52 -04:00
href : "/features/ai-ocr" ,
2026-04-16 19:59:33 -04:00
description :
"Advanced vision AI reads handwriting, checkboxes, and printed text. Extracts 20+ fields per card including names, contact info, prayer requests, and spiritual decisions." ,
} ,
{
icon : Mail ,
title : "Email & FTP Scanning" ,
2026-04-16 20:09:52 -04:00
href : "/features/scanner-integration" ,
2026-04-16 19:59:33 -04:00
description :
"Configure your office scanner to email or FTP batches directly. Echo automatically picks them up and starts processing — no manual upload needed." ,
} ,
{
icon : Upload ,
title : "Drag & Drop Upload" ,
2026-04-16 20:09:52 -04:00
href : "/features/scanner-integration" ,
2026-04-16 19:59:33 -04:00
description :
"Upload photos or PDFs from your phone, tablet, or computer. Supports multi-page duplex-scanned PDFs with automatic front/back pairing." ,
} ,
{
icon : CalendarDays ,
title : "Collection Days & Events" ,
2026-04-16 20:09:52 -04:00
href : "/features/collection-days" ,
2026-04-16 19:59:33 -04:00
description :
"Define recurring services and events. Echo auto-assigns scanned cards to the most recent Sunday service or event, keeping everything organized." ,
} ,
{
icon : Users ,
title : "Team Collaboration" ,
2026-04-16 20:09:52 -04:00
href : "/features/team-collaboration" ,
2026-04-16 19:59:33 -04:00
description :
"Invite your pastoral care team with role-based access. Assign cards for follow-up, track review status, and keep everyone on the same page." ,
} ,
{
icon : Building2 ,
title : "Multi-Site Ready" ,
2026-04-16 20:09:52 -04:00
href : "/features/multi-site" ,
2026-04-16 19:59:33 -04:00
description :
"Manage multiple campuses under one organization. Each location gets its own collection days, scanner setup, and team assignments." ,
} ,
{
icon : BarChart3 ,
title : "Dashboard & Analytics" ,
2026-04-16 20:09:52 -04:00
href : "/features/analytics" ,
2026-04-16 19:59:33 -04:00
description :
"See first-time guests, salvations, prayer requests, and follow-up status at a glance. Filter, sort, and export your data anytime." ,
} ,
{
icon : Shield ,
title : "Secure by Default" ,
2026-04-16 20:09:52 -04:00
href : "/features/security" ,
2026-04-16 19:59:33 -04:00
description :
"Role-based permissions, encrypted storage, email verification, and invitation-only team access protect your congregation’s personal data." ,
} ,
{
icon : Clock ,
title : "Instant Follow-Up" ,
2026-04-16 20:09:52 -04:00
href : "/features/ai-ocr" ,
2026-04-16 19:59:33 -04:00
description :
"Stop waiting until Tuesday to start reaching out. Cards scanned Sunday afternoon are in your system by Sunday evening." ,
} ,
] ;
function Features() {
return (
< section id = "features" className = "py-16 sm:py-24 relative" >
< div className = "absolute inset-0 gradient-mesh pointer-events-none opacity-50" / >
< div className = "relative mx-auto max-w-6xl px-6" >
< div className = "text-center mb-16" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
Everything your guest services team needs
< / h2 >
< p className = "text-muted-foreground text-lg max-w-2xl mx-auto" >
Purpose - built for the way churches actually work & mdash ; from the
welcome center to the pastor & rsquo ; s desk .
< / p >
< / div >
< div className = "grid sm:grid-cols-2 lg:grid-cols-3 gap-5" >
{ features . map ( ( feature ) = > (
2026-04-16 20:09:52 -04:00
< Link
2026-04-16 19:59:33 -04:00
key = { feature . title }
2026-04-16 20:09:52 -04:00
href = { feature . href }
className = "glass-card rounded-xl p-6 hover:scale-[1.01] transition-transform group"
2026-04-16 19:59:33 -04:00
>
2026-04-16 20:09:52 -04:00
< div className = "mb-4 h-10 w-10 rounded-lg bg-primary/10 flex items-center justify-center group-hover:bg-primary/20 transition-colors" >
2026-04-16 19:59:33 -04:00
< feature.icon className = "h-5 w-5 text-primary" / >
< / div >
2026-04-16 20:09:52 -04:00
< div className = "flex items-center gap-2 mb-2" >
< h3 className = "font-semibold" > { feature . title } < / h3 >
< ArrowRight className = "h-3.5 w-3.5 text-muted-foreground opacity-0 group-hover:opacity-100 group-hover:translate-x-0.5 transition-all" / >
< / div >
2026-04-16 19:59:33 -04:00
< p
className = "text-sm text-muted-foreground leading-relaxed"
dangerouslySetInnerHTML = { { __html : feature.description } }
/ >
2026-04-16 20:09:52 -04:00
< / Link >
2026-04-16 19:59:33 -04:00
) ) }
< / div >
2026-04-16 20:09:52 -04:00
< div className = "text-center mt-10" >
< Link
href = "/features"
className = "inline-flex items-center gap-2 text-sm font-semibold text-primary hover:underline"
>
Explore all features
< ArrowRight className = "h-4 w-4" / >
< / Link >
< / div >
2026-04-16 19:59:33 -04:00
< / div >
< / section >
) ;
}
const integrations = [
{
name : "Planning Center" ,
description : "Auto-match or create people, sync contact info, and add guests to lists." ,
tag : "Most Popular" ,
icon : Heart ,
} ,
{
name : "Google Sheets" ,
description : "Append card data to a shared spreadsheet for custom reporting workflows." ,
icon : FileText ,
} ,
{
name : "Monday.com" ,
description : "Create board items with mapped columns for project-style follow-up tracking." ,
icon : Globe ,
} ,
{
name : "Airtable" ,
description : "Push records with field mapping into any Airtable base for flexible data management." ,
icon : BarChart3 ,
} ,
{
name : "Webhooks" ,
description : "Send signed payloads to any URL on card events. Connect to Zapier, Make, or your custom API." ,
icon : Webhook ,
} ,
{
name : "CSV Export" ,
description : "Download your data anytime as CSV for import into any system." ,
icon : FileText ,
} ,
] ;
function Integrations() {
return (
< section id = "integrations" className = "py-16 sm:py-24" >
< div className = "mx-auto max-w-5xl px-6" >
< div className = "text-center mb-16" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
Connects to your existing tools
< / h2 >
< p className = "text-muted-foreground text-lg max-w-2xl mx-auto" >
Echo doesn & rsquo ; t replace your church management system & mdash ; it feeds
it . Send scanned data exactly where your team already works .
< / p >
< / div >
< div className = "grid sm:grid-cols-2 lg:grid-cols-3 gap-5" >
{ integrations . map ( ( integration ) = > (
< div
key = { integration . name }
className = "glass-card rounded-xl p-6 relative"
>
{ integration . tag && (
< span className = "absolute top-4 right-4 text-[10px] font-bold uppercase tracking-wider bg-primary/10 text-primary px-2 py-0.5 rounded-full" >
{ integration . tag }
< / span >
) }
< div className = "mb-4 h-10 w-10 rounded-lg bg-primary/10 flex items-center justify-center" >
< integration.icon className = "h-5 w-5 text-primary" / >
< / div >
< h3 className = "font-semibold mb-2" > { integration . name } < / h3 >
< p className = "text-sm text-muted-foreground leading-relaxed" >
{ integration . description }
< / p >
< / div >
) ) }
< / div >
2026-04-16 20:09:52 -04:00
< div className = "text-center mt-10" >
< Link
href = "/features/integrations"
className = "inline-flex items-center gap-2 text-sm font-semibold text-primary hover:underline"
>
See all integrations in detail
< ArrowRight className = "h-4 w-4" / >
< / Link >
< / div >
2026-04-16 19:59:33 -04:00
< / div >
< / section >
) ;
}
const tiers = [
{
name : "Free" ,
price : "$0" ,
period : "forever" ,
description : "Perfect for trying Echo with your team." ,
cards : "50 cards/month" ,
features : [
"AI-powered OCR extraction" ,
"Web upload (PDF, JPEG, PNG)" ,
"2 team members" ,
"1 location" ,
"CSV export" ,
"Community support" ,
] ,
cta : "Get Started Free" ,
ctaHref : "/signup" ,
highlighted : false ,
} ,
{
name : "Starter" ,
price : "$29" ,
period : "/month" ,
annualPrice : "$24" ,
description : "For churches ready to automate their guest workflow." ,
cards : "250 cards/month" ,
features : [
"Everything in Free, plus:" ,
"Email & FTP scanner integration" ,
"5 team members" ,
"Collection day management" ,
"Google Sheets integration" ,
"Webhook support" ,
"Email support" ,
] ,
cta : "Start 14-Day Trial" ,
ctaHref : "/signup?plan=starter" ,
highlighted : false ,
} ,
{
name : "Growth" ,
price : "$79" ,
period : "/month" ,
annualPrice : "$66" ,
description : "Full integration power for growing congregations." ,
cards : "1,000 cards/month" ,
features : [
"Everything in Starter, plus:" ,
"Planning Center sync" ,
"Monday.com & Airtable" ,
"15 team members" ,
"3 locations" ,
"Auto-assign to events" ,
"API access" ,
"Priority support" ,
] ,
cta : "Start 14-Day Trial" ,
ctaHref : "/signup?plan=growth" ,
highlighted : true ,
} ,
{
name : "Enterprise" ,
price : "Custom" ,
period : "" ,
description : "For multi-site churches and denominations." ,
cards : "Unlimited cards" ,
features : [
"Everything in Growth, plus:" ,
"Unlimited team members" ,
"Unlimited locations" ,
"SSO / SAML authentication" ,
"Custom integrations" ,
"Dedicated account manager" ,
"99.9% uptime SLA" ,
] ,
cta : "Contact Sales" ,
ctaHref : "mailto:sales@echoocr.com" ,
highlighted : false ,
} ,
] ;
function Pricing() {
const [ annual , setAnnual ] = useState ( false ) ;
return (
< section id = "pricing" className = "py-16 sm:py-24 relative" >
< div className = "absolute inset-0 gradient-mesh pointer-events-none opacity-50" / >
< div className = "relative mx-auto max-w-6xl px-6" >
< div className = "text-center mb-12" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
Simple , transparent pricing
< / h2 >
< p className = "text-muted-foreground text-lg max-w-2xl mx-auto mb-8" >
Start free . Upgrade when you & rsquo ; re ready . Every plan saves your team
hours of manual data entry every single week .
< / p >
< div className = "inline-flex items-center gap-3 rounded-full border border-border/60 bg-card/60 p-1 glass" >
< button
onClick = { ( ) = > setAnnual ( false ) }
className = { ` rounded-full px-5 py-2 text-sm font-medium transition-all ${
! annual
? "bg-primary text-primary-foreground shadow-sm"
: "text-muted-foreground hover:text-foreground"
} ` }
>
Monthly
< / button >
< button
onClick = { ( ) = > setAnnual ( true ) }
className = { ` rounded-full px-5 py-2 text-sm font-medium transition-all ${
annual
? "bg-primary text-primary-foreground shadow-sm"
: "text-muted-foreground hover:text-foreground"
} ` }
>
Annual
< span className = "ml-1.5 text-xs opacity-80" > Save 17 % < / span >
< / button >
< / div >
< / div >
< div className = "grid sm:grid-cols-2 lg:grid-cols-4 gap-5" >
{ tiers . map ( ( tier ) = > (
< div
key = { tier . name }
className = { ` rounded-2xl p-6 flex flex-col ${
tier . highlighted
? "glass-card ring-2 ring-primary/30 shadow-xl scale-[1.02]"
: "glass-card"
} ` }
>
{ tier . highlighted && (
< div className = "text-[10px] font-bold uppercase tracking-wider text-primary mb-4" >
Most Popular
< / div >
) }
< h3 className = "text-lg font-semibold" > { tier . name } < / h3 >
< div className = "mt-3 mb-1" >
< span className = "text-3xl font-bold" >
{ annual && tier . annualPrice ? tier.annualPrice : tier.price }
< / span >
{ tier . period && (
< span className = "text-sm text-muted-foreground ml-1" >
{ tier . period }
< / span >
) }
< / div >
{ annual && tier . annualPrice && (
< div className = "text-xs text-muted-foreground mb-3" >
Billed annually ( { tier . annualPrice === "$24" ? "$288" : "$792" } / year )
< / div >
) }
< p className = "text-sm text-muted-foreground mb-4" >
{ tier . description }
< / p >
< div className = "text-sm font-semibold text-foreground mb-4 pb-4 border-b border-border/40" >
{ tier . cards }
< / div >
< ul className = "space-y-3 mb-8 flex-1" >
{ tier . features . map ( ( feature ) = > (
< li key = { feature } className = "flex items-start gap-2.5 text-sm" >
< Check className = "h-4 w-4 text-primary mt-0.5 shrink-0" / >
< span className = "text-muted-foreground" > { feature } < / span >
< / li >
) ) }
< / ul >
< Link
href = { tier . ctaHref }
className = { ` block text-center rounded-lg py-2.5 text-sm font-semibold transition-all ${
tier . highlighted
? "bg-primary text-primary-foreground shadow-sm hover:opacity-90"
: "border border-border/60 bg-card/60 text-foreground hover:bg-accent/40"
} ` }
>
{ tier . cta }
< / Link >
< / div >
) ) }
< / div >
< p className = "text-center text-xs text-muted-foreground mt-8" >
All paid plans include a 14 - day free trial . No credit card required to
start . Need more cards ? Overage billed at $0 . 08 / card .
< / p >
< / div >
< / section >
) ;
}
const testimonials = [
{
quote :
"We used to spend all of Monday morning entering visitor cards. Now it's done before we leave on Sunday. Echo literally gave us a day back." ,
name : "Sarah Mitchell" ,
role : "Guest Services Director" ,
church : "Grace Community Church" ,
} ,
{
quote :
"The Planning Center integration alone was worth it. New guests show up in our system automatically — our follow-up team can start reaching out the same day." ,
name : "David Chen" ,
role : "Executive Pastor" ,
church : "Hillside Fellowship" ,
} ,
{
quote :
"We have three campuses and Echo keeps everything organized. Each location scans their own cards and it all flows into one dashboard." ,
name : "Maria Rodriguez" ,
role : "Administrative Director" ,
church : "New Life Church" ,
} ,
] ;
function Testimonials() {
return (
< section className = "py-16 sm:py-24" >
< div className = "mx-auto max-w-5xl px-6" >
< div className = "text-center mb-12" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
Trusted by churches like yours
< / h2 >
< / div >
< div className = "grid md:grid-cols-3 gap-5" >
{ testimonials . map ( ( t ) = > (
< div key = { t . name } className = "glass-card rounded-xl p-6" >
< p
className = "text-sm text-muted-foreground leading-relaxed mb-6 italic"
dangerouslySetInnerHTML = { { __html : ` “ ${ t . quote } ” ` } }
/ >
< div >
< div className = "text-sm font-semibold" > { t . name } < / div >
< div className = "text-xs text-muted-foreground" >
{ t . role } , { t . church }
< / div >
< / div >
< / div >
) ) }
< / div >
< / div >
< / section >
) ;
}
const faqs = [
{
q : "What types of cards can Echo scan?" ,
a : "Echo works with any printed or handwritten response card, guest card, prayer request form, connection card, or decision card. If a human can read it, Echo can too. We support PDF (including multi-page duplex scans), JPEG, PNG, and WebP formats." ,
} ,
{
q : "How accurate is the AI OCR?" ,
a : "Echo uses the same vision AI models that power leading enterprise document processing. For printed text, accuracy is near-perfect. For handwriting, accuracy typically ranges from 85-95% depending on legibility — which is why every card goes through a human review step before syncing." ,
} ,
{
q : "Do I need special scanning equipment?" ,
a : "No. Any office scanner, multi-function printer, or even a smartphone camera works. If your scanner supports 'Scan to Email' or 'Scan to FTP' (most do), you can automate the entire process with zero manual uploading." ,
} ,
{
q : "How does the Planning Center integration work?" ,
a : "Echo connects via OAuth to your Planning Center People account. When a card is processed, it matches the person by email or name. If they exist, it updates their record. If not, it creates a new person. You can also add them to specific lists automatically." ,
} ,
{
q : "Is our congregation's data secure?" ,
a : "Yes. All data is encrypted in transit and at rest. We use role-based access controls, invitation-only team access, and email verification. Your data is stored on enterprise-grade infrastructure (Supabase + Vercel) with SOC 2 compliance." ,
} ,
{
q : "Can we self-host Echo?" ,
a : "Enterprise plans include the option for on-premise deployment via Docker. This is ideal for denominations or large organizations with strict data residency requirements." ,
} ,
{
q : "What happens if we go over our card limit?" ,
a : "We'll never cut you off mid-month. Overage is billed at $0.08 per card. If you're consistently exceeding your plan, we'll suggest upgrading to save money." ,
} ,
{
q : "Is there a contract or commitment?" ,
a : "No. Monthly plans can be cancelled anytime. Annual plans are paid upfront for the discount but you can switch to monthly at renewal. The free tier is free forever." ,
} ,
] ;
function FAQ() {
const [ openIndex , setOpenIndex ] = useState < number | null > ( null ) ;
return (
< section id = "faq" className = "py-16 sm:py-24" >
< div className = "mx-auto max-w-3xl px-6" >
< div className = "text-center mb-12" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
Frequently asked questions
< / h2 >
< / div >
< div className = "space-y-3" >
{ faqs . map ( ( faq , i ) = > (
< div key = { i } className = "glass-card rounded-xl overflow-hidden" >
< button
onClick = { ( ) = > setOpenIndex ( openIndex === i ? null : i ) }
className = "flex items-center justify-between w-full px-6 py-4 text-left"
>
< span className = "text-sm font-semibold pr-4" > { faq . q } < / span >
{ openIndex === i ? (
< ChevronUp className = "h-4 w-4 text-muted-foreground shrink-0" / >
) : (
< ChevronDown className = "h-4 w-4 text-muted-foreground shrink-0" / >
) }
< / button >
{ openIndex === i && (
< div className = "px-6 pb-5" >
< p className = "text-sm text-muted-foreground leading-relaxed" >
{ faq . a }
< / p >
< / div >
) }
< / div >
) ) }
< / div >
< / div >
< / section >
) ;
}
function FinalCTA() {
return (
< section className = "py-16 sm:py-24 relative" >
< div className = "absolute inset-0 gradient-mesh pointer-events-none" / >
< div className = "relative mx-auto max-w-3xl px-6 text-center" >
< div className = "glass-card rounded-2xl p-10 sm:p-14" >
< h2 className = "text-3xl sm:text-4xl font-bold tracking-tight mb-4" >
Ready to give your team Sunday evenings back ?
< / h2 >
< p className = "text-muted-foreground text-lg mb-8 max-w-xl mx-auto" >
Join churches who & rsquo ; ve already processed thousands of guest cards
with Echo . Start free & mdash ; no credit card , no commitment .
< / p >
< Link
href = "/signup"
className = "inline-flex items-center gap-2 rounded-xl bg-primary px-8 py-3.5 text-base font-semibold text-primary-foreground shadow-lg hover:opacity-90 transition-opacity"
>
Get Started Free
< ArrowRight className = "h-4 w-4" / >
< / Link >
< / div >
< / div >
< / section >
) ;
}
export default function WelcomePage() {
return (
< div className = "min-h-screen bg-background" >
2026-04-16 20:09:52 -04:00
< MarketingNav / >
2026-04-16 19:59:33 -04:00
< Hero / >
< ProblemStatement / >
< HowItWorks / >
< Features / >
< Integrations / >
< Testimonials / >
< Pricing / >
< FAQ / >
< FinalCTA / >
2026-04-16 20:09:52 -04:00
< MarketingFooter / >
2026-04-16 19:59:33 -04:00
< / div >
) ;
}