diff --git a/src/app/(marketing)/privacy/layout.tsx b/src/app/(marketing)/privacy/layout.tsx new file mode 100644 index 0000000..104b06f --- /dev/null +++ b/src/app/(marketing)/privacy/layout.tsx @@ -0,0 +1,17 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Privacy Policy", + description: + "Learn how Echo collects, uses, stores, and protects personal data — including scanned card information, account data, and third-party integrations.", + openGraph: { + title: "Privacy Policy | Echo", + description: + "How Echo handles your congregation's data — collection, AI processing, storage, retention, and your rights.", + images: ["/og-image.png"], + }, +}; + +export default function PrivacyLayout({ children }: { children: React.ReactNode }) { + return <>{children}; +} diff --git a/src/app/(marketing)/privacy/page.tsx b/src/app/(marketing)/privacy/page.tsx new file mode 100644 index 0000000..49e3d48 --- /dev/null +++ b/src/app/(marketing)/privacy/page.tsx @@ -0,0 +1,510 @@ +"use client"; + +import Link from "next/link"; +import { Shield } from "lucide-react"; +import { MarketingNav } from "@/components/marketing/nav"; +import { MarketingFooter } from "@/components/marketing/footer"; + +function Section({ + id, + title, + children, +}: { + id: string; + title: string; + children: React.ReactNode; +}) { + return ( +
+

{title}

+
+ {children} +
+
+ ); +} + +const EFFECTIVE_DATE = "April 16, 2026"; + +export default function PrivacyPolicyPage() { + return ( +
+ + + {/* Hero */} +
+
+
+
+ + Your data, your trust +
+

+ Privacy Policy +

+

+ Effective {EFFECTIVE_DATE} +

+
+
+ + {/* Body */} +
+ {/* Intro */} +
+

+ Echo (“we,” “us,” or “our”) provides + AI-powered response card scanning for churches, ministries, and nonprofits. + This Privacy Policy explains how we collect, use, store, and protect personal + information when you use the Echo platform at{" "} + + echoocr.com + {" "} + (the “Service”). +

+

+ We take the protection of your congregation’s personal data seriously. Many of the + individuals whose information flows through Echo — first-time guests, prayer + request submitters, families — have entrusted that data to your church. + We treat it with the same care you do. +

+
+ + {/* TOC */} + + + {/* 1 */} +
+

+ a) Account Information +

+

+ When you create an Echo account, we collect your display name,{" "} + email address, and a password (stored as a + bcrypt hash — we never store passwords in plain text). If you sign in via + single sign-on (SSO/OIDC), we receive a unique identifier and email from your + identity provider. +

+ +

+ b) Organization & Team Data +

+

+ Organization administrators provide an organization name,{" "} + type (e.g., church), timezone, and optionally{" "} + allowed email domains for auto-join. Team member records include + the member’s role (owner, admin, editor, reviewer, or viewer) and the date + they joined. +

+ +

+ c) Scanned Card Data (Congregation PII) +

+

+ This is the most sensitive category. When your team scans or uploads response + cards, our AI extracts fields that may include: +

+
    +
  • Full name, gender, date of birth, marital status
  • +
  • Email address, cell phone, home phone
  • +
  • Mailing address (street, apartment, city, state, ZIP)
  • +
  • Prayer requests (including confidential flags)
  • +
  • Spiritual decisions and next steps (e.g., baptism, salvation)
  • +
  • Visit type, attendance history, campus preferences
  • +
  • How the visitor heard about your church
  • +
  • Service time attended, message topics of interest
  • +
+

+ We also store the original scanned images (PDF, JPEG, PNG) and{" "} + processed front/back card images in encrypted object storage. +

+ +

+ d) Usage & Technical Data +

+

+ We collect standard server logs including IP addresses, browser user-agent + strings, page views, and timestamps. We use this data for security monitoring, + performance optimization, and debugging — not for advertising. +

+
+ + {/* 2 */} +
+

We use the information we collect to:

+
    +
  • + Provide the Service — process scanned cards with AI OCR, + display results in your dashboard, and sync data to your integrations +
  • +
  • + Authenticate and authorize — verify your identity, + manage team roles, and enforce permissions +
  • +
  • + Send transactional emails — email verification, + team invitations, and service notices (we do not send marketing emails) +
  • +
  • + Maintain and improve the Service — fix bugs, monitor + performance, and develop new features +
  • +
  • + Enforce our Terms — detect abuse and protect the + security of the platform +
  • +
