CraftNudge

Cold email that knows when to stop. CraftNudge sends multi-step sequences from inboxes you already own, follows up in the same thread, and stops the moment somebody answers. I designed and built every part of it, and it is live: the sending engine, the reply detection, the dashboard, the billing, the API, and the product site it sells from.

PROJECT
My own SaaS product
ROLE
Designer & developer, end to end
STACK
TypeScript · Fastify · Next.js · PostgreSQL
The sequence editor: variables, a first email with two A/B variants, and a wait before the follow-up
FIG. 01 · Five screens of the live product. Click a label to hold one.
01 · THE PROBLEM

Every outreach platform meters the thing you least want metered.

Cold email tools charge by the number of people you are allowed to talk to. The cheap plan caps your contacts, and the moment the list grows, the bill roughly doubles for capacity you already had. On top of that, your list, your replies and your whole sending history sit on someone else's server, the platform tells you your health is fine without showing you a single thing the receiving server said, and the software keeps emailing people who have already answered you. I wanted the opposite: my own inboxes, my own list, the raw SMTP reply behind every send, and a sender that shuts up as soon as somebody replies.

✕Pricing meters contacts and emails, so a bigger list costs more than the sending it causes.
✕Your list, your replies and your sending history live in somebody else's database.
✕A made-up health score instead of what the receiving server actually replied.
✕A follow-up that goes out after a reply is the fastest way to lose that reply.
02 · WHAT I BUILT

The whole platform, one developer, end to end.

→
Sequences that thread
Any number of steps, waits measured in days, hours or minutes, and A/B variants per step. Leave a follow-up's subject empty and it inherits the first one and lands in the same thread, so the conversation reads like a person wrote it.
→
Sending that behaves itself
Rotation across inboxes, a daily cap per inbox and a warmup ramp that belongs to the domain rather than the inbox, caps per sending domain, a minimum gap with random jitter, a separate cap on new people per day, and a schedule window with its own timezone and working days.
→
Replies stop the sequence
The worker polls IMAP, classifies each message as a reply, a bounce or an out-of-office, matches it to the exact send through the message id, and stops the sequence there. Everything lands in one inbox to read, sort and answer, in the same thread it came from.
→
Deliverability, from the source
Every send stores what the receiving server actually said. The reports turn those codes into plain English, separate a bad address from a reputation block, and chart each sending domain against the ramp it was allowed that day.
→
Guardrails for the sending reputation
One-click unsubscribe on every send, per RFC 8058, automatic blocklisting, dead domains flagged by an MX check before they cost a bounce, and a guard that pauses any inbox that crosses the bounce limit in seven days.
→
Workspaces, agencies and billing
Every workspace is isolated, an agency can hold client workspaces and report per client, inbox passwords are AES-256-GCM encrypted before they reach the database, and Stripe handles the plans.
→
API-first, and its own product site
Every action the dashboard performs is a documented API call, so a pipeline can drive the whole thing unattended. The site that sells it is mine too: pricing, docs, a changelog, feature pages and the comparisons, all built in the same codebase.
The CraftNudge home page: cold email that shows its work, with a live send log of SMTP responses
FIG. 02 · The product site is part of the build: craftnudge.com, with pricing, docs, a changelog and the comparison pages.
03 · THE LINE

What it deliberately does not do.

→
No warmup pool
Warming inboxes by trading mail with strangers is a different product with a different risk profile. Mixing it in would make the sending engine harder to reason about, and reputation is the one thing you cannot rebuild quickly.
→
No lead database
Selling contact lists and sending to them are separate jobs. Keeping them separate is what lets the list stay yours, on your server, in a table you can read.
→
No AI writing your emails
The bottleneck in cold email is not typing. A generated first line that reads as generated costs more replies than it wins, so the product stays out of the way and sends what you wrote.
→
No invented health score
Other tools grade your inbox out of a hundred and never say how. This one shows the SMTP response behind every send, because the fix for a bad address and the fix for a blocked reputation are opposites.
6 weeks
FIRST COMMIT TO LIVE PRODUCT
655
COMMITS, ONE DEVELOPER
62
TEST SUITES
THE HONEST TEST
CraftNudge runs my own outreach. If it drops a reply, I am the one who loses the client.
NEXT CASE STUDY
Clarion
→
© 2026 Priyank Maniar · Independent software developer ← Back to the surface