Add No-Show Killer business plan + executive summary

This commit is contained in:
mosaic 2026-08-27 16:10:47 +00:00
parent 8a6ad403c4
commit 25ce67b48b
5 changed files with 884 additions and 1 deletions

View File

@ -65,13 +65,47 @@
<div class="kicker"><span class="mk">✎</span> Zoe Cross &nbsp;·&nbsp; Living Index</div>
<h1>Business Plans <em>&amp;</em> Pitches</h1>
<p class="sub">Every plan and pitch, in one place — always the current version, each with its live page and a PDF to attach or print.</p>
<div class="meta-line"><span><b>1</b> document</span><span>Updated <b>27 Aug 2026</b></span><span>zoe-pitches.mosaic.site</span></div>
<div class="meta-line"><span><b>3</b> documents</span><span>Updated <b>27 Aug 2026</b></span><span>zoe-pitches.mosaic.site</span></div>
</div>
</header>
<main class="wrap">
<div class="list">
<article class="entry">
<div class="body">
<div class="tags">
<span class="tag type">Business Plan</span>
<span class="tag">SaaS · SMS · AI</span>
<span class="tag live"><span class="dot"></span> Live</span>
</div>
<h2>No-Show Killer</h2>
<p>The autonomous SMS platform that turns empty appointment chairs back into revenue — cascade recovery, AI no-show prediction, auto-pilot, and a delightful win moment. Built, tested, and deployed.</p>
<div class="updated">Updated 27 Aug 2026</div>
</div>
<div class="actions">
<a class="btn open" href="./no-show-killer/">Open&nbsp;→</a>
<a class="btn pdf" href="./no-show-killer/No-Show-Killer-Business-Plan.pdf">PDF&nbsp;↓</a>
</div>
</article>
<article class="entry">
<div class="body">
<div class="tags">
<span class="tag type">Executive Summary</span>
<span class="tag">One-pager</span>
<span class="tag live"><span class="dot"></span> Live</span>
</div>
<h2>No-Show Killer — Executive Summary</h2>
<p>The one-page, quick-glance version of the No-Show Killer plan — problem, solution, proof, unit economics, status, and the ask, all on a single sheet to print or attach.</p>
<div class="updated">Updated 27 Aug 2026</div>
</div>
<div class="actions">
<a class="btn open" href="./no-show-killer-summary/">Open&nbsp;→</a>
<a class="btn pdf" href="./no-show-killer-summary/No-Show-Killer-Executive-Summary.pdf">PDF&nbsp;↓</a>
</div>
</article>
<article class="entry">
<div class="body">
<div class="tags">

View File

