Today was about one thing: making sure no lead falls through the cracks.
The audit pipeline was working. People could run audits, get reports, talk to the chatbot. But there were holes. Emails that didn't render right. Conversations that dead-ended. Leads that disappeared after the first email. Clients that heard nothing between payment and delivery.
We fixed all of it.
What We Shipped
Email Redesign — Cross-Client, Cross-Device
The audit report email used a dark theme with neon green (#00FFB2) accents. Looked great in the design file. Looked terrible in Gmail.
Gmail strips <body> background colors. Dark background disappears, leaving white text on a white screen. The green becomes eye-searing on light backgrounds.
The fix: Light-first design. White background, dark text, emerald green (#059669) accents. Added @media (prefers-color-scheme: dark) for Apple Mail and Outlook. Rounded buttons, proper color-scheme meta tags, Apple message reformatting disabled.
Every email in the system now uses this design — audit reports, welcome emails, follow-ups, milestone updates.
Inbound Email Auto-Reply — From Broken to Working
When someone replies to a VibeTokens email, it goes to hello@vibetokens.io. A webhook fires, Claude reads the email, classifies it (intake reply, workshop inquiry, existing client, general question, or spam), and auto-replies as "Murph."
What was broken:
- The Claude model ID was wrong (
claude-sonnet-4-6instead ofclaude-sonnet-4-20250514) — every auto-reply was silently 401'ing - The MX record pointed to AWS SES instead of Resend — emails weren't even arriving
- The webhook URL used bare domain (
vibetokens.io) which 307-redirects towww— Resend doesn't follow redirects - The signature verification used plain HMAC-SHA256 but Resend uses Svix (different signing format, base64 not hex)
Four bugs. Each one independently killed the entire flow. All fixed in one session.
Conversion Funnel — No More Dead Ends
The audit report said "talk to our chatbot." The chatbot said "I'll have Jason reach out." Then nothing happened.
Now:
- Report page has dual CTAs: "Let's Talk" (chatbot) + "Email Jason Directly" (skip the chat)
- Chatbot shows a "Ready? Let's Go" button after 4+ messages, plus a persistent footer with "Email Jason →"
- Chatbot AI gives pricing ballpark ("plans start at $199/mo") instead of deflecting. Ends conversations with clear next steps.
Every touchpoint now leads somewhere.
Follow-Up Email Sequence — 3 Emails Over 14 Days
If someone runs an audit and doesn't respond, they used to be gone forever. Now:
- Day 3: "The #1 thing holding back [Business Name]" — highlights their worst audit finding with a red callout
- Day 7: "Your competitors are fixing this" — cost of inaction, soft push to chat
- Day 14: "Last check-in" — report stays live forever, reply anytime, no pressure
Runs daily via GitHub Actions. Each email BCC'd to Jason. Includes "reply stop to unsubscribe."
Client Milestone Emails — Trust Through Transparency
After payment, clients got a welcome email and then silence for 14 days. That's a trust problem.
Now they get progress updates:
- Day 3: "Structure is built" — visual checklist with checkmarks and circles
- Day 7: "Site is taking shape" — homepage, services, locations done
- Day 10: "Almost there" — SEO, blog, mobile optimization
- Day 14: "Ready for review" — approval request with next steps
Each email shows exactly what's done and what's remaining. No mystery.
Onboard → Notion Migration
The /onboard form stored client data to the filesystem — which doesn't exist on Vercel serverless. Every client onboard was silently failing in production.
Built a new lib/onboard/clients.ts module (dual-mode: filesystem locally, Notion on Vercel) following the same pattern as the audit storage. File uploads gracefully skip on Vercel instead of crashing.
SEO Metadata for Funnel Pages
The /start page — linked from 85 blog posts, the #1 CTA target — had no <title> or description. Now all funnel pages have proper metadata. Audit and chat pages are noindexed (private content).
The Pipeline Now
Cold visitor → blog/social/direct → /start
→ Audit runs (5 modules, ~2 min)
→ Email delivered (light-first, cross-device)
→ If no response → 3 follow-ups over 14 days
→ Report page (dual CTA: chat OR email)
→ Chatbot (pricing, clear next steps, conversion CTA)
→ Reply to email → Claude auto-replies as Murph
→ /onboard → Stripe → welcome email
→ Auto-build triggers immediately
→ Site live at clientname.vibetokens.io (minutes, not weeks)
→ "Your site is live" email with preview link
→ Client reviews → domain connection → done
Every step has a clear next action. Every email works on every device. Every lead gets follow-up. Every client gets a site the same day they pay.
The Auto-Build Pipeline
This is the big one. We killed the 14-day delivery timeline.
When a customer pays, the system:
- Pulls their onboarding data from Notion
- Runs 6 parallel Claude API calls to generate all page content
- Builds a complete Next.js site (homepage, service pages, location pages, about, contact, FAQ, blog posts)
- Pushes everything to a GitHub repo
- Deploys to clientname.vibetokens.io
- Emails the customer their preview link
No manual intervention. No "we'll get back to you in 14 days." A plumber fills out a form, pays, goes back to a job, and by the time he's eating lunch his website is live.
That's the kind of thing people tell their buddies about. That's the word-of-mouth engine.
The Brand Voice
We defined the VT voice today: confident chill. Talk like a contractor who also knows SEO. Not a marketer. Not a consultant. A builder.
Every email is now plain text — two sentences, breathe, two more. Research shows plain text gets 21-42% more clicks than HTML for this kind of outreach. Feels like a real person, not a marketing automation.
The audit report email stays HTML (it's a branded deliverable). Everything else — follow-ups, milestone updates, auto-replies, welcome emails — plain text.
By the Numbers
- 25+ commits pushed to production
- 950+ lines of site builder code shipped
- 10+ email templates written in VT voice (plain text)
- 9 new API routes built
- 4 bugs fixed that were silently breaking the inbound pipeline
- 3 conversion CTAs added across chatbot + report page
- 0 manual touchpoints from payment to live website
