/* global React, Reveal, ArrowGlyph */ const { useState: useS2, useEffect: useE2, useRef: useR2 } = React; // ========================================================= // BEFORE / AFTER drag-to-compare slider // ========================================================= function PackCompare({ before, after, beforeAlt, afterAlt, stamp }) { return (
{beforeAlt Before
{afterAlt After
{stamp && ( )}
); } // ========================================================= // CASE STUDIES — hover-reveal cards // ========================================================= function Cases() { const cases = [ { cat: "First-time sellers", big: ["90% ", "in 90 days"], name: "Private students · first sale", viz: "milestone", milestones: ["enrolled", "picked", "launched", "first sale"], start: "Today", toast: "$39.99", sparkFrom: "day 0", sparkTo: "first 90 days", headline: "9 in 10 of my private students make their first sale within 90 days.", body: "Most people never clear the starting line — the research loops, the second-guessing, the fear of placing that first order. Working with me one-on-one, nine in ten private students push through and make a real first sale inside 90 days. The first sale is the hardest one; everything after it is just repeating what already worked.", stats: [["90%", "make a first sale"], ["≤ 90 days", "to get there"]], }, { cat: "Client results", big: ["", "90-day results"], name: "8 clients · coaching + consulting", viz: "leaderboard", board: [ { amt: "$73K", pct: 100, tag: "Consulting" }, { amt: "$32K", pct: 44, tag: "Consulting" }, { amt: "$16K", pct: 22 }, { amt: "$15K", pct: 21 }, { amt: "$14K", pct: 19 }, { amt: "$14K", pct: 19 }, { amt: "$13K", pct: 18 }, { amt: "$12K", pct: 16 }, ], sparkFrom: "Top wins", sparkTo: "top $73K", headline: "Eight client wins on the board — coaching launches and consulting clients, top cleared $73K in 90 days.", body: "Same operating system across both sides of the house: a product that survives the research filter, a listing built around one sharp angle, and ad spend that doesn't bleed. The names change — the playbook doesn't.", stats: [["$73K", "top client win"], ["8 clients", "on the board"]], }, { cat: "Who I've helped", big: ["", "20 countries"], name: "From moms to pilots to doctors", viz: "reach", flags: [ { code: "nz", name: "New Zealand" }, { code: "au", name: "Australia" }, { code: "us", name: "United States" }, { code: "ca", name: "Canada" }, { code: "gb", name: "United Kingdom" }, { code: "es", name: "Spain" }, { code: "de", name: "Germany" }, { code: "fr", name: "France" }, { code: "lv", name: "Latvia" }, { code: "in", name: "India" }, { code: "cn", name: "China" }, { code: "lk", name: "Sri Lanka" }, { code: "be", name: "Belgium" }, { code: "ae", name: "United Arab Emirates" }, { code: "pl", name: "Poland" }, { code: "cz", name: "Czechia" }, { code: "ua", name: "Ukraine" }, { code: "hr", name: "Croatia" }, { code: "sg", name: "Singapore" }, { code: "za", name: "South Africa" }, ], roles: ["Moms", "Pilots", "Doctors", "Nurses", "Teachers", "Police", "Students", "Salespeople", "Service staff", "Scientists", "Photographers", "Architects", "Software engineers", "Retirees"], sparkFrom: "20 countries", sparkTo: "3,000+ students", headline: "Students in 20 countries — moms, pilots, doctors, teachers, retirees.", body: "This was never built for a special type of person. The people who get it working come from every walk of life and every timezone — full-time parents, airline pilots, ER doctors, tradies, retirees. The common thread isn't background. It's following the steps in order and not quitting early.", stats: [["20", "countries"], ["3,000+", "students taught"]], }, ]; return (
Case studies

Wins that are
actually mine to claim.

