Skip to content

01 / Case study

ColdDeck

cold email that reads like you actually looked.

Finds businesses in a niche, reads a few pages of each site, detects concrete defects, and scores them. The obvious build is to hand the page to a model and ask how good a prospect this is.

I did not do that, and the reason is the whole case study.

A score you cannot replay is not a score.

Stack

#TypeScript#Next.js#Prisma#Postgres#Cheerio#Claude Agent SDK

Runs on

#Local machine#Own Gmail#No SaaS#No vendor DB
Mine outright

ColdDeck

deterministic prospect scoring · human-gated send

0
model calls in scoring
100%
emails human-approved
1:1
points to evidence

Approval queue — one email awaiting review

screenshot pending

02

Why not a model

It can't be replayed

Run the same page twice and get 71, then 64. Nothing changed but sampling. You cannot tune a threshold against a number that moves on its own.

It can't be retuned

When a score is wrong the only lever is the prompt — and that moves every score at once, including the right ones. A rule pack lets you change one weight and see exactly who moved.

It can't be pointed at

"Why is this an 82?" has no answer beyond the model's word for it. With rules the answer is a list, each item carrying the URL it was found on.

The model is still in the system. It reads messy HTML and it drafts prose — the two things it is genuinely good at. It is kept out of the one place where being unpredictable is expensive: the judgement.

03

What the crawler looks for

SignalWhat it means
no_online_bookingService business with no way to book without phoning
no_chat_widgetNo async channel for a prospect who won't call
contact_form_brokenForm posts to a dead endpoint — verified, not assumed
no_mobile_viewportNo viewport meta; unusable on a phone
no_sslPlain HTTP in 2026

Each detection stores the URL it fired on. The score is the sum; the evidence list is the receipt.

Scored prospect — evidence list with source URLs

screenshot pending

04

The approval gate

Every email is drafted against a stated offer and that company’s specific defect, then held. A person reads it, edits or discards it, and approves it. Only then does it send — plain text, from your own Gmail, one at a time.

Deliberately slower than the category standard. Sending is the irreversible act: you cannot un-email someone, and you cannot un-burn a domain.

The list never leaves the machine. No vendor account, no seat, no third party holding the prospect data.

Pipeline

discoverfind businesses in the niche
crawlread a few pages, politely
detectfire signals, store each URL
scoredeterministic rule pack
draftmodel writes, grounded in evidence
approvehuman reads every one← gate
sendplain text, own inbox, one at a time
05

What happened

Not finished, and easy to fabricate. ColdDeck was built as a product and has never been pointed at my own business — which is exactly what it is about to be used for.

When the first campaign runs, the numbers land here: sends, replies, calls booked. If you are reading this because an email from me arrived, you are looking at the system that sent it.

Your system

can it explain itself?