+

+ We never sell personal data. We do not use + your congregation’s scanned card data to train AI models, build advertising + profiles, or for any purpose other than providing the Service to your organization. +

+
+ + {/* 3 */} +
+

+ Echo uses vision AI models to extract text and structured data from scanned + card images. When a card is processed: +

+
    +
  • + The card image is sent to an AI model provider (by default,{" "} + OpenAI via the Vercel AI Gateway) along with a structured + extraction prompt +
  • +
  • + The AI returns structured field data (name, email, prayer requests, etc.) + which is stored in your organization’s database +
  • +
  • + Self-hosted organizations may configure a local Ollama instance + for fully on-premises processing, meaning card images never leave your network +
  • +
+

+ We use OpenAI’s API, which, per their enterprise data use policies, does + not use API inputs to train their models. The Vercel AI Gateway acts as a + routing proxy and does not persistently store your image data. +

+
+ + {/* 4 */} +
+

+ Echo can send scanned card data to external services that you + explicitly configure. No data is sent to third parties unless your + organization enables an integration. Available integrations include: +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IntegrationData Sent
Planning CenterName, email, phone, gender — used to match or create people records and manage list membership
Google SheetsMapped card fields appended as rows to your specified spreadsheet
Monday.comMapped card fields as board item columns; optionally card images as file attachments
AirtableMapped card fields as Airtable record fields
WebhooksFull card data as JSON payload to your specified URL, with optional HMAC-SHA256 signature verification
CSV ExportDownloadable file generated locally — no data sent to external servers
+
+

+ Each integration uses your own credentials (OAuth tokens, API + keys, or personal access tokens) and field mappings that you control. You can + disable any integration at any time. +

+
+ + {/* 5 */} +
+

+ We use the following third-party services to operate Echo: +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProviderPurposeData Processed
SupabaseManaged PostgreSQL database and S3-compatible object storageAll application data, card images, and uploaded files
VercelApplication hosting, edge network, and AI GatewayHTTP requests, server-side rendering, AI API routing
OpenAIAI vision model for OCR extraction (via Vercel AI Gateway)Card images and extraction prompts (not used for model training)
UpstashQStash message queue for async job processingJob IDs and processing metadata (no card PII)
BrevoTransactional email deliveryRecipient email addresses and email content (verification links, invitations)
+
+
+ + {/* 6 */} +
+

We implement multiple layers of security to protect your data:

+
    +
  • + Encryption in transit — all connections use TLS/HTTPS +
  • +
  • + Encryption at rest — database and object storage are + encrypted at rest via our infrastructure providers (Supabase, AWS) +
  • +
  • + Password security — passwords are hashed using bcrypt + with a cost factor of 12; we never store or log plain-text passwords +
  • +
  • + Role-based access control — five permission tiers + (owner, admin, editor, reviewer, viewer) restrict who can view, edit, + delete, and export card data within your organization +
  • +
  • + Invitation-only teams — team members must be explicitly + invited by an admin or owner; optional domain-based auto-join +
  • +
  • + Email verification — required to confirm account + ownership +
  • +
  • + API key security — API keys are stored as hashes with + only a short prefix visible; keys can be scoped with specific permissions and + expiration dates +
  • +
  • + Webhook signatures — outbound webhook payloads can be + signed with HMAC-SHA256 so you can verify authenticity +
  • +
  • + Job queue verification — async processing jobs verify + Upstash cryptographic signatures before execution +
  • +
+
+ + {/* 7 */} +
+

+ Configurable Retention +

+

+ Organization administrators can configure retention periods for: +

+
    +
  • + Source uploads (original PDFs/images) — default 30 days +
  • +
  • + Card images (processed front/back images) — default 180 + days +
  • +
+

+ When retention periods expire, files are permanently deleted from object + storage. The structured data extracted from cards (names, contact info, etc.) + is retained in the database until explicitly deleted. +

+ +

+ Manual Deletion +

+

+ Organization admins and owners can delete individual cards at any time. Deletion + removes the database record and all associated images from + object storage permanently. Deleted data cannot be recovered. +

+ +

+ Account Deletion +

+

+ To request deletion of your account and all associated data, please contact us + at{" "} + + privacy@echoocr.com + + . We will process deletion requests within 30 days. +

+
+ + {/* 8 */} +
+

+ Depending on your jurisdiction, you may have the right to: +

