zoe-pitches/no-show-killer/source.html

809 lines
54 KiB
HTML

<html lang="en">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>No-Show Killer &mdash; Business Plan</title>
<style>
:root{
--ink:#0B1210; --surface:#111A16; --card:#15211C; --card-2:#18271F;
--line:rgba(140,180,160,.14); --line-strong:rgba(140,180,160,.28);
--text:#E9F1EC; --muted:#93A79E; --faint:#6F857B;
--emerald:#34D399; --emerald-deep:#10B981; --emerald-glow:#6EE7B7;
--gold:#E7B24C; --gold-soft:#F5D07A;
--coral:#F0796B;
--hero-grad: radial-gradient(120% 90% at 80% -10%, rgba(52,211,153,.16), transparent 55%),
radial-gradient(90% 70% at 5% 0%, rgba(231,178,76,.10), transparent 50%);
--shadow: 0 1px 0 rgba(255,255,255,.03) inset, 0 20px 50px -30px rgba(0,0,0,.7);
--serif:"Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;
--sans:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
--mono:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
}
@media (prefers-color-scheme: light){
:root{
--ink:#F3F7F3; --surface:#FBFDFB; --card:#FFFFFF; --card-2:#F6FAF7;
--line:rgba(20,60,40,.10); --line-strong:rgba(20,60,40,.20);
--text:#0D1613; --muted:#4E625A; --faint:#78897F;
--emerald:#059669; --emerald-deep:#047857; --emerald-glow:#0EA271;
--gold:#A9791F; --gold-soft:#B98A2E; --coral:#C8503F;
--hero-grad: radial-gradient(120% 90% at 80% -10%, rgba(5,150,105,.10), transparent 55%),
radial-gradient(90% 70% at 5% 0%, rgba(169,121,31,.08), transparent 50%);
--shadow: 0 1px 0 rgba(255,255,255,.6) inset, 0 18px 40px -28px rgba(20,60,40,.35);
}
}
:root[data-theme="dark"]{
--ink:#0B1210; --surface:#111A16; --card:#15211C; --card-2:#18271F;
--line:rgba(140,180,160,.14); --line-strong:rgba(140,180,160,.28);
--text:#E9F1EC; --muted:#93A79E; --faint:#6F857B;
--emerald:#34D399; --emerald-deep:#10B981; --emerald-glow:#6EE7B7;
--gold:#E7B24C; --gold-soft:#F5D07A; --coral:#F0796B;
--hero-grad: radial-gradient(120% 90% at 80% -10%, rgba(52,211,153,.16), transparent 55%),
radial-gradient(90% 70% at 5% 0%, rgba(231,178,76,.10), transparent 50%);
--shadow: 0 1px 0 rgba(255,255,255,.03) inset, 0 20px 50px -30px rgba(0,0,0,.7);
}
:root[data-theme="light"]{
--ink:#F3F7F3; --surface:#FBFDFB; --card:#FFFFFF; --card-2:#F6FAF7;
--line:rgba(20,60,40,.10); --line-strong:rgba(20,60,40,.20);
--text:#0D1613; --muted:#4E625A; --faint:#78897F;
--emerald:#059669; --emerald-deep:#047857; --emerald-glow:#0EA271;
--gold:#A9791F; --gold-soft:#B98A2E; --coral:#C8503F;
--hero-grad: radial-gradient(120% 90% at 80% -10%, rgba(5,150,105,.10), transparent 55%),
radial-gradient(90% 70% at 5% 0%, rgba(169,121,31,.08), transparent 50%);
--shadow: 0 1px 0 rgba(255,255,255,.6) inset, 0 18px 40px -28px rgba(20,60,40,.35);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion: reduce){ html{scroll-behavior:auto} *{animation:none !important; transition:none !important} }
body{
margin:0; background:var(--ink); color:var(--text);
font-family:var(--sans); font-size:17px; line-height:1.6;
-webkit-font-smoothing:antialiased; overflow-x:hidden;
}
.wrap{max-width:1080px; margin:0 auto; padding:0 24px}
section{padding:88px 0; border-top:1px solid var(--line)}
h1,h2,h3{font-family:var(--serif); font-weight:600; text-wrap:balance; margin:0}
p{margin:0}
a{color:inherit}
.tnum{font-variant-numeric:tabular-nums}
/* eyebrow / labels */
.eyebrow{font-family:var(--mono); font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:var(--emerald); font-weight:600}
.eyebrow.gold{color:var(--gold)}
.kicker{font-family:var(--mono); font-size:12.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--faint)}
/* top ribbon */
.ribbon{position:sticky; top:0; z-index:40; backdrop-filter:blur(10px);
background:color-mix(in srgb, var(--ink) 82%, transparent);
border-bottom:1px solid var(--line)}
.ribbon .wrap{display:flex; align-items:center; gap:16px; padding-top:14px; padding-bottom:14px}
.brand{font-family:var(--serif); font-weight:700; font-size:18px; letter-spacing:-.01em; display:flex; align-items:center; gap:10px}
.spark{width:11px;height:11px;border-radius:3px;background:var(--emerald);box-shadow:0 0 14px var(--emerald);display:inline-block}
.ribbon .status{margin-left:auto; display:flex; gap:8px; flex-wrap:wrap}
.pill{font-family:var(--mono); font-size:11.5px; letter-spacing:.04em; padding:5px 10px; border-radius:999px; border:1px solid var(--line-strong); color:var(--muted); display:inline-flex; align-items:center; gap:7px; white-space:nowrap}
.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--emerald)}
.pill.live .dot{background:var(--emerald); box-shadow:0 0 8px var(--emerald)}
.pill.warn{color:var(--gold)} .pill.warn .dot{background:var(--gold)}
a.pill.pdflink{text-decoration:none; color:var(--emerald); border-color:color-mix(in srgb,var(--emerald) 40%,var(--line-strong)); transition:background .15s}
a.pill.pdflink:hover{background:color-mix(in srgb,var(--emerald) 12%,transparent)}
/* market TAM/SAM/SOM */
.mkt{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:30px}
@media(max-width:720px){ .mkt{grid-template-columns:1fr} }
.mkt .m{background:var(--card); border:1px solid var(--line); border-radius:14px; padding:24px; box-shadow:var(--shadow)}
.mkt .m .t{font-family:var(--mono); font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--emerald)}
.mkt .m.sam .t{color:var(--gold)} .mkt .m.som .t{color:var(--coral)}
.mkt .m .v{font-family:var(--serif); font-weight:700; font-size:clamp(30px,4.4vw,40px); letter-spacing:-.02em; margin:10px 0 6px}
.mkt .m .d{color:var(--muted); font-size:14px; line-height:1.5} .mkt .m .d b{color:var(--text); font-weight:600}
/* comparison table */
.tblwrap{overflow-x:auto; margin-top:30px; border:1px solid var(--line); border-radius:14px; -webkit-overflow-scrolling:touch}
.tbl{width:100%; border-collapse:collapse; font-size:14px; min-width:660px}
.tbl th,.tbl td{padding:13px 16px; text-align:left; border-bottom:1px solid var(--line); vertical-align:top}
.tbl thead th{font-family:var(--mono); font-size:10.5px; letter-spacing:.05em; text-transform:uppercase; color:var(--faint); font-weight:600; background:var(--card-2); line-height:1.35}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl td:first-child,.tbl th:first-child{color:var(--text); font-weight:600; min-width:220px}
.tbl .us{background:color-mix(in srgb,var(--emerald) 9%,transparent)}
.tbl thead th.us{color:var(--emerald); background:color-mix(in srgb,var(--emerald) 15%,transparent)}
.tbl .y{color:var(--emerald); font-weight:600} .tbl .n{color:var(--faint)} .tbl .p{color:var(--gold)}
.illus-note{margin-top:16px; font-family:var(--mono); font-size:12px; color:var(--faint); letter-spacing:.02em}
.price-amt{font-family:var(--serif)} .price-amt .per{font-size:15px; color:var(--faint); font-weight:400; font-family:var(--sans)}
@media(max-width:720px){ .ribbon .status .pill.hideSm{display:none} }
/* hero */
.hero{background:var(--hero-grad); border-top:none; padding-top:76px; padding-bottom:64px; position:relative; overflow:hidden}
#confetti{position:absolute; inset:0; width:100%; height:100%; pointer-events:none; z-index:1}
.hero .wrap{position:relative; z-index:2}
.hero h1{font-size:clamp(38px,6.4vw,74px); line-height:1.02; letter-spacing:-.02em; max-width:16ch}
.hero .lede{margin-top:24px; font-size:clamp(18px,2.2vw,22px); color:var(--muted); max-width:56ch; line-height:1.5}
.hero .em{color:var(--emerald)}
.heroStat{margin-top:44px; display:flex; align-items:flex-end; gap:28px; flex-wrap:wrap}
.bigmoney{font-family:var(--serif); font-weight:700; font-size:clamp(52px,10vw,104px); line-height:.9; letter-spacing:-.03em;
background:linear-gradient(180deg,var(--emerald-glow),var(--emerald-deep)); -webkit-background-clip:text; background-clip:text; color:transparent}
.heroStat .cap{font-family:var(--mono); font-size:13px; letter-spacing:.06em; color:var(--faint); max-width:26ch; line-height:1.5; padding-bottom:8px}
.heroStat .cap b{color:var(--text); font-weight:600}
/* generic grid */
.grid{display:grid; gap:18px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
@media(max-width:900px){ .g3,.g4{grid-template-columns:repeat(2,1fr)} }
@media(max-width:620px){ .g2,.g3,.g4{grid-template-columns:1fr} }
.lead{font-size:clamp(24px,3vw,30px); font-family:var(--serif); line-height:1.28; letter-spacing:-.01em; max-width:24ch}
.sub{color:var(--muted); max-width:60ch; margin-top:18px}
.card{background:var(--card); border:1px solid var(--line); border-radius:16px; padding:24px; box-shadow:var(--shadow)}
.card h3{font-size:20px; letter-spacing:-.01em}
.card p{color:var(--muted); margin-top:9px; font-size:15.5px; line-height:1.55}
.card .tag{font-family:var(--mono); font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--emerald); display:block; margin-bottom:12px}
.card .tag.gold{color:var(--gold)}
/* problem stat band */
.statband{display:grid; grid-template-columns:repeat(3,1fr); gap:0; border:1px solid var(--line); border-radius:16px; overflow:hidden; background:var(--card)}
.statband > div{padding:28px 26px; border-right:1px solid var(--line)}
.statband > div:last-child{border-right:none}
.statband .n{font-family:var(--serif); font-weight:700; font-size:clamp(34px,5vw,48px); letter-spacing:-.02em; color:var(--text)}
.statband .n .u{color:var(--gold); font-size:.6em}
.statband .l{color:var(--muted); font-size:14.5px; margin-top:8px; line-height:1.45}
@media(max-width:720px){ .statband{grid-template-columns:1fr} .statband>div{border-right:none;border-bottom:1px solid var(--line)} .statband>div:last-child{border-bottom:none} }
/* how it works &mdash; steps */
.flow{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-top:12px}
.step{background:var(--card); border:1px solid var(--line); border-radius:14px; padding:20px; position:relative}
.step .no{font-family:var(--mono); font-size:12px; color:var(--emerald); letter-spacing:.1em}
.step h4{font-family:var(--serif); font-weight:600; font-size:17px; margin:12px 0 6px}
.step p{color:var(--muted); font-size:14px; line-height:1.5; margin:0}
.step .arrow{position:absolute; right:-11px; top:50%; transform:translateY(-50%); color:var(--line-strong); z-index:2; font-size:18px}
@media(max-width:900px){ .flow{grid-template-columns:repeat(2,1fr)} .step .arrow{display:none} }
@media(max-width:520px){ .flow{grid-template-columns:1fr} }
/* capability groups */
.capgroup{margin-top:28px}
.capgroup > .h{display:flex; align-items:baseline; gap:14px; margin-bottom:14px}
.capgroup > .h .ttl{font-family:var(--serif); font-size:19px; font-weight:600}
.capgroup > .h .meta{font-family:var(--mono); font-size:12px; color:var(--faint); letter-spacing:.05em}
.caplist{display:grid; grid-template-columns:repeat(2,1fr); gap:14px}
@media(max-width:620px){ .caplist{grid-template-columns:1fr} }
.cap{border:1px solid var(--line); border-radius:13px; padding:18px 20px; background:var(--card-2); display:flex; gap:14px}
.cap .mk{width:34px;height:34px;flex:0 0 34px;border-radius:9px;display:grid;place-items:center;background:color-mix(in srgb,var(--emerald) 16%,transparent);color:var(--emerald);font-size:18px}
.cap.g .mk{background:color-mix(in srgb,var(--gold) 18%,transparent);color:var(--gold)}
.cap h4{font-size:16px; margin:0 0 4px; font-family:var(--sans); font-weight:650}
.cap p{color:var(--muted); font-size:14px; line-height:1.5; margin:0}
/* status board */
.board{display:grid; grid-template-columns:1.3fr 1fr; gap:18px}
@media(max-width:820px){ .board{grid-template-columns:1fr} }
.statusrow{display:flex; align-items:center; gap:12px; padding:13px 0; border-bottom:1px dashed var(--line)}
.statusrow:last-child{border-bottom:none}
.statusrow .ic{width:22px;height:22px;flex:0 0 22px;border-radius:6px;display:grid;place-items:center;font-size:13px;font-weight:700}
.ic.ok{background:color-mix(in srgb,var(--emerald) 20%,transparent); color:var(--emerald)}
.ic.gate{background:color-mix(in srgb,var(--gold) 22%,transparent); color:var(--gold)}
.statusrow .tx{flex:1}
.statusrow .tx b{font-weight:650; font-size:15.5px}
.statusrow .tx span{display:block; color:var(--muted); font-size:13.5px; margin-top:2px}
.statusrow .tag{font-family:var(--mono); font-size:11px; color:var(--faint); letter-spacing:.04em}
.metrics{display:grid; grid-template-columns:1fr 1fr; gap:1px; background:var(--line); border:1px solid var(--line); border-radius:14px; overflow:hidden}
.metrics > div{background:var(--card); padding:20px}
.metrics .k{font-family:var(--serif); font-weight:700; font-size:30px; letter-spacing:-.02em; color:var(--emerald)}
.metrics .k.gold{color:var(--gold)}
.metrics .m{font-family:var(--mono); font-size:11.5px; text-transform:uppercase; letter-spacing:.08em; color:var(--faint); margin-top:6px}
/* business case */
.econ{display:grid; grid-template-columns:1fr 1fr; gap:18px; align-items:stretch}
@media(max-width:820px){ .econ{grid-template-columns:1fr} }
.econ .panel{background:linear-gradient(180deg,var(--card-2),var(--card)); border:1px solid var(--line-strong); border-radius:18px; padding:28px}
.econ .panel .eq{font-family:var(--mono); color:var(--muted); font-size:14px; line-height:2}
.econ .panel .eq .hi{color:var(--emerald); font-weight:600}
.econ .panel .eq .hg{color:var(--gold); font-weight:600}
.econ .big{font-family:var(--serif); font-weight:700; font-size:clamp(30px,4.4vw,42px); letter-spacing:-.02em; margin-top:14px; line-height:1.1}
.tamrow{display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-top:22px}
@media(max-width:720px){ .tamrow{grid-template-columns:repeat(2,1fr)} }
.tam{border:1px dashed var(--line-strong); border-radius:12px; padding:16px}
.tam .seg{font-weight:650; font-size:15px}
.tam .why{color:var(--muted); font-size:13px; margin-top:4px}
/* the ask / phases */
.phases{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:12px}
@media(max-width:820px){ .phases{grid-template-columns:1fr} }
.phase{border:1px solid var(--line); border-radius:16px; padding:24px; background:var(--card)}
.phase .when{font-family:var(--mono); font-size:12px; letter-spacing:.08em; color:var(--gold); text-transform:uppercase}
.phase h3{font-size:19px; margin:10px 0 12px}
.phase ul{margin:0; padding:0; list-style:none}
.phase li{position:relative; padding-left:22px; color:var(--muted); font-size:14.5px; margin:9px 0; line-height:1.45}
.phase li::before{content:""; position:absolute; left:0; top:9px; width:8px; height:8px; border-radius:50%; background:var(--emerald)}
.phase.next{border-color:var(--emerald); box-shadow:0 0 0 1px var(--emerald) inset, 0 24px 50px -34px var(--emerald-deep)}
.close{background:var(--hero-grad); text-align:center}
.close h2{font-size:clamp(28px,4.2vw,44px); letter-spacing:-.02em; max-width:20ch; margin:0 auto}
.close p{color:var(--muted); margin:20px auto 0; max-width:52ch}
.foot{border-top:1px solid var(--line); padding:34px 0; color:var(--faint); font-family:var(--mono); font-size:12.5px; letter-spacing:.03em}
.foot .wrap{display:flex; justify-content:space-between; gap:16px; flex-wrap:wrap}
.callout{margin-top:20px; border-left:3px solid var(--gold); background:color-mix(in srgb,var(--gold) 8%,transparent); padding:14px 18px; border-radius:0 10px 10px 0; color:var(--muted); font-size:14.5px}
.callout b{color:var(--text)}
/* ribbon nav */
.nav{display:flex; gap:22px; margin:0 auto}
.nav a{font-family:var(--mono); font-size:12.5px; letter-spacing:.04em; color:var(--muted); text-decoration:none; padding:4px 0; border-bottom:1px solid transparent; transition:color .18s, border-color .18s}
.nav a:hover{color:var(--text); border-bottom-color:var(--emerald)}
@media(max-width:860px){ .nav{display:none} }
/* illustrative tag on hero number */
.illus{font-family:var(--mono); font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--faint); border:1px solid var(--line-strong); border-radius:999px; padding:3px 8px; align-self:flex-start; margin-top:6px}
/* product preview mock */
.demo{background:linear-gradient(180deg, color-mix(in srgb,var(--emerald) 6%,var(--surface)), var(--surface))}
.device{margin-top:32px; border:1px solid var(--line-strong); border-radius:18px; background:var(--card); box-shadow:0 40px 80px -50px rgba(0,0,0,.8), var(--shadow); overflow:hidden}
.topbar{display:flex; align-items:center; gap:8px; padding:13px 16px; border-bottom:1px solid var(--line); background:var(--card-2)}
.topbar .dots{display:flex; gap:6px}
.topbar .dots i{width:10px;height:10px;border-radius:50%;display:block;background:var(--line-strong)}
.topbar .addr{margin-left:10px; font-family:var(--mono); font-size:12px; color:var(--faint); letter-spacing:.02em}
.topbar .tab{margin-left:auto; font-family:var(--mono); font-size:11.5px; color:var(--emerald); border:1px solid var(--line-strong); border-radius:6px; padding:3px 9px}
.screen{padding:26px; display:grid; grid-template-columns:1.4fr 1fr; gap:24px}
@media(max-width:760px){ .screen{grid-template-columns:1fr; padding:20px} }
.roihead{display:flex; align-items:baseline; gap:14px; flex-wrap:wrap}
.roihead .big{font-family:var(--serif); font-weight:700; font-size:clamp(40px,7vw,60px); letter-spacing:-.03em; line-height:.95;
background:linear-gradient(180deg,var(--emerald-glow),var(--emerald-deep)); -webkit-background-clip:text; background-clip:text; color:transparent}
.delta{font-family:var(--mono); font-size:13px; color:var(--emerald); background:color-mix(in srgb,var(--emerald) 15%,transparent); border-radius:999px; padding:4px 10px; font-weight:600}
.roihead .lbl{font-family:var(--mono); font-size:11.5px; text-transform:uppercase; letter-spacing:.08em; color:var(--faint); width:100%; margin-top:8px}
.chart{display:flex; align-items:flex-end; gap:5px; height:96px; margin-top:22px; padding-top:8px; border-top:1px solid var(--line)}
.chart .bar{flex:1; background:linear-gradient(180deg,var(--emerald),var(--emerald-deep)); border-radius:4px 4px 2px 2px; min-height:4px; opacity:.9}
.chart .bar.peak{background:linear-gradient(180deg,var(--gold-soft),var(--gold))}
.chartcap{font-family:var(--mono); font-size:11px; color:var(--faint); margin-top:8px; letter-spacing:.04em}
.panelttl{font-family:var(--mono); font-size:11px; text-transform:uppercase; letter-spacing:.09em; color:var(--faint); margin-bottom:12px}
.winfeed{display:flex; flex-direction:column; gap:10px}
.win{display:flex; align-items:center; gap:11px; font-size:14px}
.win .em{font-size:15px}
.win .amt{margin-left:auto; font-family:var(--mono); font-weight:600; color:var(--emerald)}
.win .desc{color:var(--muted)}
.radarmini{margin-top:22px; padding-top:18px; border-top:1px solid var(--line)}
.rrow{display:flex; align-items:center; gap:10px; padding:7px 0; font-size:14px}
.rrow .nm{color:var(--text)} .rrow .tm{color:var(--faint); font-size:12.5px}
.rchip{margin-left:auto; font-family:var(--mono); font-size:11px; padding:3px 9px; border-radius:999px; font-weight:600}
.rchip.high{color:var(--coral); background:color-mix(in srgb,var(--coral) 16%,transparent)}
.rchip.med{color:var(--gold); background:color-mix(in srgb,var(--gold) 16%,transparent)}
.rchip.low{color:var(--emerald); background:color-mix(in srgb,var(--emerald) 16%,transparent)}
.demo .cap-note{margin-top:16px; font-family:var(--mono); font-size:12px; color:var(--faint); text-align:center; letter-spacing:.03em}
/* scroll reveal */
.reveal{opacity:0; transform:translateY(14px); transition:opacity .6s ease, transform .6s ease}
.reveal.in{opacity:1; transform:none}
@media (prefers-reduced-motion: reduce){ .reveal{opacity:1; transform:none; transition:none} }
/* print / PDF &mdash; clean light paper, nothing clipped */
@media print{
:root{
--ink:#FFFFFF; --surface:#FFFFFF; --card:#FFFFFF; --card-2:#F6FAF7;
--line:rgba(20,60,40,.16); --line-strong:rgba(20,60,40,.28);
--text:#0D1613; --muted:#3E524A; --faint:#5A6E64;
--emerald:#047857; --emerald-deep:#065f46; --emerald-glow:#059669;
--gold:#9A6B15; --gold-soft:#A9791F; --coral:#B84331;
--hero-grad:none; --shadow:none;
}
*{ -webkit-print-color-adjust:exact !important; print-color-adjust:exact !important }
@page{ size:A4; margin:14mm 14mm }
html,body{ background:#fff }
#confetti{ display:none !important }
.ribbon{ position:static; border-bottom:1px solid var(--line); backdrop-filter:none }
.ribbon .nav{ display:none }
.pdflink{ display:none !important }
.reveal{ opacity:1 !important; transform:none !important }
section{ padding:18px 0 !important; border-top:1px solid var(--line) }
.hero{ padding:8px 0 20px !important }
.hero h1{ font-size:32px }
.hero .lede{ font-size:16px }
.bigmoney{ font-size:46px }
.device{ box-shadow:none }
.capgroup{ margin-top:18px }
/* keep only atomic blocks intact across page breaks &mdash; not whole sections */
.card,.step,.cap,.tam,.phase,.statband,.device,.econ .panel,.metrics,.callout,.heroStat,.roihead,.chart,.mkt .m,.tblwrap{
break-inside:avoid; page-break-inside:avoid }
h1,h2,h3,.lead,.eyebrow,.panelttl,.kicker{ break-after:avoid }
.foot{ border-top:1px solid var(--line) }
}
</style>
<div class="ribbon">
<div class="wrap">
<span class="brand"><span class="spark"></span>No-Show Killer</span>
<nav class="nav">
<a href="#problem">Problem</a>
<a href="#product">Product</a>
<a href="#market">Market</a>
<a href="#competition">Competition</a>
<a href="#business">Model</a>
<a href="#ask">Plan</a>
</nav>
<div class="status">
<span class="pill live"><span class="dot"></span>Live in production</span>
<a class="pill pdflink" href="https://zoe-pitches.mosaic.site/no-show-killer/No-Show-Killer-Business-Plan.pdf">PDF &#8595;</a>
</div>
</div>
</div>
<header class="hero">
<canvas id="confetti" aria-hidden="true"></canvas>
<div class="wrap">
<span class="eyebrow">Business plan &nbsp;&middot;&nbsp; Confidential</span>
<h1>Every empty chair is money walking out the door.</h1>
<p class="lede">No-Show Killer puts it back &mdash; <span class="em">automatically</span>. The moment a client cancels, it races down the waitlist by text and refills the slot before the owner even notices. No phone calls. No lost revenue.</p>
<div class="heroStat">
<div>
<div class="bigmoney tnum" id="hero-money" data-target="1240">$0</div>
<span class="illus">Illustrative unit value</span>
</div>
<div class="cap">Recovered from a <b>single</b> refilled appointment in a typical service business &mdash; the product's core unit of value, delivered on autopilot.</div>
</div>
</div>
</header>
<main>
<!-- PROBLEM -->
<section id="problem">
<div class="wrap">
<span class="eyebrow gold">The problem</span>
<p class="lead" style="margin-top:14px">A no-show isn't a missed appointment. It's inventory that can never be sold again.</p>
<p class="sub">A salon chair, a dental slot, a training session, a table &mdash; all perishable. When someone cancels at the last minute, that hour is gone forever, and the standard fix is an owner frantically calling down a paper waitlist while running the front desk. Most of the time, the chair just stays empty.</p>
<div class="statband" style="margin-top:34px">
<div>
<div class="n">10&ndash;15<span class="u">%</span></div>
<div class="l">of revenue lost to no-shows &amp; late cancellations at a typical appointment-based SMB.</div>
</div>
<div>
<div class="n">$200<span class="u">B+</span></div>
<div class="l">estimated annual cost of missed appointments across US service industries.</div>
</div>
<div>
<div class="n">&lt;1<span class="u">min</span></div>
<div class="l">the window that matters &mdash; fill fast or the slot is dead. Humans can't move at that speed. Software can.</div>
</div>
</div>
</div>
</section>
<!-- HOW IT WORKS -->
<section id="how">
<div class="wrap">
<span class="eyebrow">How it works</span>
<p class="lead" style="margin-top:14px">A cancellation triggers a race. First "YES" wins the chair.</p>
<p class="sub">The entire recovery loop runs over ordinary SMS &mdash; no app for the customer to download, no staff intervention required.</p>
<div class="flow">
<div class="step"><div class="no">01</div><h4>Chair opens</h4><p>A client cancels &mdash; manually, via a self-serve link, or synced from the calendar. The slot goes live.</p><span class="arrow">&rarr;</span></div>
<div class="step"><div class="no">02</div><h4>Cascade fires</h4><p>Waitlist clients are ranked and texted a real offer in sequence, respecting consent and quiet hours.</p><span class="arrow">&rarr;</span></div>
<div class="step"><div class="no">03</div><h4>First YES books</h4><p>A single "YES" reply claims the slot atomically &mdash; no double-books &mdash; and confirms the winner instantly.</p><span class="arrow">&rarr;</span></div>
<div class="step"><div class="no">04</div><h4>Revenue recovered</h4><p>The chair is refilled, a reminder is scheduled, and the owner sees the win. Money back in the till.</p></div>
</div>
<div class="callout"><b>And it prevents the gap in the first place.</b> Confirmations, reminders, and AI risk-scoring reduce how often a chair opens at all &mdash; so recovery is the safety net, not the whole strategy.</div>
</div>
</section>
<!-- PRODUCT PREVIEW -->
<section class="demo" id="preview">
<div class="wrap">
<span class="eyebrow">See it</span>
<p class="lead" style="margin-top:14px">The owner opens the app to one number: dollars they'd have lost.</p>
<p class="sub">Recovery, prediction, and proof on a single screen &mdash; the ROI dashboard, the live wins feed, and the No-Show Radar.</p>
<div class="device">
<div class="topbar">
<span class="dots"><i></i><i></i><i></i></span>
<span class="addr">app &middot; overview</span>
<span class="tab">This month &#9662;</span>
</div>
<div class="screen">
<div>
<div class="roihead">
<div class="big tnum">$3,480</div>
<span class="delta">&uarr; 121% vs last month</span>
<span class="lbl">Revenue recovered &middot; chairs refilled that would have sat empty</span>
</div>
<div class="chart" aria-hidden="true">
<span class="bar" style="height:26%"></span><span class="bar" style="height:38%"></span>
<span class="bar" style="height:31%"></span><span class="bar" style="height:52%"></span>
<span class="bar" style="height:44%"></span><span class="bar" style="height:63%"></span>
<span class="bar" style="height:58%"></span><span class="bar" style="height:71%"></span>
<span class="bar" style="height:66%"></span><span class="bar" style="height:84%"></span>
<span class="bar" style="height:79%"></span><span class="bar peak" style="height:100%"></span>
</div>
<div class="chartcap">Recovered revenue &middot; last 12 weeks</div>
</div>
<div>
<div class="panelttl">🎉 Recent wins</div>
<div class="winfeed">
<div class="win"><span class="em">🎉</span><span class="desc">2:00 PM Cleaning refilled</span><span class="amt">+$220</span></div>
<div class="win"><span class="em">🎉</span><span class="desc">4:30 PM Cut &amp; color refilled</span><span class="amt">+$185</span></div>
<div class="win"><span class="em">🎉</span><span class="desc">Tue 10 AM Exam refilled</span><span class="amt">+$140</span></div>
</div>
<div class="radarmini">
<div class="panelttl">📡 No-Show Radar &middot; at risk today</div>
<div class="rrow"><span class="nm">Rae P.</span><span class="tm">&middot; 3:15 PM</span><span class="rchip high">High &middot; 95</span></div>
<div class="rrow"><span class="nm">Mia T.</span><span class="tm">&middot; 5:00 PM</span><span class="rchip med">Med &middot; 45</span></div>
<div class="rrow"><span class="nm">Sam K.</span><span class="tm">&middot; 6:30 PM</span><span class="rchip low">Low &middot; 8</span></div>
</div>
</div>
</div>
</div>
<p class="cap-note">Representative interface &middot; figures illustrative</p>
</div>
</section>
<!-- WHAT WE BUILT -->
<section id="product">
<div class="wrap">
<span class="eyebrow">What we've built</span>
<p class="lead" style="margin-top:14px">A complete, deployed platform &mdash; not a prototype.</p>
<p class="sub">Beyond the core cascade, the product has grown into an autonomous revenue-recovery system that works <em>for</em> the owner and feels genuinely delightful to use.</p>
<div class="capgroup">
<div class="h"><span class="ttl">Prevent &amp; predict</span><span class="meta">stop the no-show before it happens</span></div>
<div class="caplist">
<div class="cap"><div class="mk">📡</div><div><h4>No-Show Radar</h4><p>An AI-style heuristic scores every upcoming appointment 0&ndash;100 for no-show risk, with self-explaining factors and one-tap nudge.</p></div></div>
<div class="cap"><div class="mk">✅</div><div><h4>Confirmations &amp; reminders</h4><p>Timezone-aware confirm/reminder cycles, two-way YES/NO parsing, and full STOP/START compliance.</p></div></div>
</div>
</div>
<div class="capgroup">
<div class="h"><span class="ttl">Recover &amp; automate</span><span class="meta">fill the chair with zero effort</span></div>
<div class="caplist">
<div class="cap"><div class="mk">⚡</div><div><h4>Waitlist cascade</h4><p>Race-safe, ranked, consent-gated auto-offers that refill a cancelled slot in under a minute.</p></div></div>
<div class="cap"><div class="mk">🤖</div><div><h4>Auto-pilot</h4><p>Automatically nudges high-risk unconfirmed appointments in the background. The owner does nothing; the system just works.</p></div></div>
<div class="cap"><div class="mk">🔗</div><div><h4>Self-serve reschedule links</h4><p>Secure, no-login SMS links let clients rebook or release a slot themselves &mdash; no phone tag.</p></div></div>
<div class="cap"><div class="mk">📅</div><div><h4>Google Calendar sync</h4><p>Two-way sync: a cancelled calendar event auto-opens a cascade; a win writes back to the calendar.</p></div></div>
</div>
</div>
<div class="capgroup">
<div class="h"><span class="ttl">Delight &amp; inform</span><span class="meta">the reason owners fall in love with it</span></div>
<div class="caplist">
<div class="cap g"><div class="mk">🎉</div><div><h4>The Win Moment</h4><p>Every refilled chair fires confetti, a hero dollar count-up, and an optional "you just recovered $X" text to the owner.</p></div></div>
<div class="cap g"><div class="mk">🌅</div><div><h4>Morning daily brief</h4><p>A once-a-day SMS: today's bookings, who's at risk, and what auto-pilot handled overnight.</p></div></div>
<div class="cap g"><div class="mk">📈</div><div><h4>ROI dashboard</h4><p>The home screen leads with dollars recovered &mdash; this month, all time, week-over-week trend, 12-week chart.</p></div></div>
<div class="cap g"><div class="mk">💰</div><div><h4>Weekly ROI report</h4><p>A proactive Sunday-night recap texted to the owner: chairs refilled, no-show rate, dollars saved.</p></div></div>
</div>
</div>
<div class="capgroup">
<div class="h"><span class="ttl">Foundations</span><span class="meta">the unglamorous work that makes it real</span></div>
<div class="caplist">
<div class="cap"><div class="mk">📄</div><div><h4>AI document import</h4><p>Snap a photo of a paper roster or price list &mdash; Claude extracts the rows and imports them in seconds.</p></div></div>
<div class="cap"><div class="mk">📱</div><div><h4>Native iOS app</h4><p>A full-parity SwiftUI client alongside the responsive web dashboard, with live updates.</p></div></div>
<div class="cap"><div class="mk">🛡️</div><div><h4>Compliance built in</h4><p>TCPA/CASL consent tracking, audit log, right-to-erase, opt-out controls, and A2P-ready messaging.</p></div></div>
<div class="cap"><div class="mk">🌓</div><div><h4>Apple-grade polish</h4><p>Fully responsive, light/dark themes, and a design system consistent across every screen.</p></div></div>
</div>
</div>
</div>
</section>
<!-- WHY IT WINS -->
<section id="why">
<div class="wrap">
<span class="eyebrow gold">Why it wins</span>
<p class="lead" style="margin-top:14px">Five things most tools in this space don't have &mdash; together.</p>
<div class="grid g3" style="margin-top:30px">
<div class="card"><span class="tag">01 &middot; Provable ROI</span><h3>Sells itself in one save</h3><p>The product's central metric is dollars recovered. It pays for a month of subscription the first time it refills a single chair.</p></div>
<div class="card"><span class="tag">02 &middot; Autonomous</span><h3>Works while you work</h3><p>Auto-pilot, cascades, reminders, and briefs run in the background. The owner isn't operating software &mdash; the software operates for them.</p></div>
<div class="card"><span class="tag">03 &middot; Horizontal</span><h3>Not locked to one vertical</h3><p>Salons, spas, dental, physio, gyms, tattoo, restaurants &mdash; anyone who sells time in slots. One product, a huge market.</p></div>
<div class="card"><span class="tag gold">04 &middot; AI-native</span><h3>Intelligence, not just automation</h3><p>Risk scoring, document extraction, and a roadmap to a conversational SMS agent &mdash; built on Claude from day one.</p></div>
<div class="card"><span class="tag gold">05 &middot; Delightful</span><h3>Owners love opening it</h3><p>Confetti, count-ups, and morning briefs turn a back-office utility into something people are happy to see. Retention is a feature.</p></div>
<div class="card" style="border-color:var(--line-strong); background:var(--card-2)"><span class="tag">The through-line</span><h3>Recovery you can feel</h3><p>Every surface points at the same emotional payoff: an empty chair became money. That clarity is the moat.</p></div>
</div>
</div>
</section>
<!-- MARKET -->
<section id="market">
<div class="wrap">
<span class="eyebrow gold">Market</span>
<p class="lead" style="margin-top:14px">A large, fragmented market that feels this pain every single day.</p>
<p class="sub">Every business that sells time in bookable slots loses money to no-shows &mdash; and almost none of them run software that actively recovers it. That gap is the opportunity.</p>
<div class="mkt">
<div class="m">
<div class="t">TAM &middot; total market</div>
<div class="v tnum">~1.5M</div>
<div class="d">Appointment-based SMBs across the US &amp; Canada &mdash; salons, clinics, studios, restaurants, and more. At ~$1,200/yr each, a <b>~$1.8B</b> opportunity.</div>
</div>
<div class="m sam">
<div class="t">SAM &middot; serviceable</div>
<div class="v tnum">~500K</div>
<div class="d">Beachhead verticals with real waitlists and acute no-show pain: beauty &amp; wellness, dental, physio, and fitness. Roughly <b>~$600M</b>.</div>
</div>
<div class="m som">
<div class="t">SOM &middot; 3-yr reachable</div>
<div class="v tnum">~3,000</div>
<div class="d">A focused wedge of locations won one vertical at a time &mdash; an illustrative path to <b>~$3.6M ARR</b>.</div>
</div>
</div>
<p class="illus-note">Market sizes are illustrative planning assumptions, not audited figures.</p>
</div>
</section>
<!-- COMPETITION -->
<section id="competition">
<div class="wrap">
<span class="eyebrow">Competitive analysis</span>
<p class="lead" style="margin-top:14px">Everyone reminds. Almost no one refills.</p>
<p class="sub">The category is crowded with reminder tools &mdash; but a reminder only reduces no-shows. When a chair empties anyway, those tools leave the owner to chase it by hand. No-Show Killer is built to close that gap autonomously, and to prove the dollars it recovers.</p>
<div class="tblwrap">
<table class="tbl">
<thead>
<tr>
<th>Capability</th>
<th>Front desk<br>&amp; paper list</th>
<th>Generic reminder<br>apps</th>
<th>Booking / PMS<br>built-ins</th>
<th class="us">No-Show Killer</th>
</tr>
</thead>
<tbody>
<tr><td>Auto-refills a cancelled slot (cascade)</td><td class="n">&#10007;</td><td class="n">&#10007;</td><td class="p">Rare</td><td class="us y">&#10003; Core</td></tr>
<tr><td>Predicts no-show risk (AI scoring)</td><td class="n">&#10007;</td><td class="n">&#10007;</td><td class="n">&#10007;</td><td class="us y">&#10003;</td></tr>
<tr><td>Two-way SMS, no app for clients</td><td class="p">Manual</td><td class="y">&#10003;</td><td class="p">Varies</td><td class="us y">&#10003;</td></tr>
<tr><td>Dollars-recovered ROI reporting</td><td class="n">&#10007;</td><td class="n">&#10007;</td><td class="n">&#10007;</td><td class="us y">&#10003;</td></tr>
<tr><td>Runs autonomously (no staff effort)</td><td class="n">&#10007;</td><td class="p">Partial</td><td class="p">Partial</td><td class="us y">&#10003;</td></tr>
<tr><td>Works across many verticals</td><td class="y">&#10003;</td><td class="y">&#10003;</td><td class="n">Vertical-locked</td><td class="us y">&#10003;</td></tr>
</tbody>
</table>
</div>
<div class="grid g3" style="margin-top:24px">
<div class="card"><span class="tag">Our moat</span><h3>The recovery loop</h3><p>An autonomous cascade plus predictive scoring is materially harder to build than reminders &mdash; and it's the exact part that makes the owner money. Hard to copy, easy to feel.</p></div>
<div class="card"><span class="tag gold">Positioning</span><h3>ROI, not admin</h3><p>We sell recovered revenue, not another dashboard to babysit. That reframes the purchase from a cost line to a profit lever.</p></div>
<div class="card"><span class="tag">Wedge</span><h3>Horizontal by design</h3><p>Vertical incumbents are locked to one market. One engine lets us expand across verticals without a rebuild &mdash; and undercut point tools on breadth.</p></div>
</div>
</div>
</section>
<!-- WHERE WE ARE -->
<section id="status">
<div class="wrap">
<span class="eyebrow">Where we are</span>
<p class="lead" style="margin-top:14px">Built, tested, deployed, and live &mdash; one carrier registration from onboarding paying customers.</p>
<div class="board" style="margin-top:30px">
<div class="card" style="padding:26px 28px">
<div class="statusrow"><div class="ic ok">&#10003;</div><div class="tx"><b>Deployed to production</b><span>Running live on managed infrastructure; health-verified and current with the latest build.</span></div><span class="tag">DONE</span></div>
<div class="statusrow"><div class="ic ok">&#10003;</div><div class="tx"><b>Full feature arc shipped</b><span>Win Moment, Radar, Auto-pilot, Daily Brief, ROI dashboard &mdash; all merged and live.</span></div><span class="tag">DONE</span></div>
<div class="statusrow"><div class="ic ok">&#10003;</div><div class="tx"><b>411 automated tests passing</b><span>Type-clean across web + backend; every recovery path covered.</span></div><span class="tag">DONE</span></div>
<div class="statusrow"><div class="ic ok">&#10003;</div><div class="tx"><b>All revenue features armed</b><span>Cascade, auto-pilot, briefs, and win-texts enabled in production, ready for real data.</span></div><span class="tag">DONE</span></div>
<div class="statusrow"><div class="ic gate">!</div><div class="tx"><b>A2P 10DLC carrier registration</b><span>The one gate before texting real customers at scale &mdash; a Twilio brand/campaign filing.</span></div><span class="tag">GATE</span></div>
<div class="statusrow"><div class="ic gate">!</div><div class="tx"><b>Security hardening: secret rotation</b><span>Routine pre-launch credential rotation. Small, well-understood task.</span></div><span class="tag">GATE</span></div>
</div>
<div>
<div class="metrics">
<div><div class="k tnum">100%</div><div class="m">Feature arc shipped</div></div>
<div><div class="k gold tnum">411</div><div class="m">Tests green</div></div>
<div><div class="k tnum">2</div><div class="m">Gates to first customer</div></div>
<div><div class="k gold tnum">1</div><div class="m">Product, many verticals</div></div>
</div>
<div class="callout" style="margin-top:18px"><b>Honest status:</b> the platform is complete and running. What's left before revenue isn't more engineering &mdash; it's a carrier paperwork step and lining up first design-partner businesses.</div>
</div>
</div>
</div>
</section>
<!-- BUSINESS CASE -->
<section id="business">
<div class="wrap">
<span class="eyebrow gold">The business case</span>
<p class="lead" style="margin-top:14px">The unit economics are almost embarrassingly simple.</p>
<div class="econ" style="margin-top:30px">
<div class="panel">
<span class="kicker">For the customer</span>
<div class="eq" style="margin-top:12px">
<span class="hi">1</span> chair refilled &nbsp;=&nbsp; <span class="hi">$75&ndash;$300+</span> recovered<br>
<span class="hg">1</span> subscription &nbsp;&asymp;&nbsp; <span class="hg">the price of one chair</span><br>
&rarr; &nbsp;pays for itself the first week it's used
</div>
<div class="big">One save covers the month.</div>
<p class="sub" style="margin-top:12px">After that, every recovered no-show is pure upside. That's the easiest ROI conversation in SMB software.</p>
</div>
<div class="panel">
<span class="kicker">For us</span>
<div class="eq" style="margin-top:12px">
Model: &nbsp;<span class="hi">per-location SaaS</span> subscription<br>
Cost to serve: &nbsp;<span class="hi">low</span> (SMS + hosting, usage-scaled)<br>
Expansion: &nbsp;<span class="hg">multi-location, tiers, add-ons</span>
</div>
<div class="big">Recurring, sticky, expandable.</div>
<p class="sub" style="margin-top:12px">High retention follows naturally: once a business trusts it to catch cancellations, turning it off means knowingly leaving money on the table.</p>
</div>
</div>
<span class="kicker" style="display:block; margin-top:36px">Who it's for &mdash; one product, many doors</span>
<div class="tamrow">
<div class="tam"><div class="seg">Beauty &amp; wellness</div><div class="why">Salons, spas, barbers, nails, med-spas &mdash; high cancel rates, high slot value.</div></div>
<div class="tam"><div class="seg">Health &amp; therapy</div><div class="why">Dental, physio, chiro, counseling &mdash; appointment-driven, no-show sensitive.</div></div>
<div class="tam"><div class="seg">Fitness &amp; coaching</div><div class="why">PT, studios, tutoring &mdash; booked sessions, waitlists already exist.</div></div>
<div class="tam"><div class="seg">Hospitality &amp; services</div><div class="why">Restaurants, pet grooming, auto detailing &mdash; perishable, bookable capacity.</div></div>
</div>
<p class="sub" style="margin-top:20px">The same engine serves all of them. We start where the pain is sharpest and the sales cycle is shortest, then widen &mdash; the product needs no re-build to move between verticals.</p>
</div>
</section>
<!-- PRICING & PROJECTIONS -->
<section id="model">
<div class="wrap">
<span class="eyebrow gold">Pricing &amp; projections</span>
<p class="lead" style="margin-top:14px">Simple per-location pricing that a single recovered chair already covers.</p>
<div class="grid g3" style="margin-top:28px">
<div class="card"><span class="tag">Starter</span><h3 class="price-amt">$49<span class="per">/mo &middot; location</span></h3><p>Waitlist cascade + confirmations &amp; reminders &mdash; everything needed to start recovering chairs from day one.</p></div>
<div class="card" style="border-color:var(--emerald); box-shadow:0 0 0 1px var(--emerald) inset, var(--shadow)"><span class="tag">Pro &middot; most popular</span><h3 class="price-amt">$99<span class="per">/mo &middot; location</span></h3><p>Adds No-Show Radar, auto-pilot, the ROI dashboard, morning brief, and Google Calendar sync.</p></div>
<div class="card"><span class="tag gold">Multi-location</span><h3 class="price-amt">Custom</h3><p>Volume pricing, roles, and rollout support for chains and franchise groups.</p></div>
</div>
<div class="tblwrap">
<table class="tbl">
<thead><tr><th>Illustrative trajectory</th><th>Year 1</th><th>Year 2</th><th class="us">Year 3</th></tr></thead>
<tbody>
<tr><td>Active locations</td><td class="tnum">150</td><td class="tnum">900</td><td class="us tnum">3,000</td></tr>
<tr><td>Avg revenue / location / yr</td><td class="tnum">~$1,000</td><td class="tnum">~$1,150</td><td class="us tnum">~$1,200</td></tr>
<tr><td>ARR</td><td class="tnum">~$150K</td><td class="tnum">~$1.0M</td><td class="us y tnum">~$3.6M</td></tr>
<tr><td>Cost to serve</td><td>Low</td><td>Low</td><td class="us">Low &mdash; usage-scaled SMS + hosting</td></tr>
</tbody>
</table>
</div>
<p class="illus-note">Pricing and multi-year figures are illustrative planning assumptions; actuals depend on the design-partner phase.</p>
</div>
</section>
<!-- RISKS -->
<section id="risks">
<div class="wrap">
<span class="eyebrow">Risks &amp; mitigations</span>
<p class="lead" style="margin-top:14px">The honest list &mdash; and what's already handled.</p>
<div class="grid g2" style="margin-top:28px">
<div class="card"><span class="tag gold">Deliverability</span><h3>Carrier filtering (A2P)</h3><p>Unregistered SMS gets filtered at scale. <b style="color:var(--text)">Mitigation:</b> A2P 10DLC brand/campaign + Messaging Service &mdash; the code already prefers it; registration is the active pre-launch step.</p></div>
<div class="card"><span class="tag gold">Adoption</span><h3>Onboarding friction</h3><p>SMBs won't do heavy setup. <b style="color:var(--text)">Mitigation:</b> AI document import, self-serve setup wizard, calendar sync, and hands-on design-partner onboarding.</p></div>
<div class="card"><span class="tag gold">Competition</span><h3>Incumbents add cascade</h3><p>Reminder tools could copy it. <b style="color:var(--text)">Mitigation:</b> the autonomous recovery loop + ROI framing is a real build lead; move fast on real customer proof.</p></div>
<div class="card"><span class="tag gold">Unit cost</span><h3>SMS margin</h3><p>Per-message cost eats margin if unmanaged. <b style="color:var(--text)">Mitigation:</b> usage-scaled pricing, daily caps, and consent/quiet-hours gating already shipped.</p></div>
</div>
</div>
</section>
<!-- TEAM -->
<section id="team">
<div class="wrap">
<span class="eyebrow gold">Team &amp; execution</span>
<p class="lead" style="margin-top:14px">A lean build that has already shipped what most plans only promise.</p>
<p class="sub">The entire platform &mdash; the cascade engine, predictive Radar, auto-pilot, ROI dashboard, a native iOS app, compliance controls, and a deployed production system with 411 passing tests &mdash; is already built and live. Execution risk, the thing that sinks most early plans, is largely retired: the question isn't "can it be built?" but "how fast can we put it in front of customers?" The next investment attaches to go-to-market and customer success, not to proving the product works.</p>
</div>
</section>
<!-- THE ASK -->
<section id="ask">
<div class="wrap">
<span class="eyebrow">The plan from here</span>
<p class="lead" style="margin-top:14px">Engineering is done. The next moves are go-to-market.</p>
<div class="phases">
<div class="phase next">
<span class="when">Now &rarr; 30 days</span>
<h3>Open the gate</h3>
<ul>
<li>Complete A2P 10DLC registration to unlock SMS at scale</li>
<li>Rotate credentials and finish launch hardening</li>
<li>Line up 3&ndash;5 design-partner businesses in one vertical</li>
</ul>
</div>
<div class="phase">
<span class="when">30 &rarr; 90 days</span>
<h3>Prove it with real dollars</h3>
<ul>
<li>Onboard partners; load real waitlists &amp; calendars</li>
<li>Measure actual dollars recovered per location</li>
<li>Turn those numbers into the sales story &amp; case studies</li>
</ul>
</div>
<div class="phase">
<span class="when">90 days +</span>
<h3>Scale the machine</h3>
<ul>
<li>Introduce pricing tiers &amp; multi-location</li>
<li>Ship the conversational AI SMS agent</li>
<li>Expand into the next verticals with the proof in hand</li>
</ul>
</div>
</div>
<div class="callout" style="margin-top:26px"><b>What I need from you:</b> a green light to finish the A2P step and recruit the first handful of design partners. The build risk is behind us &mdash; this is now about putting a finished product in front of businesses that are losing money every week without it.</div>
</div>
</section>
<section class="close">
<div class="wrap">
<span class="eyebrow" style="display:block; margin-bottom:16px">The one-line version</span>
<h2>A finished product that turns empty chairs back into revenue &mdash; automatically, and with a smile.</h2>
<p>It's live, it's tested, and it's one small step from its first paying customer.</p>
</div>
</section>
</main>
<footer class="foot">
<div class="wrap">
<span>No-Show Killer &nbsp;&middot;&nbsp; Business plan</span>
<span>Confidential &nbsp;&middot;&nbsp; Prepared for leadership review</span>
</div>
</footer>
<script>
(function(){
var isPrint = /[?&]print=1/.test(window.location.search);
var reduce = isPrint || (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);
// Hero count-up
var el = document.getElementById('hero-money');
if(el){
var target = parseInt(el.getAttribute('data-target'),10) || 0;
if(reduce){ el.textContent = '$' + target.toLocaleString(); }
else{
var start = null, dur = 1500;
var ease = function(t){ return 1 - Math.pow(1-t, 3); };
var tick = function(ts){
if(start===null) start = ts;
var p = Math.min((ts-start)/dur, 1);
var v = Math.round(ease(p) * target);
el.textContent = '$' + v.toLocaleString();
if(p<1) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
}
}
// One-shot confetti in hero (emerald + gold), reduced-motion aware
var canvas = document.getElementById('confetti');
if(canvas && !reduce){
var ctx = canvas.getContext('2d');
var host = canvas.parentElement;
function size(){ canvas.width = host.clientWidth; canvas.height = host.clientHeight; }
size();
var colors = ['#34D399','#6EE7B7','#E7B24C','#F5D07A','#10B981'];
var N = Math.min(120, Math.floor(host.clientWidth/9));
var parts = [];
for(var i=0;i<N;i++){
parts.push({
x: Math.random()*canvas.width,
y: -20 - Math.random()*canvas.height*0.6,
r: 3 + Math.random()*5,
c: colors[i % colors.length],
vy: 1.1 + Math.random()*2.2,
vx: -0.6 + Math.random()*1.2,
rot: Math.random()*Math.PI,
vr: -0.1 + Math.random()*0.2,
life: 1
});
}
var frames = 0, maxFrames = 260;
function draw(){
ctx.clearRect(0,0,canvas.width,canvas.height);
var alive = false;
for(var i=0;i<parts.length;i++){
var p = parts[i];
p.x += p.vx; p.y += p.vy; p.rot += p.vr; p.vy += 0.012;
if(frames > maxFrames*0.6){ p.life -= 0.02; }
if(p.y < canvas.height + 20 && p.life > 0){
alive = true;
ctx.save();
ctx.globalAlpha = Math.max(0, p.life);
ctx.translate(p.x, p.y); ctx.rotate(p.rot);
ctx.fillStyle = p.c;
ctx.fillRect(-p.r, -p.r*0.5, p.r*2, p.r);
ctx.restore();
}
}
frames++;
if(alive && frames < maxFrames) requestAnimationFrame(draw);
else ctx.clearRect(0,0,canvas.width,canvas.height);
}
// slight delay so it reads as a "win" landing
setTimeout(function(){ requestAnimationFrame(draw); }, 350);
window.addEventListener('resize', size);
}
// Tasteful scroll reveal for sections (skipped under reduced motion / no IO)
if(!reduce && 'IntersectionObserver' in window){
var targets = document.querySelectorAll('main > section > .wrap');
var io = new IntersectionObserver(function(entries){
entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); io.unobserve(e.target); } });
}, {rootMargin:'0px 0px -8% 0px', threshold:0.08});
targets.forEach(function(t){ t.classList.add('reveal'); io.observe(t); });
}
})();
</script>