/* global React */ const { useState, useEffect, useRef } = React; // ============================================================ // CONTACT — single source of truth // ============================================================ // Vexara's inbound line is answered by Riley (Vapi inbound assistant) — // caller hits the receptionist who qualifies and books a demo. Same number // can be reached 24/7 because the receiver is AI; humans pick up follow-ups // during business hours. const VEXARA_PHONE_TEL = '+12563718343'; const VEXARA_PHONE_DISPLAY = '(256) 371-8343'; const VEXARA_EMAIL = 'hello@vexaraai.com'; // ============================================================ // LOGO // ============================================================ function Logo({ size = 26 }) { return ( vexara. ); } // ============================================================ // NAV // ============================================================ function Nav({ theme, onToggleTheme }) { const [scrolled, setScrolled] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 32); onScroll(); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); return (
{VEXARA_PHONE_DISPLAY} Book a demo
); } // ============================================================ // HERO with lead-to-call animation // ============================================================ function HeroCallCard() { const [step, setStep] = useState(0); // 0: nothing, 1: form submit, 2: webhook, 3: dialing, 4: connected, 5: qualified, 6: booked const stages = [ { time: '7:42:03 PM', label: 'Lead submits form', sub: 'CRM webhook fires (form #2451)' }, { time: '7:42:11 PM', label: 'Vexara picks up signal', sub: 'Lead routed · intent score: 0.81' }, { time: '7:42:38 PM', label: 'Outbound call dialing', sub: 'Calling as your dealership · TCPA verified' }, { time: '7:42:51 PM', label: 'Lead connected', sub: '"Hi Marcus, this is Riley with Northland Auto…"' }, { time: '7:44:22 PM', label: 'Qualified · objection handled', sub: 'Timeline: this weekend · trade-in: yes' }, { time: '7:45:07 PM', label: 'Test-drive booked', sub: 'Saturday 10:30 AM · logged to VinSolutions' }, ]; useEffect(() => { let i = 0; const tick = () => { i = (i + 1) % (stages.length + 2); setStep(i); }; const interval = setInterval(tick, 1400); return () => clearInterval(interval); }, []); return ( ); } function Hero() { return (
v2 Now live for auto dealerships in 14 states

The 60-second
lead-response agent.

Vexara calls every inbound lead in under a minute, qualifies them, and books the next step — as your business, on your CRM, around the clock. No new tools for your team to learn.

Book a 20-minute demo See how it works
SOC 2-aligned TCPA-compliant <1 hr setup
); } // ============================================================ // CRM logos band // ============================================================ function LogosBand() { return (
Plugs into the stack you already run
{['VinSolutions', 'DealerSocket', 'Elead', 'HubSpot', 'Salesforce', 'ServiceTitan'].map(n => ( {n} ))}
); } // ============================================================ // SHIFTS // ============================================================ function Shifts() { const cards = [ { icon: , title: 'After-Hours Response', desc: 'A lead hits your form at 8 pm. Vexara calls them back in 60 seconds, qualifies them, and books the next step — before your team starts tomorrow.', meta1: 'Avg latency', val1: '60s', meta2: 'Coverage', val2: '24/7' }, { icon: , title: 'Morning Prioritization', desc: 'Every morning at 7 am, Vexara scores every open lead on intent — site behavior, CRM history, recency — and hands reps a ranked call list with exactly what to say.', meta1: 'Runs at', val1: '7:00 AM', meta2: 'Signals', val2: '40+' }, { icon: , title: 'Cross-Sell Triggers', desc: 'Vexara reads every support interaction, service record, or lifecycle event for signals a customer is ready for the next purchase — then drafts the outreach. Your team hits send.', meta1: 'Reads', val1: 'CRM + service', meta2: 'Output', val2: 'Drafted msg' } ]; return (
Solutions

Three shifts we run for you.

Vexara sits on top of your existing CRM. Your team keeps its workflow. Your leads stop dying between shifts.