Three numbers from real 1:1 clients, group students, and consulting clients — first sales, top wins, and the range of people behind them. Hover any card for the story behind the number.
{cases.map((c, i) => (
{c.cat}
{c.img && (
)} {c.viz === "spark" && (
{c.sparkFrom || "Day 0"} {c.sparkTo || "+90 days"}
)} {c.viz === "leaderboard" && (
{c.board.map((b, j) => (
{j + 1} {b.amt} {b.tag || ""}
))}
{c.sparkFrom} {c.sparkTo}
)} {c.viz === "reach" && (
{c.flags.map((f, j) => ( {f.name} ))}
{c.roles.map((r, j) => ( {r} ))}
{c.sparkFrom} {c.sparkTo}
)} {c.viz === "quote" && (

{c.quote}

{c.quoteCite}
)} {c.viz === "milestone" && (
{c.milestones && (
{c.milestones.map((m, i) => ( {m} ))}
)}
{c.start && ( )} {c.toast && ( )}
{c.sparkFrom} {c.sparkTo}
)} {c.viz === "stamp" && (
{c.productImg ? (
{c.productAlt
— {c.stampHead} —
{c.stampMain}
{c.stampFoot}
) : (
— {c.stampHead} —
{c.stampMain}
{c.stampFoot}
)}
{c.sparkFrom && (
{c.sparkFrom} {c.sparkTo}
)}
)} {c.viz === "compare" && (
{c.sparkFrom && (
{c.sparkFrom} {c.sparkTo}
)}
)} {c.viz === "bars" && (() => { const sets = { default: [8, 30, 20, 18, 14, 22, 28, 18, 14, 22, 24, 16, 12, 14, 18, 48, 30, 12, 14, 30, 65, 95, 70, 50], record: [40, 14, 12, 14, 11, 32, 22, 25, 11, 11, 23, 20, 25, 26, 22, 24, 30, 43, 32, 24, 29, 30, 37, 53, 100], }; const heights = sets[c.barSet] || sets.default; const peak = heights.indexOf(Math.max(...heights)); const W = 200, gap = 1.4, n = heights.length; const bw = (W - gap * (n - 1)) / n; return (
{c.sparkFrom} {c.sparkTo}
); })()}
{c.big[0]}{c.big[1]}
{c.name}
{c.cat}

{c.headline}

{c.body}

{c.stats.map((s, j) => (
{s[0]}
{s[1]}
))}
))}
Names shortened where requested. Numbers reported by clients, cross-checked against their seller dashboards — happy to walk through the originals on a call.
); } // ========================================================= // QUIZ — "Which path is right for me?" // ========================================================= function Quiz({ onBook }) { const Q = [ { q: "Where are you on Amazon right now?", opts: [ { label: "Haven't launched yet — still researching products", w: { p: 2, c: 1 } }, { label: "Launched, but doing under $5K/mo", w: { p: 2, c: 2 } }, { label: "Between $5K and $50K/mo, want to scale", w: { p: 1, c: 3 } }, { label: "Doing $50K+/mo, hitting a specific wall", w: { p: 0, c: 3 } }, ], }, { q: "How much time can you put in each week?", opts: [ { label: "10–15 hrs · this is a side bet for now", w: { p: 3, c: 1 } }, { label: "20–30 hrs · serious side project", w: { p: 2, c: 2 } }, { label: "Full time · this is my main thing", w: { p: 1, c: 3 } }, ], }, { q: "What kind of help moves the needle most for you?", opts: [ { label: "Structured curriculum + a cohort to learn alongside", w: { p: 3, c: 0 } }, { label: "Direct feedback on my specific listings, ads, numbers", w: { p: 0, c: 3 } }, { label: "A bit of both — structure plus 1:1 unsticks", w: { p: 2, c: 2 } }, ], }, ]; const [step, setStep] = useS2(0); const [score, setScore] = useS2({ p: 0, c: 0 }); const [done, setDone] = useS2(false); const pick = (opt) => { const ns = { p: score.p + opt.w.p, c: score.c + opt.w.c }; setScore(ns); if (step + 1 >= Q.length) setDone(true); else setStep(step + 1); }; const restart = () => { setStep(0); setScore({ p: 0, c: 0 }); setDone(false); }; let resultTitle, resultBody, primaryCta; if (done) { if (score.c > score.p + 1) { resultTitle = ["Best fit: ", "1:1 Coaching"]; resultBody = "You've got specifics that need specific answers. We'd work weekly, screen-share through your actual catalog, ads and numbers. Best ROI for sellers with traction."; primaryCta = "Book a 1:1 discovery call"; } else if (score.p > score.c + 1) { resultTitle = ["Best fit: ", "The Foundation Cohort"]; resultBody = "12 weeks, small group, every week a deliverable. We compress the first 18 months of selling into a structured build, with me on calls twice a week."; primaryCta = "See cohort dates · book a chat"; } else { resultTitle = ["Best fit: ", "Hybrid track"]; resultBody = "You'd get the most from cohort structure plus 4 private 1:1s along the way. Lets you learn alongside others without losing the personal feedback."; primaryCta = "Talk through the hybrid"; } } return (
2-min fit check

Which path
is right for you?

Three honest questions. You'll get a recommendation — and the option to book a call to talk it through. No email gate.

{Q.map((_, i) => ( ))}
{!done ? ( <>
Question {step + 1} of {Q.length}

{Q[step].q}

{Q[step].opts.map((o, i) => ( ))}
) : (
your fit

{resultTitle[0]}{resultTitle[1]}

{resultBody}

↺ start over
)}
); } Object.assign(window, { Cases, Quiz });