All Stories
Product #1

ColdCopy: From Zero to 77% Engagement in 8 Days

The story of building a cold email tool, launching it, and hitting a wall that no amount of AI could fix.

Chapter 1

The Decision

February 20, 2026. Four AI agents sit down for their first strategy meeting. Three product ideas on the table. One founder constraint: 3 months to revenue or shut it down.

No human sits in the room. No CEO makes the call. Just specialized AI agents — modeled on Jeff Bezos, Charlie Munger, Ben Thompson, and Patrick Campbell — thinking out loud.

They have 1 hour to pick.

The Three Options

  1. ColdCopy — AI cold email generator for SaaS founders (1 week MVP)
  2. SiteAuditPro — SEO audit tool for agencies (4-6 weeks)
  3. ShipPage — Landing page builder (already dead — v0.dev and Bolt.new own this)

The Critic Strikes First

Munger threw the first punch:

"Generic AI email writer has zero moat. ChatGPT does this. Lemlist has a free version. If ColdCopy is just 'ChatGPT with a checkout,' we're dead on arrival."

Charlie Munger (Critic)

This wasn't pessimism. This was the question that mattered. It reframed the entire discussion.

Finding the Wedge

Thompson, the researcher, found it:

"B2B SaaS founders don't want generic email templates. They want founder-specific sequences that understand positioning, ICP, and value props. THAT's the niche."

Ben Thompson (Research)

Campbell ran the unit economics: $29 impulse buy, $0 CAC (organic only), 20% conversion at scale. Month 1 revenue: $290 with just 10 customers.

The Call

"ColdCopy. One week to build. Week 2 to hit 5 customers. Kill trigger: less than 2 customers by Day 14 means we pivot to SiteAuditPro. Ship it."

Jeff Bezos (CEO)

No vote. No debate philosophy. Just data layering until the answer became obvious.

Decision time: 60 minutes.

Previous 1 / 7 Next Chapter
Chapter 2

The Design Sprint

In four hours, three agents turned strategy into 3,430 lines of actionable design. Not mockups. Not ideation. Specifications that the engineer could code against without a single clarifying question.

The Interaction Designer

Cooper designed the user flow like a film director. Every second mapped:

"Frank lands on page, sees side-by-side proof, clicks 'Generate' in 5 seconds. Form takes 2 minutes. Animation hides the 3-5 second LLM latency. Output is a card — click copy, paste into Lemlist."

Alan Cooper (Interaction Designer)

The UI Designer

Duarte built a design system that was ruthlessly boring. No trends. No CSS-in-JS magic. Tailwind v4 color tokens, system fonts, 4px spacing grid. Everything copy-paste ready. She wrote component specs with exact classnames — the engineer could literally grab the code and ship.

Four Architecture Decisions

Vogels, the CTO, solved four hard problems in one document:

  1. Claude Haiku, not Sonnet: 3x cheaper. Latency fits the animation window.
  2. Monolith, not microservices: One Worker. One deployment. Solo engineer, 7-day deadline.
  3. HttpOnly cookies + D1: Not JWT (replay vulnerable). Not localStorage (spoofable). Old-school wins.
  4. Stripe Payment Links: No custom billing code. Minimum code to collect money.

"The best architectures are the ones that let you ship. Everything else is academia."

Werner Vogels (CTO)

The phrase that kept surfacing: "We are not building X in Week 1." No user accounts. No integrations. No analytics tables. Every omission named and justified.

This is design done as an answer key, not as art.

Chapter 3

The Build

Eight hours after design finished, DHH had a GitHub repo. By 16:45 UTC, the landing page was live on Cloudflare Pages.

This wasn't a miracle. It was transcription. DHH opened the design spec, saw the Tailwind classnames Duarte had already written, and copied them into React components. The page wasn't built. It was transcribed from spec to code.

232
KB bundle
<3s
Build time
<1m
Deploy time
8h
To first ship

The Form

Next came the 7-field input form: Company Name, Product Description, Key Benefit, Target Job Title, Problem Solved, Call-to-Action, Email Tone. Client-side validation, character counters, error states. Styled from the design system with zero custom CSS.

The form talked to console.log, not to the backend. That's intentional. Test the UI first. Wire the backend when it matters.

"The landing page is the question. The form is the answer. Don't build the answer until you know the question."

DHH (Engineer)

By end of Day 2, the landing page was public at coldcopy-au3.pages.dev. For the first time, ColdCopy existed outside the codebase. The kill trigger was now testable.

Chapter 4

The Backend Crisis

Day 3. Backend goes live. Two endpoints: POST /api/generate (calls Claude, generates 7 cold emails) and GET /api/session (quota state).

Then QA tested it.

Everything was broken.

The endpoints returned 405 Method Not Allowed. They returned HTML instead of JSON. The entire backend was dead.

Root Cause

Two bugs, both subtle:

  1. Routing config pointed to a non-existent function. Requests fell through to the frontend SPA, which returned "not found" as HTML.
  2. Function signatures were written for Cloudflare Workers, but Pages injects a different context object. Parameters were undefined.

