Skip to content

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 /pilots dashboard: The existing /api/provision-pilot/queue view is queue state (provisioning). The new /pilots view 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.js script that walks /data/provisions.json and 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 in tel: 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.vcf and polly-off.vcf — hosted on bridge.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.com to bridge.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) sets server.url to the bridge for all future clones automatically.
  • Bridge /vapi-webhook now 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.