+
    +
  • + Access — request a copy of the personal data we hold + about you +
  • +
  • + Correction — request correction of inaccurate data +
  • +
  • + Deletion — request deletion of your personal data +
  • +
  • + Data portability — export your data via CSV export or + the API +
  • +
  • + Restriction — request that we limit processing of your + data +
  • +
  • + Objection — object to processing of your data for + certain purposes +
  • +
+

+ For scanned card data (congregation PII), your church or organization is the{" "} + data controller. Echo acts as a data processor{" "} + on behalf of your organization. Individuals whose data appears on scanned cards + should direct access, correction, or deletion requests to the church or + organization that collected their information. +

+

+ To exercise your rights regarding your Echo account, contact us at{" "} + + privacy@echoocr.com + + . +

+
+ + {/* 9 */} +
+

+ Echo is not directed at children under 13. We do not knowingly collect personal + information from children under 13. Scanned response cards may occasionally + contain information about minors (e.g., children’s ministry forms). + This data is processed under the authority and responsibility of the + organization that collected it. +

+

+ If you believe we have inadvertently collected information from a child under 13 + without appropriate consent, please contact us immediately at{" "} + + privacy@echoocr.com + + . +

+
+ + {/* 10 */} +
+

+ Echo’s infrastructure is hosted in the United States. If you access the + Service from outside the United States, your data will be transferred to and + processed in the United States. By using the Service, you consent to this + transfer. +

+
+ + {/* 11 */} +
+

+ We may update this Privacy Policy from time to time. If we make material + changes, we will notify you by posting a prominent notice on the Service or + sending you an email. Your continued use of the Service after changes take + effect constitutes acceptance of the revised policy. +

+
+ + {/* 12 */} +
+

+ If you have questions about this Privacy Policy or our data practices, please + contact us: +

+ +
+
+ + +
+ ); +} diff --git a/src/app/(marketing)/terms/layout.tsx b/src/app/(marketing)/terms/layout.tsx new file mode 100644 index 0000000..d991f79 --- /dev/null +++ b/src/app/(marketing)/terms/layout.tsx @@ -0,0 +1,17 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Terms of Service", + description: + "Terms governing your use of the Echo platform — accounts, data responsibilities, subscriptions, acceptable use, and liability.", + openGraph: { + title: "Terms of Service | Echo", + description: + "Terms governing your use of Echo — accounts, data responsibilities, subscriptions, and acceptable use.", + images: ["/og-image.png"], + }, +}; + +export default function TermsLayout({ children }: { children: React.ReactNode }) { + return <>{children}; +} diff --git a/src/app/(marketing)/terms/page.tsx b/src/app/(marketing)/terms/page.tsx new file mode 100644 index 0000000..b75caec --- /dev/null +++ b/src/app/(marketing)/terms/page.tsx @@ -0,0 +1,450 @@ +"use client"; + +import Link from "next/link"; +import { FileText } from "lucide-react"; +import { MarketingNav } from "@/components/marketing/nav"; +import { MarketingFooter } from "@/components/marketing/footer"; + +function Section({ + id, + title, + children, +}: { + id: string; + title: string; + children: React.ReactNode; +}) { + return ( +
+

{title}

