Decision log¶
Reverse chronological. The "why" matters more than the "what".
2026-06-22 — Persist every Polly call to our own DB + per-pilot dashboard + daily digest¶
- Why our own DB: Vapi retains 14 days on the free tier. With pilots paying £99/mo we need an indefinite operational record of every job Polly captured. Storage cost is trivial (~1 KB/call).
- Why a separate
/pilotsdashboard: The existing/api/provision-pilot/queueview is queue state (provisioning). The new/pilotsview is operational state (every call once live). Different audiences, different cadences. - Why quality flags computed at write-time: Lets the daily digest stay simple (
if totals.flagged > 0 …), and means a future ML/rule update can re-flag historical calls by replaying the function over the JSON file. - Why a daily digest (not real-time alerts): Real-time alerts on every call would be noise. End-of-day rollup is the right cadence for "is Polly performing well across all pilots".
- Why patching the base assistant is enough for now: Currently zero live clones. Once we have live pilots, we'll need a
patch-all-clones.jsscript that walks/data/provisions.jsonand PATCHes each live clone via Vapi API (documented in Improvement loop).
2026-06-22 — Inbound SMS auto-reply switched from "book audit" to "we'll get back to you"¶
- Why: UK trades pilot doesn't have a "free 10-min time audit" funnel — that was leftover US Audit copy. Sending it would confuse warm prospects and look unprofessional. Generic "we'll get back to you" + email-to-team notification preserves the speed-of-response feel without making promises we don't deliver.
2026-06-21 — vCard SMS delivery + 5-second no-answer timer + webhook on bridge¶
Locked after end-to-end pilot testing surfaced four bugs in sequence.
- vCard contact links beat
tel:MMI links. iOS 16+ blocks MMI codes embedded intel:URIs, and plain MMI strings in SMS bodies are not reliably tappable. iPhone Contacts, however, dial MMI codes flawlessly once saved. So the welcome SMS now contains two vCard download links —polly-on.vcfandpolly-off.vcf— hosted onbridge.yourevenings.com/vcard/<id>/...— tap → Add to Contacts → done. SMS body explicitly warns: “scroll down → Create New Contact. Do NOT tap the blue tick at the top.” **61*<num>**5#(5-second no-answer timer) for the Polly ON code. Carrier voicemail kicks in at 15–20s on every UK network. Default no-answer timer is 20–30s. Result before the fix: voicemail wins, Polly never sees the call. With a 5-second timer, our forward fires first on EE / Vodafone / O2 / Three + every MVNO tested.- Vapi end-of-call webhook moved from
trades.yourevenings.comtobridge.yourevenings.com. Putting trades.yourevenings.com behind Cloudflare Access (for the status dashboard) broke the webhook silently: every Vapi POST got a 302 → email-PIN login, which Vapi can't complete. The bridge isn't behind Access, so it's the right home for any unauthenticated machine-to-machine endpoint. All four existing Vapi assistants were patched; the provision executor (provision-executor.js) setsserver.urlto the bridge for all future clones automatically. - Bridge
/vapi-webhooknow sends SMS-to-trade with job details (caller name + address + callback number + urgency + job description + recording URL), from the trade's own YE number. This is what the welcome SMS has been promising since launch but was never actually wired — the original worker only sent Telegram to Matt, no SMS to the trade.
2026-06-21 — Build the wiki on MkDocs Material + Cloudflare Pages + Cloudflare Access¶
- Why: Matt is hiring Katie tomorrow; she needs a single private place to find sales playbook, Polly info, runbooks, call log. Karpathy's LLM-wiki pattern (gist) fits perfectly — markdown owned by the LLM, browsed via static site.
- Stack rationale: MkDocs Material = best search & dark mode out of the box; Cloudflare Pages = same account as
ye-trades, free; Cloudflare Access = email allowlist, no infra to run.
2026-06-16 — Vapi timeout = skipped not yellow¶
- Why: Eliminate monitoring flap noise. Transient timeouts shouldn't page anyone.
2026-06-16 — Wrangler --branch=main for production¶
- Why: Got burned once deploying to
master(preview) instead. Locked in.
2026-06-12 — Routing: Option A for brother + first ~5 pilots¶
- Why: Simpler than Option B. Robust per-tenant isolation. Option B (Diversion header) in parallel dev for after pilot 5.
2026-06-12 — Polly UK live on +44 7488 896189¶
- Why: Pivot from US Audit to UK Trades after 7-day push showed 0 paid bookings.
2026-06-04 — Polymarket trading SHUT DOWN¶
- Why: Matt's call. Focus on YE.
2026-04-28 — UK Ltd, stay UK until £100K+ revenue¶
- Why: Cleaner tax, simpler banking, can revisit at scale.
2026-04-27 — Brand: YourEvenings (was Plainsailing)¶
- Why: "Get your evenings back" is the actual emotional promise. "Plainsailing" was metaphor-heavy; new name is outcome-direct.
New decisions are appended at the top by Pete during ingest. Old decisions are never deleted.