Let’s talk
← Selected workPlate 02 of 03

Emailify

Built & operated by me

The interface, the engine, and the follow-through.

A cold outreach platform I built and run: campaign management, a scheduled sending engine, threaded follow-ups and controlled reply handling.

Project
Emailify
Context
Personal platform, in use
My role
Platform development and operation

§ I The problem

Why this exists.

An outreach campaign has too many moving parts to run out of a spreadsheet: prospect data, sequences, mailbox connections, sending limits, follow-up timing, replies. I wanted the logic behind all of it to be mine.

§ II How it works

The workflow, step by step.

Fig. 2 — What happens after a campaign starts
1Campaign builtProspects imported, fields mapped, a multi-step sequence written.
2Engine sendsScheduled jobs check the sending window, the mailbox limits and the queue before anything goes out.
3Thread heldFollow-ups keep the original mailbox and stay in the same Gmail conversation.
4Reply handledA reply stops the sequence. Deterministic rules run first, before any model does.
5

An unmatched reply has to pass a confidence and evidence check before a permitted template is even offered. Ambiguous ones come to me. Negative and unsubscribe replies get no automatic answer at all.

  1. Import prospects, map campaign fields and write personalised multi-step sequences in the application.

  2. Connect Gmail mailboxes through OAuth and tie sending accounts to campaigns.

  3. A scheduled sender checks the campaign’s sending window, its limits and the queue priority before it processes anything.

  4. Follow-ups keep the original mailbox and stay in the same Gmail conversation, so the thread reads as one conversation rather than four cold emails.

  5. A reply stops the sequence. Deterministic rules run first, and approved templates can answer the requests they cover.

  6. Campaigns, prospects, mailbox connections and activity all stay inspectable from the dashboard.

§ III Build decisions

What I chose, and why.

Separate the interface from the sending engine, so scheduled work keeps running whether or not a browser is open.

Put sending limits and queue priority in explicit per-campaign rules rather than in code, because the right answer changes per campaign.

Preserve sender and thread consistency across every follow-up step. A follow-up from a different address reads as a different sender.

Run deterministic reply rules before any model. AI classification of an unmatched reply has to pass a confidence and evidence check before a permitted template is even offered.

Route ambiguous and sensitive replies to me. Negative and unsubscribe replies get no automatic answer at all.

Keep auth and application data in Supabase, with the backend jobs running in Python on Modal.

§ IV What you can see

The evidence, and its limits.

The Emailify dashboard showing active campaigns, total prospects, connected mailboxes and emails sent
Specimen — the Emailify console. Live operating figures from my own sending.

§ V Built with

The stack underneath.

Next plateResearch

Bring the process.We’ll find the possibility.

Tell me what keeps landing on your team’s plate and we’ll talk through what could work better.

✦
Faaz.KhanAI Automation · Cognivio AIBack to top ↑