+
+ {children} +
+
+ ); +} + +const EFFECTIVE_DATE = "April 16, 2026"; + +export default function TermsOfServicePage() { + return ( +
+ + + {/* Hero */} +
+
+
+
+ + Legal +
+

+ Terms of Service +

+

+ Effective {EFFECTIVE_DATE} +

+
+
+ + {/* Body */} +
+ {/* Intro */} +
+

+ These Terms of Service (“Terms”) govern your access to and use of the + Echo platform (“Service”), operated by Echo (“we,” + “us,” or “our”). By creating an account or using the + Service, you agree to be bound by these Terms. +

+

+ If you are using the Service on behalf of a church, ministry, nonprofit, or other + organization, you represent that you have the authority to bind that organization + to these Terms, and “you” refers to both you individually and the + organization. +

+
+ + {/* TOC */} + + + {/* 1 */} +
+

+ Echo is a cloud-based platform that uses artificial intelligence to extract + structured data from scanned response cards, guest cards, prayer request forms, + and similar paper documents. The Service includes: +

+
    +
  • AI-powered optical character recognition (OCR) for handwritten and printed text
  • +
  • Document ingestion via web upload, email, and FTP
  • +
  • A team dashboard for reviewing, assigning, and managing extracted data
  • +
  • Integrations with third-party services (Planning Center, Google Sheets, Monday.com, Airtable, webhooks)
  • +
  • Collection day and event management
  • +
  • Multi-site organization support
  • +
  • Data export via CSV and API
  • +
+
+ + {/* 2 */} +
+

+ You must be at least 18 years old (or the age of majority in your jurisdiction) + to create an account. By using the Service, you represent that you meet this + requirement. The Service is designed for use by churches, ministries, nonprofits, + and similar organizations. +

+
+ + {/* 3 */} +
+

+ You are responsible for maintaining the confidentiality of your account + credentials and for all activity that occurs under your account. You agree to: +

+
    +
  • Provide accurate and complete registration information
  • +
  • Keep your password secure and not share it with others
  • +
  • Notify us immediately if you suspect unauthorized access to your account
  • +
  • Not create accounts for automated use without our prior written consent
  • +
+

+ Organization owners and administrators are responsible for managing team member + access, assigning appropriate roles, and removing members who should no longer + have access. +

+
+ + {/* 4 */} +
+

You agree not to:

+
    +
  • Use the Service for any unlawful purpose or in violation of any applicable law
  • +
  • Upload content that you do not have the right to process (e.g., cards collected without consent)
  • +
  • Attempt to gain unauthorized access to the Service, other users’ accounts, or our infrastructure
  • +
  • Interfere with or disrupt the integrity or performance of the Service
  • +
  • Reverse engineer, decompile, or disassemble any part of the Service
  • +
  • Use the Service to build a competing product
  • +
  • Resell or redistribute access to the Service without our written consent
  • +
  • Upload malicious files, malware, or content designed to exploit the system
  • +
+

+ We reserve the right to suspend or terminate accounts that violate these + restrictions. +

+
+ + {/* 5 */} +
+

+ You retain all rights to the data you upload to the Service (“Your + Data”). This includes scanned card images, extracted text and structured + fields, and any other content you provide. +

+

+ You are the data controller. As the organization using Echo, you + are responsible for: +

+
    +
  • + Ensuring you have appropriate consent or legal basis to collect and process the + personal information on scanned cards +
  • +
  • + Complying with applicable data protection laws (including GDPR, CCPA, state + privacy laws, and any church- or denomination-specific data policies) +
  • +
  • + Responding to data subject requests (access, correction, deletion) from + individuals whose information appears on scanned cards +
  • +
  • + Configuring appropriate data retention settings and deleting data when it is + no longer needed +
  • +
+

+ Echo acts as a data processor on your behalf. We process Your + Data only as necessary to provide the Service and in accordance with our{" "} + + Privacy Policy + + . +

+
+ + {/* 6 */} +
+

+ By using the Service, you authorize us to process Your Data as described in our{" "} + + Privacy Policy + + , including: +

+
    +
  • + Transmitting card images to AI model providers for OCR extraction (by default, + OpenAI via the Vercel AI Gateway) +
  • +
  • + Storing Your Data on our infrastructure providers (Supabase for database and + object storage, Vercel for hosting) +
  • +
  • + Sending Your Data to third-party integrations that you have explicitly + configured (Planning Center, Google Sheets, etc.) +
  • +
  • + Using Brevo to deliver transactional emails to your team members +
  • +
+

+ We will not process Your Data for any purpose other than providing, maintaining, + and improving the Service. We will not sell, rent, or share Your Data with third + parties for their own purposes. +

+
+ + {/* 7 */} +
+

+ Paid plans are billed on a monthly or annual basis as selected at the time of + purchase. By subscribing to a paid plan, you agree to pay the applicable fees. +

+
    +
  • + Billing cycle — charges are billed in advance at the + start of each billing period +
  • +
  • + Card limits — each plan includes a monthly card + processing allowance. Cards exceeding the limit are billed at the overage rate + specified in your plan ($0.08/card unless otherwise agreed) +
  • +
  • + Upgrades and downgrades — you may change your plan at + any time. Upgrades take effect immediately with prorated charges; downgrades + take effect at the next billing cycle +
  • +
  • + Cancellation — you may cancel your subscription at any + time. Cancellation takes effect at the end of the current billing period. No + refunds are provided for partial periods +
  • +
  • + Free trials — paid plans include a 14-day free trial. + If you do not cancel before the trial ends, you will be charged for the first + billing period +
  • +
+

+ We reserve the right to change pricing with 30 days’ notice. Price changes + will not affect your current billing period. +

+
+ + {/* 8 */} +
+

+ Echo offers a free tier with limited features and a monthly card processing + cap. The free tier is provided “as is” and may be modified or + discontinued at any time with reasonable notice. +

+

+ Free tier accounts that remain inactive (no cards processed, no logins) for + 12 consecutive months may be subject to deletion after a 30-day notice email. +

+
+ + {/* 9 */} +
+

+ The Service, including its design, code, features, documentation, and branding, + is owned by Echo and protected by intellectual property laws. These Terms do not + grant you any rights to our trademarks, logos, or brand assets. +

+

+ You grant us a limited, non-exclusive license to use, store, and process Your + Data solely for the purpose of providing the Service. This license terminates + when you delete Your Data or close your account. +

+
+ + {/* 10 */} +
+

+ The Service allows you to connect to third-party services. Your use of those + services is governed by their own terms and privacy policies. We are not + responsible for the availability, accuracy, or practices of third-party services. +

+

+ You are responsible for providing valid credentials and ensuring that your use of + integrations complies with the third party’s terms. We may disable an + integration if it causes service instability or violates these Terms. +

+
+ + {/* 11 */} +
+

+ We strive to maintain high availability but do not guarantee uninterrupted + access. The Service may be temporarily unavailable due to maintenance, updates, + or circumstances beyond our control. +

+

+ Enterprise plans include a 99.9% uptime SLA. Details of the SLA, including + remedies for downtime, are provided in the Enterprise agreement. +

+

+ We will make reasonable efforts to notify you of planned maintenance in advance. +

+
+ + {/* 12 */} +
+

+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, ECHO SHALL NOT BE LIABLE FOR ANY + INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS + OF PROFITS, DATA, OR GOODWILL, ARISING OUT OF OR RELATED TO YOUR USE OF THE + SERVICE. +

+

+ OUR TOTAL AGGREGATE LIABILITY FOR ALL CLAIMS RELATED TO THE SERVICE SHALL NOT + EXCEED THE AMOUNT YOU PAID US IN THE 12 MONTHS PRECEDING THE CLAIM, OR $100, + WHICHEVER IS GREATER. +

+

+ THE SERVICE IS PROVIDED “AS IS” AND “AS AVAILABLE” + WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT. +

+

+ AI-powered OCR is not 100% accurate. You are responsible for reviewing extracted + data before relying on it or syncing it to external systems. +

+
+ + {/* 13 */} +
+

+ You agree to indemnify, defend, and hold harmless Echo and its officers, + employees, and agents from any claims, liabilities, damages, losses, or + expenses (including reasonable attorneys’ fees) arising out of: +

+
    +
  • Your use of the Service
  • +
  • Your violation of these Terms
  • +
  • Your violation of any applicable law or regulation
  • +
  • Your failure to obtain appropriate consent for the personal data you process through the Service
  • +
+
+ + {/* 14 */} +
+

+ Either party may terminate these Terms at any time. You may stop using the + Service and delete your account by contacting{" "} + + support@echoocr.com + + . +

+

+ We may suspend or terminate your access if you violate these Terms, fail to pay + applicable fees, or if we are required to do so by law. We will provide + reasonable notice before termination, except in cases of severe violation. +

+

+ Upon termination, your right to use the Service ceases. You may export Your + Data before termination. We will retain Your Data for 30 days after + termination to allow for export, after which it will be permanently deleted. +

+
+ + {/* 15 */} +
+

+ We may update these Terms from time to time. If we make material changes, we + will notify you by posting a prominent notice on the Service or sending you an + email at least 30 days before the changes take effect. Your continued use of + the Service after changes take effect constitutes acceptance. +

+
+ + {/* 16 */} +
+

+ These Terms are governed by and construed in accordance with the laws of the + State of Texas, without regard to its conflict of law provisions. Any disputes + arising under these Terms shall be resolved in the state or federal courts + located in Texas. +

+
+ + {/* 17 */} +
+

+ If you have questions about these Terms, please contact us: +

+ +
+
+ + +
+ ); +} diff --git a/src/components/marketing/footer.tsx b/src/components/marketing/footer.tsx index 6e80b48..fb80a47 100644 --- a/src/components/marketing/footer.tsx +++ b/src/components/marketing/footer.tsx @@ -33,8 +33,8 @@ export function MarketingFooter() { diff --git a/src/middleware.ts b/src/middleware.ts index 4199998..10d13d6 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -5,6 +5,8 @@ const publicPaths = [ "/welcome", "/features", "/pricing", + "/privacy", + "/terms", "/login", "/signup", "/invite",