/* global React, Icon, useReveal, Logo, EmailCapture, CountUp */ const { useState: useS, useEffect: useE, useRef: useR } = React; /* ─── Navbar ─────────────────────────────────────────────────── */ function Navbar() { const [scrolled, setScrolled] = useS(false); const [menuOpen, setMenuOpen] = useS(false); useE(() => { const onScroll = () => setScrolled(window.scrollY > 24); onScroll(); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); const closeMenu = () => setMenuOpen(false); return ( <> {/* Mobile menu */} ); } /* ─── Sticky mobile CTA bar ──────────────────────────────────── */ function StickyCTA() { const [visible, setVisible] = useS(false); useE(() => { const onScroll = () => setVisible(window.scrollY > 500); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); const scrollToWaitlist = () => { const el = document.getElementById('waitlist'); if (el) el.scrollIntoView({ behavior: 'smooth', block: 'center' }); }; return (
Join 238 on the waitlist Early access · First 90 days free
); } /* ─── Hero ───────────────────────────────────────────────────── */ function Hero() { const ref = useReveal(); return (
); } function PhoneMock() { return (
Live · Practice mode
02:14
SR
Sarah Reyes VP Ops · LogiCore
Look, I've got two minutes. What's this about?
Totally fair — I'll be quick. We help ops teams cut routing time by ~30%. Worth a 15-min look?
We already use Lattix for that. Why would I switch?
Honest answer — most teams don't. But the ones on Lattix tell us…
Live coach Nice acknowledge. Now anchor the value — quantify "30%."
); } /* ─── Logo strip ─────────────────────────────────────────────── */ function LogoStrip() { return (
Where our beta users practice before pitching
); } /* ─── Features ───────────────────────────────────────────────── */ function Features() { const ref = useReveal(); const items = [ { icon: 'brain', tone: '', t: 'Prospects that push back', d: "Not a chatbot. Real objections, gatekeepers, awkward silences, the occasional hang-up. Your reps get reps." }, { icon: 'sparkle', tone: 'warm', t: 'Live AI coach', d: "A whisper in your ear — anchoring value, calling out filler words, suggesting better questions. Without judgement." }, { icon: 'target', tone: 'mint', t: 'Score every call', d: "Confidence, clarity, listening ratio, objection handling. See exactly where you tighten up — and where you shine." }, { icon: 'phone', tone: '', t: 'Industry-tuned scripts', d: "Cold calling scripts for SaaS, real estate, financial advisors, B2B sales, recruiting, and agencies. Pre-loaded ICPs and openers, fully editable." }, { icon: 'trending', tone: 'warm', t: 'Progress that compounds', d: "Daily streak, weekly recap, monthly improvement curve. The graph goes up — because you do." }, { icon: 'shield', tone: 'mint', t: 'Practice in private', d: "Nobody hears your worst attempts. Tank a call, tank ten — only you see the replay. Then you go again." }, ]; return (
Why ColdCallable

Reps build skill.
Books don't.

Read every script in the world. The only way to get good at calling is to call. So we built a way to call — without burning a single real lead.

{items.map((it, i) => (

{it.t}

{it.d}

))}
); } /* ─── How it works ───────────────────────────────────────────── */ function HowItWorks() { const ref = useReveal(); return (
How it works

Three steps. One real skill.

STEP 01

Pick your prospect

Choose an industry, persona, and difficulty. Get a real-feeling ICP with goals, objections, and a name.

STEP 02

Make the call

Pick up. They answer. Talk out loud, in real time, with no script to hide behind — just like a real call.

STEP 03

Review & rerun

Get a scored replay with line-by-line feedback. Rerun the call, adjust one thing, watch the score climb.

); } /* ─── Live demo ──────────────────────────────────────────────── */ const PERSONAS = [ { id: 'sarah', name: 'Sarah Reyes', role: 'VP Ops · LogiCore', diff: 3, color: ['#4DA8FF','#2B7FD9'], initials: 'SR', lines: [ { who: 'prospect', t: "Look, I've got 90 seconds. What is this?" }, { who: 'you', t: "Fair — quick: we cut routing latency ~30% for ops teams your size. Worth a 15-min look next week?" }, { who: 'prospect', t: "We use Lattix. Why would I rip and replace?" }, ], chips: [{ k: 'good', t: 'Strong opener' }, { k: 'warn', t: 'Quantify the 30%' }, { k: 'good', t: 'Asked for time' }], }, { id: 'marcus', name: 'Marcus Hale', role: 'CTO · Brightloop', diff: 4, color: ['#FF7A3C','#E35E1F'], initials: 'MH', lines: [ { who: 'prospect', t: "How'd you get this number?" }, { who: 'you', t: "Cold, honestly. I'll be quick — saw you ship the v3 release, congrats. Two-minute reason I'm calling?" }, { who: 'prospect', t: "Go." }, ], chips: [{ k: 'good', t: 'Disarmed gatekeep' }, { k: 'good', t: 'Specific compliment' }, { k: 'warn', t: 'Lead with value next' }], }, { id: 'priya', name: 'Priya Shah', role: 'Founder · Vera Health', diff: 2, color: ['#3ECF8E','#2B9D6A'], initials: 'PS', lines: [ { who: 'prospect', t: "Sure, who is this?" }, { who: 'you', t: "Hi Priya — Alex from ColdCallable. We help founder-led teams book 3x more discovery calls. Bad time?" }, { who: 'prospect', t: "Always. But go ahead — what do you actually do?" }, ], chips: [{ k: 'good', t: 'Named the prospect' }, { k: 'good', t: 'Permission framing' }, { k: 'warn', t: 'Skip company name' }], }, ]; function LiveDemo() { const ref = useReveal(); const [active, setActive] = useS('sarah'); const p = PERSONAS.find((x) => x.id === active); return (
Live preview

Pick a prospect.
Get on the phone.

Six industries. Forty-plus personas. Each one trained on real call data so the silences feel real — and so do the wins.

{PERSONAS.map((pp) => ( ))}
{p.name}
{p.role}
{p.lines.map((l, i) => (
{l.who === 'you' ? 'You' : p.name.split(' ')[0]}
{l.t}
))}
{p.chips.map((c, i) => ( {c.t} ))}
); } /* ─── Stats ──────────────────────────────────────────────────── */ function Stats() { const ref = useReveal(); return (
By the numbers

The reps add up.

{[ { v: 18423, s: '+', l: 'AI calls completed by beta users' }, { v: 3, s: '.2x',l: 'More booked meetings (closed beta)' }, { v: 92, s: '%', l: 'Say they feel ready for their first real call' }, { v: 41, s: '', l: 'Countries our waitlist spans' }, ].map((s, i) => (
{s.l}
))}
); } /* ─── Testimonials ───────────────────────────────────────────── */ const TESTI = [ { q: "Booked five meetings my first week back. The AI prospect that hangs up on me — that's the one that fixed my opener.", n: 'Maya Okafor', r: 'AE · Boston', c: ['#4DA8FF','#2B7FD9'], i: 'MO' }, { q: "I'm 23 and terrified of the phone. This took me from 'I literally can't' to making 40 calls a day without sweating.", n: 'Jordan Reyes', r: 'SDR · Toronto', c: ['#FF7A3C','#E35E1F'], i: 'JR' }, { q: "The replay is brutal in the best way. I had no idea I said 'basically' 17 times in a four-minute call.", n: 'Kenji Tanaka', r: 'Founder · Tokyo', c: ['#3ECF8E','#2B9D6A'], i: 'KT' }, { q: "Cheaper than a coach. Better than a script. Available at 11pm when I actually have time to practice.", n: 'Priya Menon', r: 'Recruiter · Bangalore', c: ['#FFB547','#E89515'], i: 'PM' }, { q: "Did 80 practice calls before my onboarding even started. Showed up day one already past the awkward phase.", n: 'Lena Schroeder', r: 'BDR · Berlin', c: ['#4DA8FF','#3ECF8E'], i: 'LS' }, { q: "My manager asked why my conversion suddenly doubled. Truthfully? I stopped being afraid of the call.", n: 'Diego Alvarez', r: 'AE · Mexico City', c: ['#FF5A5A','#FF7A3C'], i: 'DA' }, ]; function Testimonials() { const ref = useReveal(); const list = [...TESTI, ...TESTI]; return (
From the beta

They were terrified.
Now they pick up first.

{list.map((t, i) => (
{[0,1,2,3,4].map((n) => )}
"{t.q}"
{t.n}
{t.r}
))}
); } /* ─── FAQ ────────────────────────────────────────────────────── */ const FAQS = [ { q: "Do I actually have to talk out loud?", a: "Yes — and that's the point. You can type during onboarding, but practice calls use your voice. The whole reason real cold calls are scary is because you're speaking. We rebuild that muscle." }, { q: "What cold calling strategies does ColdCallable teach?", a: "We focus on proven B2B cold calling strategies: pattern interrupt openers, objection handling, permission-based framing, and value-anchoring. Each call is scored on clarity, listening ratio, and close — so you see which cold calling strategies actually work for you." }, { q: "Does it work for real estate cold calling or financial advisor prospecting?", a: "Yes. ColdCallable ships with personas and scripts tuned for real estate cold calling, financial advisor prospecting, and B2B lead generation. Pick your industry, choose a prospect, and practice the exact sales calls you'll actually make." }, { q: "Is this just ChatGPT in a phone skin?", a: "No. We use voice-first models trained on real B2B and B2C call transcripts, paired with persona logic — moods, time pressure, gatekeeper layers, hang-up triggers. It feels like a call because it sounds like one." }, { q: "When does it launch?", a: "Closed beta is live. Public launch mid-2026. Join the waitlist and we'll let you in by cohort — beginners first." }, { q: "How much will it cost?", a: "Beta is free. Launch pricing starts at the cost of a couple of coffees a month — and waitlist members get the first 90 days on us." }, { q: "Will I sound like a robot reading a script?", a: "Opposite. We score you down for sounding scripted. The goal is natural, listening, present. Boring is the death of a cold call." }, { q: "Is my voice data private?", a: "Yes. Calls are stored only for your own replay, encrypted, and deleted on request. We never train shared models on individual voice recordings." }, ]; function FAQ() { const [open, setOpen] = useS(0); const ref = useReveal(); return (
Common questions

The stuff you'd ask
if we picked up.

{FAQS.map((f, i) => (
{f.a}
))}
); } /* ─── Final CTA ──────────────────────────────────────────────── */ function FinalCTA() { const ref = useReveal(); return (
Last thing

Stop reading about
cold calling.
Make the call.

Get early access, weekly playbooks, and the cold-call breakdowns nobody else publishes.

One email a week. Unsubscribe in one click. We never sell your data.

); } /* ─── Footer ─────────────────────────────────────────────────── */ function Footer() { return ( ); } Object.assign(window, { Navbar, StickyCTA, Hero, LogoStrip, Features, HowItWorks, LiveDemo, Stats, Testimonials, FAQ, FinalCTA, Footer });