@ -0,0 +1,177 @@
<title>No-Show Killer — Executive Summary</title>
<style>
:root{
--ink:#0B1210; --surface:#111A16; --card:#15211C; --card-2:#18271F;
--line:rgba(140,180,160,.16); --line-strong:rgba(140,180,160,.30);
--text:#E9F1EC; --muted:#96AAA1; --faint:#6F857B;
--emerald:#34D399; --emerald-deep:#10B981; --emerald-glow:#6EE7B7;
--gold:#E7B24C; --coral:#F0796B;
--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,.12); --line-strong:rgba(20,60,40,.22);
--text:#0D1613; --muted:#4E625A; --faint:#78897F;
--emerald:#059669; --emerald-deep:#047857; --emerald-glow:#0EA271; --gold:#A9791F; --coral:#C8503F; }
}
:root[data-theme="dark"]{ --ink:#0B1210; --surface:#111A16; --card:#15211C; --card-2:#18271F;
--line:rgba(140,180,160,.16); --line-strong:rgba(140,180,160,.30);
--text:#E9F1EC; --muted:#96AAA1; --faint:#6F857B;
--emerald:#34D399; --emerald-deep:#10B981; --emerald-glow:#6EE7B7; --gold:#E7B24C; --coral:#F0796B; }
:root[data-theme="light"]{ --ink:#F3F7F3; --surface:#FBFDFB; --card:#FFFFFF; --card-2:#F6FAF7;
--line:rgba(20,60,40,.12); --line-strong:rgba(20,60,40,.22);
--text:#0D1613; --muted:#4E625A; --faint:#78897F;
--emerald:#059669; --emerald-deep:#047857; --emerald-glow:#0EA271; --gold:#A9791F; --coral:#C8503F; }
*{box-sizing:border-box}
body{margin:0; background:var(--ink); color:var(--text); font-family:var(--sans); font-size:15px; line-height:1.55; -webkit-font-smoothing:antialiased}
.sheet{max-width:960px; margin:0 auto; padding:40px 34px 46px}
h1,h2,h3{font-family:var(--serif); font-weight:600; margin:0; text-wrap:balance}
p{margin:0}
.tnum{font-variant-numeric:tabular-nums}
a{color:inherit}
.head{display:flex; align-items:flex-start; gap:16px; flex-wrap:wrap; border-bottom:1px solid var(--line); padding-bottom:20px}
.head .brand{display:flex; align-items:center; gap:10px; font-family:var(--serif); font-weight:700; font-size:19px}
.spark{width:11px;height:11px;border-radius:3px;background:var(--emerald);box-shadow:0 0 12px var(--emerald)}
.head .doc{font-family:var(--mono); font-size:11.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--emerald); margin-top:3px}
.head .right{margin-left:auto; display:flex; gap:8px; align-items:center}
.pill{font-family:var(--mono); font-size:11px; padding:5px 10px; border-radius:999px; border:1px solid var(--line-strong); color:var(--muted); display:inline-flex; gap:7px; align-items:center; text-decoration:none}
.pill .dot{width:6px;height:6px;border-radius:50%;background:var(--emerald); box-shadow:0 0 7px var(--emerald)}
a.pill{color:var(--emerald); border-color:color-mix(in srgb,var(--emerald) 40%,var(--line-strong))}
.thesis{margin:24px 0 4px; font-family:var(--serif); font-size:clamp(24px,3.6vw,32px); line-height:1.16; letter-spacing:-.015em; max-width:26ch}
.thesis .em{color:var(--emerald)}
.deck{color:var(--muted); margin-top:12px; max-width:70ch; font-size:15.5px}
.grid3{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:24px}
@media(max-width:720px){ .grid3{grid-template-columns:1fr} }
.blk{background:var(--card); border:1px solid var(--line); border-radius:13px; padding:18px 19px}
.blk .lab{font-family:var(--mono); font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--faint); margin-bottom:9px}
.blk .lab.g{color:var(--gold)}
.blk h3{font-size:16.5px; letter-spacing:-.01em; margin-bottom:6px}
.blk p{color:var(--muted); font-size:13.5px; line-height:1.5}
.stats{display:grid; grid-template-columns:repeat(4,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:12px; overflow:hidden; margin-top:16px}
.stats > div{background:var(--card); padding:15px 16px}
.stats .k{font-family:var(--serif); font-weight:700; font-size:26px; letter-spacing:-.02em; color:var(--emerald)}
.stats .k.g{color:var(--gold)}
.stats .m{font-family:var(--mono); font-size:10px; letter-spacing:.07em; text-transform:uppercase; color:var(--faint); margin-top:5px}
@media(max-width:720px){ .stats{grid-template-columns:1fr 1fr} }
.split{display:grid; grid-template-columns:1.15fr .85fr; gap:16px; margin-top:16px}
@media(max-width:720px){ .split{grid-template-columns:1fr} }
.econ{background:linear-gradient(180deg,var(--card-2),var(--card)); border:1px solid var(--line-strong); border-radius:13px; padding:19px}
.econ .lab{font-family:var(--mono); font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--faint); margin-bottom:8px}
.econ .eq{font-family:var(--mono); font-size:12.5px; color:var(--muted); line-height:1.9}
.econ .eq .hi{color:var(--emerald); font-weight:600} .econ .eq .hg{color:var(--gold); font-weight:600}
.econ .big{font-family:var(--serif); font-weight:700; font-size:22px; letter-spacing:-.01em; margin-top:8px}
.status{background:var(--card); border:1px solid var(--line); border-radius:13px; padding:19px}
.status .lab{font-family:var(--mono); font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--faint); margin-bottom:10px}
.srow{display:flex; align-items:center; gap:10px; padding:5px 0; font-size:13.5px}
.srow .ic{width:18px;height:18px;flex:0 0 18px;border-radius:5px;display:grid;place-items:center;font-size:11px;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)}
.srow .g2{margin-left:auto; font-family:var(--mono); font-size:10px; color:var(--faint)}
.ask{margin-top:18px; background:var(--card-2); border:1px solid var(--line-strong); border-left:3px solid var(--emerald); border-radius:0 12px 12px 0; padding:16px 20px}
.ask .lab{font-family:var(--mono); font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--emerald); margin-bottom:6px}
.ask p{font-size:14.5px}
.ask b{color:var(--text)}
.foot{margin-top:22px; border-top:1px solid var(--line); padding-top:14px; font-family:var(--mono); font-size:11px; color:var(--faint); display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap}
.foot a{color:var(--emerald); text-decoration:none}
@media print{
:root{ --ink:#fff; --surface:#fff; --card:#fff; --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; --gold:#9A6B15; --coral:#B84331; }
*{ -webkit-print-color-adjust:exact !important; print-color-adjust:exact !important }
@page{ size:A4; margin:10mm }
html,body{ background:#fff; font-size:11.5px; line-height:1.48 }
.sheet{ padding:0; max-width:none }
.head{ padding-bottom:12px } .head .right .pill.pdflink{ display:none }
.thesis{ font-size:21px; margin:14px 0 3px }
.deck{ font-size:12px; margin-top:8px }
.grid3{ margin-top:12px; gap:10px } .blk{ padding:13px 14px } .blk h3{ font-size:14.5px } .blk p{ font-size:11.5px; line-height:1.42 }
.stats{ margin-top:10px } .stats > div{ padding:11px 13px } .stats .k{ font-size:22px }
.split{ margin-top:10px; gap:10px } .econ,.status{ padding:14px } .econ .big{ font-size:19px }
.srow{ padding:3px 0 } .ask{ margin-top:11px; padding:12px 16px } .ask p{ font-size:12.5px }
.foot{ margin-top:12px; padding-top:10px }
.blk,.econ,.status,.ask,.stats{ break-inside:avoid }
}
</style>
<div class="sheet">
<div class="head">
<div>
<div class="brand"><span class="spark"></span>No-Show Killer</div>
<div class="doc">Executive Summary</div>
</div>
<div class="right">
<span class="pill"><span class="dot"></span>Live in production</span>
<a class="pill pdflink" href="https://zoe-pitches.mosaic.site/no-show-killer-summary/No-Show-Killer-Executive-Summary.pdf">PDF &#8595;</a>
</div>
</div>
<p class="thesis">Turn empty appointment chairs back into revenue &mdash; <span class="em">automatically</span>.</p>
<p class="deck">No-Show Killer is a deployed SMS platform for appointment-based businesses. The moment a client cancels, it races down the waitlist by text and refills the slot in under a minute &mdash; and predicts, reminds, and auto-nudges to stop no-shows before they happen. It&rsquo;s built, tested, live, and one carrier-registration step from its first paying customer.</p>
<div class="grid3">
<div class="blk">
<div class="lab g">The problem</div>
<h3>Perishable inventory, lost forever</h3>
<p>A no-show is an hour that can never be sold again &mdash; 10&ndash;15% of revenue at a typical service SMB. The manual fix (calling down a paper waitlist) can&rsquo;t move in the sub-minute window that matters.</p>
</div>
<div class="blk">
<div class="lab">The solution</div>
<h3>An autonomous recovery engine</h3>
<p>Cancellation &rarr; ranked waitlist cascade &rarr; first &ldquo;YES&rdquo; books the chair, atomically. Plus AI risk-scoring, confirmations, auto-pilot nudges, and a morning owner brief &mdash; all over plain SMS.</p>
</div>
<div class="blk">
<div class="lab">Why it wins</div>
<h3>Provable ROI, horizontal reach</h3>
<p>It pays for itself the first time it refills one chair. One product serves salons, dental, physio, gyms, restaurants &mdash; and it&rsquo;s AI-native and genuinely delightful, so owners keep it on.</p>
</div>
</div>
<div class="stats">
<div><div class="k tnum">100%</div><div class="m">Feature arc shipped</div></div>
<div><div class="k g tnum">411</div><div class="m">Automated tests green</div></div>
<div><div class="k tnum">Live</div><div class="m">Deployed &amp; verified</div></div>
<div><div class="k g tnum">1</div><div class="m">Product, many verticals</div></div>
</div>
<div class="split">
<div class="econ">
<div class="lab">Unit economics</div>
<div class="eq">
<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&rsquo;s used
</div>
<div class="big">One save covers the month.</div>
<p style="color:var(--muted); font-size:12.5px; margin-top:7px">Model: recurring per-location SaaS, low cost to serve, expandable to multi-location &amp; tiers. <span style="color:var(--faint)">Figures illustrative.</span></p>
</div>
<div class="status">
<div class="lab">Where we are</div>
<div class="srow"><span class="ic ok">&#10003;</span> Deployed to production, current build <span class="g2">DONE</span></div>
<div class="srow"><span class="ic ok">&#10003;</span> Full arc &middot; 411 tests green <span class="g2">DONE</span></div>
<div class="srow"><span class="ic ok">&#10003;</span> All revenue features armed <span class="g2">DONE</span></div>
<div class="srow"><span class="ic gate">!</span> A2P 10DLC carrier registration <span class="g2">GATE</span></div>
<div class="srow"><span class="ic gate">!</span> Pre-launch secret rotation <span class="g2">GATE</span></div>
</div>
</div>
<div class="ask">
<div class="lab">The ask</div>
<p><b>A green light to finish the A2P registration and recruit 3&ndash;5 design-partner businesses.</b> The build risk is behind us &mdash; this is now about putting a finished product in front of businesses that lose money every week without it, and turning real recovered dollars into the sales story.</p>
</div>
<div class="foot">
<span>No-Show Killer &middot; Executive Summary &middot; Confidential</span>
<span>Full plan: <a href="https://zoe-pitches.mosaic.site/no-show-killer/">zoe-pitches.mosaic.site/no-show-killer</a></span>
</div>
</div>

Binary file not shown.

672
no-show-killer/index.html Normal file
View File

@ -0,0 +1,672 @@
<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)}
@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 — 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 — not whole sections */
.card,.step,.cap,.tam,.phase,.statband,.device,.econ .panel,.metrics,.callout,.heroStat,.roihead,.chart{
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="#status">Status</a>
<a href="#business">Business</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>
<!-- 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>
<!-- 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>