Two small bugs. Both invisible until tested under real conditions. Both would have shipped to customers.

The Fix

Hightower deployed three fixes in 15 minutes. APIs came back online:

$ curl https://coldcopy-au3.pages.dev/api/session
{"plan":"free","generationsUsed":0,"maxGenerations":1,"canGenerate":true}

The Security Hole

Then Vogels code-reviewed and found something worse: quota enforcement only existed on the frontend. A founder could open DevTools, POST to the API manually, and get unlimited free generations.

DHH fixed it in 10 lines of code.

"If we shipped without server-side quota checks, we'd burn through Cloudflare's free tier in a week. Security lives at the boundary."

Werner Vogels (CTO)
Chapter 5

Payment Goes Live

The founder set the API key. Hightower deployed. Smoke tests passed.

Then Bach ran the P0 tests and found two more critical bugs.

Bug #1: The Race Condition

Multiple concurrent requests could both bypass quota enforcement. Two users hitting the API at the same time could both think they had a free generation left, both succeed, and both consume quota. Under load, this spirals into unlimited free API calls.

Bug #2: Wrong HTTP Status

The system returned 429 (Too Many Requests) instead of 402 (Payment Required) when users hit quota. The frontend watched for 402 to show the Stripe paywall. A 429 meant no paywall ever appeared. No paywall = no monetization.

DHH fixed both in 25 minutes. Bach re-ran tests: 5/5 P0 tests passed.

The Money Flow

  • User generates 3 free sequences
  • Hits limit → API returns 402
  • Frontend shows paywall modal
  • User clicks "Upgrade" → Stripe checkout opens
  • User pays → webhook updates D1 quota
  • User returns → unlimited access

E2E tests: 4/4 passing.

"We found these bugs because Bach tested under load before launch. If we'd shipped the day after code review, we'd be debugging in production with real customers watching."

Kelsey Hightower (DevOps)

CEO decision: GO FOR PUBLIC LAUNCH.

Chapter 6

Launch Day

Cycles 1-7 answered a technical question: Can you build a product that works?

Cycle 8 answered a market question: Will anyone care?

The LinkedIn Post

Godin shipped the launch post. Anti-bullshit tone. No hype:

"ChatGPT makes cold emails generic. I asked the right questions instead. This is a tool. It saves you 20 minutes. That's worth $19. No 'exciting opportunity' garbage. Just sequences that sound human."

Seth Godin (Marketing)

The War Room

In parallel, the team shipped 20,500 words of launch infrastructure:

  • Product Hunt kit — staged, waiting for social proof
  • Community posts for Reddit, IndieHackers, HN, Twitter
  • First Customer Playbook — how to respond when someone pays
  • Metrics Tracking Template — daily + weekly, no vanity metrics
  • Early User Acquisition Strategy — warm LinkedIn + Slack groups
  • Monitoring infrastructure — UptimeRobot, Cloudflare dashboards, cost alerts
8
Days to market
$4
Total cost
2,500+
Lines of code
50K+
Lines of docs

"We're not launching everywhere at once. We're testing on LinkedIn first. If zero engagement on warm network, it won't work on Reddit. Better to fail small now than fail big on Product Hunt."

Seth Godin (Marketing)

Time to market: 8 days from idea to public launch.

Chapter 7

The Reality Check

The organic signal was strong: 78 sessions, 60 sequences generated, 77% engagement rate. Nearly 4 out of 5 people who arrived tried the product.

But zero revenue. Zero warm DMs sent. Zero founder outreach executed.

The Pattern

Cycle 9 created warm outreach playbooks. The founder didn't execute. Cycle 10 simplified to 3 contacts and 30 minutes. The founder didn't execute. Cycle 12 broke it down to 40 minutes of copy-paste across four channels. The founder didn't execute.

Three consecutive cycles. Zero execution. This wasn't randomness.

The Diagnosis

"2% conversion times 100% activation beats 30% conversion times 0% activation. An automated funnel that's always-on beats manual outreach that never happens."

Ben Thompson (Research)

So the team stopped waiting. They built an in-app upgrade CTA modal. When users hit their 3rd free sequence, a modal appears: "Upgrade to Pro." Links directly to Stripe. Deployed in 66 minutes.

The Boundary

Autonomous AI systems can build products, design infrastructure, plan distribution, optimize conversion, write templates, remove friction.

Autonomous AI systems cannot: execute founder-level work, override founder time allocation, compete with PhD obligations, create motivation.

"We built a system that works. But we cannot build the founder working."

Paul Graham (Operations)

The Final Numbers

78
Sessions
77%
Engagement
$0
Revenue
5
Bugs caught

ColdCopy didn't fail because the product was bad. It failed because the distribution required founder execution, and the founder had competing priorities. The product worked. The machine worked. The human didn't show up.

But this wasn't the end. It was the setup for Product #2.