{cards.map((c, i) => (
{c.icon}

{c.title}

{c.desc}

{c.meta1} · {c.val1} {c.meta2} · {c.val2}
))}
); } // ============================================================ // TRANSCRIPT — scroll-driven // ============================================================ const TRANSCRIPT = [ { who: 'agent', name: 'Vexara · as Northland Auto', text: "Hi Marcus, this is Riley calling from Northland Auto — you just submitted an inquiry on the 2024 4Runner. Got a quick second?" }, { who: 'lead', name: 'Marcus (lead)', text: "Yeah — wow, that was fast. I literally just hit submit." }, { who: 'agent', name: 'Vexara', text: "We try to catch you while it's still top of mind. Are you trading something in, or is this an addition?" }, { who: 'lead', name: 'Marcus', text: "Trading my '19 Tacoma. Maybe this weekend if the numbers work." }, { who: 'agent', name: 'Vexara', text: "Got it. Saturday 10:30 works — I can hold a 4Runner with the tow package and have a trade quote ready. Sound good?" }, { who: 'lead', name: 'Marcus', text: "Yeah, lock it in." }, { who: 'agent', name: 'Vexara', text: "Booked. You'll get a confirmation text and Tony, your sales advisor, will meet you at the showroom." } ]; function Transcript() { const [visible, setVisible] = useState(0); const sectionRef = useRef(null); useEffect(() => { const obs = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { // progressively reveal let i = 0; const tick = () => { i++; setVisible(i); if (i < TRANSCRIPT.length) setTimeout(tick, 700); }; tick(); obs.disconnect(); } }); }, { threshold: 0.25 }); if (sectionRef.current) obs.observe(sectionRef.current); return () => obs.disconnect(); }, []); return (
How it runs

A real call, on tape.

Vexara handles the call as your business — never as “Vexara.” Warm, regionally neutral, no robotic latency. Every call is logged, transcribed, and synced back to your CRM with sentiment, objections, and the booked datetime.

Time to first word
540 ms
Voice model
Custom · regional
Outcome
Test-drive booked
CRM update
Auto-logged
Conversation #VX-2451 · live ● recording
{TRANSCRIPT.map((b, i) => (
{b.name} {b.text}
))}
); } // ============================================================ // STATS BAND // ============================================================ function useCountUp(target, durationMs = 1400) { // Count-up that respects reduced-motion + only animates clean integers. // Non-numeric targets (e.g. "<1") pass through unchanged. Returns [value, ref]. const ref = useRef(null); const numeric = /^\d+$/.test(target); const [val, setVal] = useState(numeric ? 0 : target); useEffect(() => { if (!numeric) return; const reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (reduce) { setVal(parseInt(target, 10)); return; } const node = ref.current; if (!node) return; let raf = 0; let started = false; const goal = parseInt(target, 10); const obs = new IntersectionObserver((entries) => { entries.forEach(e => { if (!e.isIntersecting || started) return; started = true; const t0 = performance.now(); const tick = (now) => { const t = Math.min(1, (now - t0) / durationMs); const eased = 1 - Math.pow(1 - t, 3); // ease-out cubic setVal(Math.round(goal * eased)); if (t < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); obs.disconnect(); }); }, { threshold: 0.4 }); obs.observe(node); return () => { obs.disconnect(); cancelAnimationFrame(raf); }; }, [target, numeric, durationMs]); return [val, ref]; } function StatCell({ num, unit, label }) { const [val, ref] = useCountUp(num); return (
{val}{unit}
{label}
); } function Stats() { const stats = [ { num: '60', unit: 's', label: 'Avg. callback latency after a lead submits' }, { num: '3', unit: '×', label: 'More after-hours leads converting to bookings' }, { num: '42', unit: '%', label: 'Of after-hours leads rescued from cold-lead queue' }, { num: '<1', unit: 'hr', label: 'Typical integration time on major CRMs' } ]; return (
Numbers Illustrative — pending public case studies
{stats.map((s, i) => ( ))}
); } // ============================================================ // INDUSTRIES // ============================================================ function Industries() { const list = [ { icon: , title: 'Auto Dealerships', desc: 'After-hours form submissions, morning ISM call lists, service-to-sales trade-in triggers.', stack: 'VinSolutions · DealerSocket · Elead', badge: 'Flagship', flagship: true, href: '/industries/auto-dealerships/' }, { icon: , title: 'Real Estate Brokerages', desc: 'Vexara qualifies prospects, confirms the listing is still active, books showings into the agent\u2019s calendar.', stack: 'Follow Up Boss · kvCORE · Sierra', badge: 'Active build', href: '/industries/real-estate/' }, { icon: , title: 'Home Services (HVAC, Roofing, Solar)', desc: 'Quote requests get a live callback in 60 seconds. Scheduled consultations land in dispatch with full intake captured.', stack: 'ServiceTitan · Housecall · Jobber', badge: 'Active build', href: '/industries/home-services/' }, { icon: , title: 'Med Spas & Aesthetic Practices', desc: 'Consultation requests booked while the prospect is still on your site. Treatment-history-driven recall outreach.', stack: 'Boulevard · Mindbody · Aesthetic Record', badge: 'Active build', href: '/industries/med-spas/' } ]; return (
Industries

