diff --git a/app/globals.css b/app/globals.css index 2131f50..f63056f 100644 --- a/app/globals.css +++ b/app/globals.css @@ -542,6 +542,14 @@ h3 { line-height: 1.38; } +.hero-local-trust { + max-width: 32rem; + margin: var(--space-2) 0 0; + color: var(--blue); + font-size: var(--step--1); + font-weight: 700; +} + .trust-list, .check-stack, .local-strip ul { @@ -1489,10 +1497,16 @@ h3 { .pain-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: var(--space-4); } +@media (min-width: 760px) { + .pain-grid { + grid-template-columns: repeat(3, 1fr); + } +} + .pain-grid article { padding-block: var(--space-4); border-top: 1px solid var(--line); @@ -2789,6 +2803,72 @@ h3 { color: var(--green); } +.offer-banner { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-3) var(--space-4); + border: 1px solid oklch(67% 0.16 147 / 0.62); + border-radius: var(--radius-md); + background: oklch(16% 0.06 147 / 0.18); + color: var(--green); + font-size: var(--step--1); + font-weight: 800; + line-height: 1.4; +} + +:root[data-theme="light"] .offer-banner { + background: oklch(90% 0.06 147 / 0.32); +} + +.offer-banner-icon { + flex: 0 0 auto; + color: var(--green); + font-size: 1.1rem; +} + +.price-subtext { + margin: 0; + color: var(--text-muted); + font-size: var(--step--1); +} + +.pricing-included-panel { + display: grid; + gap: var(--space-4); + align-content: start; + padding: clamp(1.25rem, 2vw, 2rem); + border: 1px solid var(--line-soft); + border-radius: var(--radius-md); + background: oklch(12% 0.034 245 / 0.62); +} + +:root[data-theme="light"] .pricing-included-panel { + background: oklch(99% 0.006 245 / 0.86); +} + +.included-feature-list { + display: grid; + gap: var(--space-3); + list-style: none; + padding: 0; + margin: 0; +} + +.included-feature-list li { + display: flex; + align-items: center; + gap: var(--space-3); + color: var(--text-muted); +} + +.included-check { + flex: 0 0 auto; + color: var(--green); + font-weight: 800; + font-size: 0.95rem; +} + .plan-summary, .pricing-note { margin: 0; @@ -3264,6 +3344,13 @@ textarea::placeholder { font-size: var(--step--1); } +.form-trust-line { + margin: var(--space-2) 0 0; + color: var(--text-dim); + font-size: var(--step--1); + text-align: center; +} + .form-status { min-height: 1.5rem; margin: 0; diff --git a/app/page.tsx b/app/page.tsx index 671d6a5..1458c55 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,72 +4,20 @@ import { FormEvent, MouseEvent, useEffect, useState } from "react"; import SiteHeader from "../components/SiteHeader"; import HeroSection from "../components/HeroSection"; import ProblemSection from "../components/ProblemSection"; -import ProcessSection from "../components/ProcessSection"; -import DeliverabilitySection from "../components/DeliverabilitySection"; -import ContinuitySection, { type ContinuityFeature, type FeatureKey } from "../components/ContinuitySection"; -import MigrationProcessSection from "../components/MigrationProcessSection"; -import PricingSection, { type Plan } from "../components/PricingSection"; +import PricingSection from "../components/PricingSection"; import FaqSection from "../components/FaqSection"; import AssessmentSection from "../components/AssessmentSection"; import SiteFooter from "../components/SiteFooter"; type Theme = "dark" | "light"; -const pricingSummaries: Record = { - hosting: - "Core business email hosting with 25 GB mailboxes, custom domain email, and AWS-backed infrastructure.", - managed: - "Managed setup adds rollout planning, DNS validation, migration coordination, and device handoff checks during the assessment.", -}; - -const continuityFeatures: Record = { - buffering: { - title: "Inbound buffering", - copy: "Incoming mail can be buffered before mailbox delivery during maintenance or provider-side disruption.", - proof: [ - "Supports planned maintenance windows", - "Keeps delivery flow observable", - "Feeds mailbox delivery after processing", - ], - }, - sending: { - title: "Outbound sending", - copy: "Amazon SES gives outbound email an authenticated sending path with reputation tooling and clearer operational visibility.", - proof: [ - "Separates outbound sending from old shared hosting mail", - "Uses domain authentication as part of setup", - "Makes sending behavior easier to troubleshoot", - ], - }, - standby: { - title: "Standby failover", - copy: "A standby environment is part of the continuity plan when primary systems need intervention or provider-side work.", - proof: [ - "Keeps the fallback path visible", - "Reduces guesswork during incidents", - "Pairs with status checks and local support", - ], - }, - local: { - title: "Local management", - copy: "Domain records, migration, mailbox changes, device setup, and troubleshooting stay with a local Corpus Christi team.", - proof: [ - "One support path for DNS and devices", - "Migration scope is reviewed before work starts", - "Mailbox changes stay tied to the business context", - ], - }, -}; export default function Page() { const [menuOpen, setMenuOpen] = useState(false); const [theme, setTheme] = useState("dark"); - const [activeFeature, setActiveFeature] = useState("buffering"); - const [activePlan, setActivePlan] = useState("hosting"); - const [mailboxes, setMailboxes] = useState(25); + const [mailboxes, setMailboxes] = useState(10); const [formErrors, setFormErrors] = useState({ name: "", email: "" }); const [formStatus, setFormStatus] = useState(""); - const activeFeatureDetails = continuityFeatures[activeFeature]; useEffect(() => { const storedTheme = window.localStorage.getItem("bes-theme"); @@ -211,19 +159,8 @@ export default function Page() {
- - - - diff --git a/components/AssessmentSection.tsx b/components/AssessmentSection.tsx index b09af7c..9a1f3cf 100644 --- a/components/AssessmentSection.tsx +++ b/components/AssessmentSection.tsx @@ -60,6 +60,7 @@ export default function AssessmentSection({ formErrors, formStatus, onAssessment Request email assessment +

We reply within one business day. We don’t share your details.

{formStatus}

diff --git a/components/FaqSection.tsx b/components/FaqSection.tsx index d0a306d..7fce649 100644 --- a/components/FaqSection.tsx +++ b/components/FaqSection.tsx @@ -26,6 +26,10 @@ export default function FaqSection() { Is this Microsoft 365 or Google Workspace?

No. It is a managed business email hosting service for teams that want professional email, DNS correctness, migration help, and local support without buying a full office suite by default.

+
+ What does switching cost? +

Setup and migration are included at no extra charge for teams that switch by June 30, 2026. After that, the ongoing cost is $5 per mailbox per month. We confirm the final scope in your assessment before any work begins.

+
); diff --git a/components/HeroSection.tsx b/components/HeroSection.tsx index ecd961c..7c7a9dc 100644 --- a/components/HeroSection.tsx +++ b/components/HeroSection.tsx @@ -8,6 +8,9 @@ export default function HeroSection() {

Infrastructure and support from a local team that understands how business gets done.

+

+ Local team in downtown Corpus Christi — same neighborhood as you. +

  • diff --git a/components/PricingSection.tsx b/components/PricingSection.tsx index ded07e6..fceab34 100644 --- a/components/PricingSection.tsx +++ b/components/PricingSection.tsx @@ -1,50 +1,18 @@ -export type Plan = "hosting" | "managed"; - type PricingSectionProps = { - activePlan: Plan; mailboxes: number; - pricingSummaries: Record; - onPlanChange: (plan: Plan) => void; onMailboxesChange: (mailboxes: number) => void; }; -export default function PricingSection({ activePlan, mailboxes, pricingSummaries, onPlanChange, onMailboxesChange }: PricingSectionProps) { +export default function PricingSection({ mailboxes, onMailboxesChange }: PricingSectionProps) { return (

    Simple mailbox pricing

    $5 per inbox per month, scoped before you switch.

    -

    - Pick a mailbox count and plan focus. The base mailbox price is transparent; setup, migration, support scope, minimums, taxes, and add-ons are confirmed during the assessment. -

    -
    +
    -
    - Plan focus -
    - - -
    -
    -
    Mailbox count
    @@ -66,66 +34,47 @@ export default function PricingSection({ activePlan, mailboxes, pricingSummaries
    Estimated base hosting

    ${mailboxes * 5}/ month

    - Based on {mailboxes} inboxes at $5 each. + For teams of 10+ mailboxes.
    -

    - {pricingSummaries[activePlan]} -

    +
    + + Free migration & setup for teams that switch by June 30, 2026. +
    + +

    $5 per mailbox / month. Free migration if you switch by June 30, 2026. Final scope confirmed in your assessment.

    Get a mailbox count quote
    -
    -
    -
    - What changes by scope -

    Hosting first, managed help when the migration needs it.

    -
    - Operational plan -
    - -
    -
    - Feature - Hosting - Managed setup -
    -
    - 25 GB mailbox - Included - Included -
    -
    - Custom domain email - Included - Included -
    -
    - SPF, DKIM, DMARC check - Configured - Configured + validated -
    -
    - Migration from current provider - Scoped - Planned with handoff -
    -
    - Outlook, iPhone, iPad setup - Guided - Checked before handoff -
    -
    - Local support - Available - Priority during rollout -
    -
    - -

    - No inbox placement guarantees, no zero-downtime promise. The assessment confirms DNS access, provider constraints, migration timing, and device needs before work starts. -

    +
    + What’s included +
      +
    • + + 25 GB mailbox +
    • +
    • + + Custom domain email +
    • +
    • + + SPF, DKIM, DMARC configured +
    • +
    • + + Migration from current provider +
    • +
    • + + Outlook, iPhone, iPad setup +
    • +
    • + + Local Corpus Christi support +
    • +
    diff --git a/components/ProblemSection.tsx b/components/ProblemSection.tsx index a9fdc1f..e6043fe 100644 --- a/components/ProblemSection.tsx +++ b/components/ProblemSection.tsx @@ -10,17 +10,13 @@ export default function ProblemSection() {
    - Free addresses cost trust -

    Gmail and Yahoo are fine for personal use. A business domain signals that your company is established.

    + Unprofessional email hurts trust +

    Free Gmail or Yahoo addresses and unreliable shared-hosting mailboxes both signal to customers that your business is not serious about communication.

    DNS mistakes send mail to spam

    SPF, DKIM, and DMARC help receiving servers recognize legitimate mail from your domain.

    -
    - Shared hosting mail breaks quietly -

    Old hosting mailboxes often hide weak deliverability, limited storage, and unclear support paths.

    -
    Support queues slow the fix

    When email breaks, a local team can assess the domain, provider, device, and DNS together.