Built for businesses that live and die on fast follow-up.

If a missed call at 7 pm is a missed sale, Vexara is for you.

{list.map((i, idx) => (
{i.icon}

{i.title}

{i.desc}

{i.stack}
{i.badge}
))}
); } // ============================================================ // ROI CALCULATOR // ============================================================ function ROI() { const [leads, setLeads] = useState(400); const [acv, setAcv] = useState(2400); const [baseline, setBaseline] = useState(8); // Vexara rescue lift: ~3x baseline conversion on after-hours leads (~40% of leads) // Baseline is current conversion %; after-hours portion = 40%; lifted by 3x but capped. const afterHoursShare = 0.40; const liftedConversion = Math.min(baseline * 3, 60); // % const recoveredLeads = leads * afterHoursShare * ((liftedConversion - baseline) / 100); const monthlyRevenue = recoveredLeads * acv; const annualRevenue = monthlyRevenue * 12; const fmtMoney = (n) => '$' + Math.round(n).toLocaleString(); return (
ROI calculator

What does a 60-second response actually return?

Drag the inputs to your numbers. The output assumes ~40% of inbound leads arrive after hours and Vexara converts them at 3× your current baseline.

setLeads(+e.target.value)} />
setAcv(+e.target.value)} />
setBaseline(+e.target.value)} />
How it's calculated: 40% of your leads arrive after hours. Vexara converts those at 3× your current rate. The delta is incremental revenue Vexara captures without changing your team's workflow.
Estimated incremental revenue
{fmtMoney(annualRevenue)}/yr
≈ {fmtMoney(monthlyRevenue)} / month from rescued after-hours leads
Recovered leads / mo
{Math.round(recoveredLeads)}
Lifted conversion
{liftedConversion}%
); } // ============================================================ // TESTIMONIAL // ============================================================ function Testimonial() { return (
“We used to lose every lead that came in after 6 pm. Now they’re booked before our BDC opens. The math is unreal — Vexara paid for itself the first weekend.” GM · 9-rooftop dealership group · Midwest
); } // ============================================================ // FINAL CTA // ============================================================ function FinalCTA() { return (

See Vexara running against a live CRM.

20-minute walkthrough — your stack, your flow, your exact integration path mapped out.

Book a demo See how it works
); } // ============================================================ // FOOTER // ============================================================ function Footer() { return ( ); } // Export Object.assign(window, { Nav, Hero, LogosBand, Shifts, Transcript, Stats, Industries, ROI, Testimonial, FinalCTA, Footer, Logo });