<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Edward Sam</title>
    <description>The latest articles on DEV Community by Edward Sam (@edward_superkabe).</description>
    <link>https://dev.to/edward_superkabe</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3842269%2Fc6d5454a-7829-4a86-8bde-78937964e26b.png</url>
      <title>DEV Community: Edward Sam</title>
      <link>https://dev.to/edward_superkabe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edward_superkabe"/>
    <language>en</language>
    <item>
      <title>Introducing Superkabe: Cold Email Infrastructure Protection</title>
      <dc:creator>Edward Sam</dc:creator>
      <pubDate>Sat, 18 Apr 2026 18:09:41 +0000</pubDate>
      <link>https://dev.to/edward_superkabe/introducing-superkabe-cold-email-infrastructure-protection-3oaa</link>
      <guid>https://dev.to/edward_superkabe/introducing-superkabe-cold-email-infrastructure-protection-3oaa</guid>
      <description>&lt;p&gt;We burned 12 domains in 3 months.&lt;/p&gt;

&lt;p&gt;Not because we were spamming. We were running legitimate B2B outreach — 40 domains, 150 mailboxes, sending through Smartlead. Our Clay enrichment was solid. Our copy was personalized. Our lists were targeted.&lt;/p&gt;

&lt;p&gt;But nobody was watching the infrastructure.&lt;/p&gt;

&lt;p&gt;A bounce rate spike at 2am on a Saturday. A DNS record that silently dropped after a registrar update. A catch-all domain that accepted every email during verification but bounced 40% during delivery. A single bad lead list that cascaded across 6 mailboxes before anyone noticed.&lt;/p&gt;

&lt;p&gt;By Monday morning, 12 domains were blacklisted. Recovery took 6 weeks. Some never recovered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's why we built &lt;a href="https://www.superkabe.com" rel="noopener noreferrer"&gt;Superkabe&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gap in the Cold Email Stack
&lt;/h2&gt;

&lt;p&gt;Every cold email team has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enrichment&lt;/strong&gt; — Clay, Apollo, ZoomInfo (finds the leads)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sending&lt;/strong&gt; — Smartlead, Instantly, EmailBison (sends the emails)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warmup&lt;/strong&gt; — Instantly, Lemwarm, Warmup Inbox (builds initial reputation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What's missing? &lt;strong&gt;The layer that protects everything during live sending.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Warmup tools stop monitoring once you launch real campaigns. Sending platforms don't auto-pause when bounce rates spike. Nobody checks if your DNS records broke at 3am.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       BEFORE SUPERKABE              WITH SUPERKABE

Clay ──→ Smartlead ──→ Send    Clay ──→ SUPERKABE ──→ Smartlead ──→ Send
          (hope for                    │                              │
           the best)                   ├─ Validate                    │
                                       ├─ Classify ESP                │
                                       ├─ Route to best mailbox       │
                                       │                              │
                                       └──── Monitor ◄────────────────┘
                                              │
                                              ├─ Auto-pause if needed
                                              └─ 5-phase healing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Superkabe Does (and Doesn't Do)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it IS:
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Deliverability Protection Layer (DPL)&lt;/strong&gt; — active middleware between your lead sources and sending platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Validates every lead before sending&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every email runs through: syntax validation → MX record lookup → disposable detection (30,000+ providers) → catch-all detection → conditional MillionVerifier API probe. Invalid leads never reach your sender.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Classifies recipients by ESP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MX record pattern matching classifies each recipient as Gmail, Microsoft 365, Yahoo, or Other. This classification drives the mailbox routing downstream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Routes to the best-performing mailboxes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the differentiator. Superkabe tracks every email sent, bounced, and replied per mailbox per recipient ESP. When routing a lead, it scores each campaign mailbox by their &lt;strong&gt;30-day bounce rate to that specific ESP&lt;/strong&gt; and pins the top 3 performers.&lt;/p&gt;

&lt;p&gt;A Gmail mailbox with 2% bounce rate to Gmail? Skipped. An Outlook mailbox with 0.1% bounce rate to Gmail? Selected. Performance beats provider matching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Monitors in real time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every mailbox, domain, and campaign — bounce rates, DNS health (SPF, DKIM, DMARC), SMTP/IMAP connectivity, 410 blacklists, engagement signals. Continuously. Not once a day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Auto-pauses before damage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When bounce rate crosses the threshold, Superkabe physically pauses the mailbox on the sending platform via API. No human intervention. The mailbox stops sending before the domain burns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Heals automatically&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paused mailboxes enter the 5-phase healing pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pause → Quarantine → Restricted Send → Warm Recovery → Healthy
         (DNS check)   (15 clean sends)  (50 sends/3d)  (full capacity)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each transition is gated by health checks, not timers. The mailbox proves it can send cleanly before graduating.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it is NOT:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Not a sending platform (use Smartlead, Instantly, EmailBison)&lt;/li&gt;
&lt;li&gt;Not a warmup tool (use Instantly, Lemwarm)&lt;/li&gt;
&lt;li&gt;Not a CRM (use HubSpot, Salesforce)&lt;/li&gt;
&lt;li&gt;Superkabe &lt;strong&gt;protects the infrastructure&lt;/strong&gt; these tools operate on&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Lead Control Plane
&lt;/h2&gt;

&lt;p&gt;Upload CSV lead lists directly into &lt;a href="https://www.superkabe.com/product/lead-control-plane" rel="noopener noreferrer"&gt;Superkabe's Email Validation dashboard&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Drop a CSV → auto-detect column mapping&lt;/li&gt;
&lt;li&gt;Every email validated + classified by ESP&lt;/li&gt;
&lt;li&gt;Results: "237 uploaded → 12 invalid, 8 risky, 217 valid"&lt;/li&gt;
&lt;li&gt;Select valid leads → route to any campaign across any platform&lt;/li&gt;
&lt;li&gt;Or export as clean CSV (standalone validation)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This closes the direct-upload gap. Leads uploaded straight into Smartlead bypass validation entirely. Through Superkabe, every lead is checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Domains&lt;/th&gt;
&lt;th&gt;Mailboxes&lt;/th&gt;
&lt;th&gt;Validation Credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;$49/mo&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;10K/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Growth&lt;/td&gt;
&lt;td&gt;$199/mo&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;50K/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale&lt;/td&gt;
&lt;td&gt;$349/mo&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;700&lt;/td&gt;
&lt;td&gt;100K/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;14-day free trial, no credit card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Tools
&lt;/h2&gt;

&lt;p&gt;We also built free public DNS tools — no signup required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.superkabe.com/tools/spf-lookup" rel="noopener noreferrer"&gt;SPF Record Lookup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.superkabe.com/tools/dkim-lookup" rel="noopener noreferrer"&gt;DKIM Record Lookup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.superkabe.com/tools/dmarc-lookup" rel="noopener noreferrer"&gt;DMARC Record Lookup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.superkabe.com/tools/spf-generator" rel="noopener noreferrer"&gt;SPF Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.superkabe.com/tools/dkim-generator" rel="noopener noreferrer"&gt;DKIM Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.superkabe.com/tools/dmarc-generator" rel="noopener noreferrer"&gt;DMARC Generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check your domain's authentication setup in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack We Recommend
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Layer 1: Enrichment    → Clay (lead data)
Layer 2: Validation    → Superkabe (validate + classify + route)
Layer 3: Sending       → Smartlead or Instantly (campaigns + sequences)
Layer 4: Protection    → Superkabe (monitor + auto-pause + heal)
Layer 5: Diagnostics   → Google Postmaster (free) + MXToolbox (free)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Layers 2 and 4 are the same tool — Superkabe covers both the pre-send pipeline and the post-send protection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack (for the curious)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 16 (App Router), TypeScript, Tailwind CSS, deployed on Vercel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Node.js, Express, Prisma ORM, PostgreSQL, deployed on Railway&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations&lt;/strong&gt;: Smartlead API, Instantly API, EmailBison API, Clay webhooks, Slack webhooks, MillionVerifier API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: 60-second polling intervals, 410 DNSBL list checks, webhook-driven bounce processing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;If you're running cold outreach at scale and you don't have an infrastructure protection layer, you're one bad lead list away from burning domains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.superkabe.com/pricing" rel="noopener noreferrer"&gt;Start free trial →&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.superkabe.com/docs" rel="noopener noreferrer"&gt;Read the docs →&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.superkabe.com/infrastructure-playbook" rel="noopener noreferrer"&gt;Read the Infrastructure Playbook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://www.superkabe.com" rel="noopener noreferrer"&gt;Superkabe&lt;/a&gt;. Questions? &lt;a href="https://www.superkabe.com/contact" rel="noopener noreferrer"&gt;Contact us&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ai</category>
      <category>automation</category>
      <category>startup</category>
    </item>
    <item>
      <title>Building an Outbound Email Engine That Doesn't Burn Your Domains (Architecture Deep-Dive)</title>
      <dc:creator>Edward Sam</dc:creator>
      <pubDate>Tue, 24 Mar 2026 22:30:11 +0000</pubDate>
      <link>https://dev.to/edward_superkabe/building-an-outbound-email-engine-that-doesnt-burn-your-domains-architecture-deep-dive-1dpg</link>
      <guid>https://dev.to/edward_superkabe/building-an-outbound-email-engine-that-doesnt-burn-your-domains-architecture-deep-dive-1dpg</guid>
      <description>&lt;p&gt;I'm a developer who got dragged into fixing our sales team's email infrastructure. What I found was horrifying.&lt;/p&gt;

&lt;p&gt;No monitoring. No validation. No health checks. They were sending thousands of cold emails through mailboxes with 8% bounce rates, wondering why half their emails landed in spam. When a domain got blacklisted, their solution was to buy a new one and start over.&lt;/p&gt;

&lt;p&gt;So I built a system to fix it. This post is the technical architecture behind it — how data flows from lead enrichment to email send, what breaks at each stage, and how we automated the recovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  System Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clay (enrichment)
  → Superkabe (validation + routing + monitoring)
    → Smartlead / Instantly (sending)
      → Bounce/reply webhooks back to Superkabe
        → Slack (alerts)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple on paper. The complexity is in the failure modes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 1: Lead Ingestion
&lt;/h2&gt;

&lt;p&gt;Leads arrive via two paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clay webhook&lt;/strong&gt; — automated pipeline, fires when enrichment completes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSV upload&lt;/strong&gt; — manual bulk import&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both hit the same &lt;code&gt;processLead()&lt;/code&gt; function. This is important — one ingestion path, regardless of source. No special cases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simplified ingestion flow&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;processLead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IncomingLead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Step 1: Validate the email BEFORE anything else&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;validation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;emailValidationService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;validation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;invalid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;saveLead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BLOCKED&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validation&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Never reaches the sending platform&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 2: Health gate classification&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;health&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;classifyLead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// GREEN = safe, YELLOW = careful routing, RED = block&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 3: Route to campaign based on persona + health&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;campaign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;routingService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 4: Push to sending platform&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sendingPlatform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pushLead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;campaign&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The email validation in Step 1 is the piece most outbound setups skip entirely. They trust the data source to provide valid emails. Bad idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 2: Email Validation (the part everyone skips)
&lt;/h2&gt;

&lt;p&gt;Our validation runs in two layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internal checks (free, fast, runs on every lead):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Syntax validation (regex, but the proper RFC 5322 kind, not the naive kind)&lt;/li&gt;
&lt;li&gt;MX record lookup via DNS — does this domain even accept email?&lt;/li&gt;
&lt;li&gt;Disposable domain check against a maintained list (~30k domains)&lt;/li&gt;
&lt;li&gt;Catch-all detection — does this domain accept literally any address?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;API verification (paid, conditional):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only triggers when internal checks return low confidence&lt;/li&gt;
&lt;li&gt;Hits MillionVerifier's API to do an actual SMTP-level probe&lt;/li&gt;
&lt;li&gt;They maintain rotating IPs so the probes don't get blocked
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ValidationResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Always run internal checks&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;internal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runInternalChecks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Check domain cache first (huge cost saver)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domainInsight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getDomainInsight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;extractDomain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domainInsight&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;isCatchAll&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;risky&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;internal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;isCatchAll&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// API fallback based on tier&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;shouldCallApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;millionVerifier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;mergeResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;apiResult&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;DomainInsight&lt;/code&gt; cache is the money saver. If you have 5,000 leads at &lt;code&gt;@bigcorp.com&lt;/code&gt;, you check ONE email against the API, learn it's a catch-all domain, and cache that. 4,999 API calls saved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 3: Health Gate
&lt;/h2&gt;

&lt;p&gt;After validation, each lead gets a health classification that determines routing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Classification&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;80-100&lt;/td&gt;
&lt;td&gt;GREEN&lt;/td&gt;
&lt;td&gt;Routes to high-volume campaigns normally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50-79&lt;/td&gt;
&lt;td&gt;YELLOW&lt;/td&gt;
&lt;td&gt;Routes to campaigns but with per-mailbox risk caps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0-49&lt;/td&gt;
&lt;td&gt;RED&lt;/td&gt;
&lt;td&gt;Blocked. Never reaches a sending platform.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;YELLOW leads get distributed carefully. We cap risky leads per mailbox — a mailbox sending 60 emails won't get more than 2 high-risk leads in that batch. This prevents any single mailbox from eating a disproportionate number of bounces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 4: Sending Platform Integration
&lt;/h2&gt;

&lt;p&gt;We push leads to Smartlead and Instantly via their APIs. Both have quirks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smartlead:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate limited to 10 requests per 2 seconds&lt;/li&gt;
&lt;li&gt;Campaign pause is &lt;code&gt;POST /campaigns/{id}/status&lt;/code&gt; with &lt;code&gt;{ status: 'PAUSED' }&lt;/code&gt; — NOT a PATCH on the campaign object (we learned this the hard way)&lt;/li&gt;
&lt;li&gt;Resume uses &lt;code&gt;{ status: 'START' }&lt;/code&gt;, not &lt;code&gt;ACTIVE&lt;/code&gt; (again, learned the hard way)&lt;/li&gt;
&lt;li&gt;Removing a mailbox from a campaign is &lt;code&gt;DELETE /campaigns/{id}/email-accounts&lt;/code&gt; with the account ID in the request body&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Instantly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pause: &lt;code&gt;POST /campaigns/{id}/pause&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resume: &lt;code&gt;POST /campaigns/{id}/activate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Cleaner API overall but less granular mailbox control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We built a platform adapter pattern so the rest of our system doesn't care which sender is being used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;PlatformAdapter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;pauseCampaign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;orgId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;campaignId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;resumeCampaign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;orgId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;campaignId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;addMailboxToCampaign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;orgId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;campaignId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mailboxId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;removeMailboxFromCampaign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;orgId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;campaignId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mailboxId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three implementations: &lt;code&gt;SmartleadAdapter&lt;/code&gt;, &lt;code&gt;InstantlyAdapter&lt;/code&gt;, &lt;code&gt;EmailBisonAdapter&lt;/code&gt;. Same interface. The monitoring system calls &lt;code&gt;adapter.removeMailboxFromCampaign()&lt;/code&gt; and doesn't need to know if it's hitting Smartlead's weird DELETE-with-body endpoint or Instantly's cleaner API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 5: Monitoring (where it gets interesting)
&lt;/h2&gt;

&lt;p&gt;Every 60 seconds, a worker runs across all active mailboxes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// metricsWorker runs every 60s&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mailbox&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;activeMailboxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bounceRate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculateBounceRate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mailbox&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sendVolume&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSendVolume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mailbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;24h&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bounceRate&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;PAUSE_THRESHOLD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;monitoringService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pauseMailbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mailbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a mailbox gets paused, here's what happens automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Resilience score drops by 15 points&lt;/li&gt;
&lt;li&gt;Mailbox removed from ALL campaigns on the sending platform (API calls to Smartlead/Instantly)&lt;/li&gt;
&lt;li&gt;Correlation check — is this a mailbox problem or a domain problem?

&lt;ul&gt;
&lt;li&gt;If 3+ mailboxes on the same domain are failing → escalate to domain pause&lt;/li&gt;
&lt;li&gt;If failures concentrate on one campaign → pause that campaign instead&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Slack alert fires&lt;/li&gt;
&lt;li&gt;Cooldown timer starts (24h first offense, 72h second, 7 days for third+)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The correlation check prevents whack-a-mole. If the root cause is a blacklisted domain, pausing individual mailboxes won't help. You need to pause the domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 6: The Healing Pipeline
&lt;/h2&gt;

&lt;p&gt;This is the part I'm most proud of. Paused mailboxes don't just sit in limbo. They go through a 5-phase recovery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PAUSED → QUARANTINE → RESTRICTED_SEND → WARM_RECOVERY → HEALTHY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PAUSED&lt;/strong&gt;: Cooldown timer running. No sends. Waiting for cooldown to expire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QUARANTINE&lt;/strong&gt;: Cooldown expired. System checks if the domain's DNS is healthy (SPF valid, DKIM valid, not blacklisted). If DNS is broken, mailbox stays here until it's fixed. No point warming up a mailbox on a blacklisted domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RESTRICTED_SEND&lt;/strong&gt;: DNS passed. Warmup re-enabled at 10 emails/day, flat — no ramp-up yet. Must complete 15 clean sends with zero bounces (25 for repeat offenders) before graduating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WARM_RECOVERY&lt;/strong&gt;: Warmup increases to 50 emails/day with a +5/day ramp. Must sustain for 3+ days with bounce rate under 2%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HEALTHY&lt;/strong&gt;: Back in production. Re-added to all campaigns it was removed from. Maintenance warmup keeps running at 10/day in the background.&lt;/p&gt;

&lt;p&gt;Each transition is managed by two workers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;metricsWorker&lt;/code&gt; (every 60s): handles PAUSED → QUARANTINE (cooldown expiry)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;warmupTrackingWorker&lt;/code&gt; (every 4h): handles QUARANTINE → RESTRICTED → WARM → HEALTHY (graduation criteria)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Phase transitions use optimistic locking to prevent race conditions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;prisma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mailbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;updateMany&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;mailboxId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;recovery_phase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fromPhase&lt;/span&gt;  &lt;span class="c1"&gt;// Only update if still in expected phase&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;recovery_phase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;toPhase&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;phase_entered_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Another process already changed the phase — abort&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a mailbox bounces DURING recovery (relapse), penalties escalate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1st relapse: back to QUARANTINE, doubled cooldown&lt;/li&gt;
&lt;li&gt;2nd relapse: full PAUSED, 72h cooldown&lt;/li&gt;
&lt;li&gt;3rd+: full PAUSED, 7 day cooldown, flagged for manual review&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stage 7: Alerting
&lt;/h2&gt;

&lt;p&gt;Every significant event pushes to Slack. Not email. Obvious reasons.&lt;/p&gt;

&lt;p&gt;We categorize alerts by severity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Critical&lt;/strong&gt;: Domain blacklisted, mailbox paused, campaign auto-stopped&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warning&lt;/strong&gt;: Bounce rate climbing, mailbox entering recovery phase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Info&lt;/strong&gt;: Mailbox graduated from recovery, lead validation batch complete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The alert includes actionable context: which mailbox, what bounce rate, which campaigns are affected, and what the system already did about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Learned Building This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DNS checks matter more than you think.&lt;/strong&gt; SPF, DKIM, DMARC misconfigurations cause deliverability problems that look like content issues. We've seen mailboxes with perfect copy land in spam because someone forgot to add an SPF record for their sending service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't trust any single data source for email verification.&lt;/strong&gt; Clay says the email is verified. MillionVerifier says it's valid. The email still bounces. This happens. Build for it. Your infrastructure needs to handle bounces gracefully, not assume they won't happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Batch operations need rate limiting, not just individual calls.&lt;/strong&gt; We hit Smartlead's rate limit every time we tried to pause a domain (which removes 15+ mailboxes from multiple campaigns). Added a rate limiter that queues requests at 10 per 2 seconds and the errors disappeared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The adapter pattern was the best architectural decision we made.&lt;/strong&gt; When we added EmailBison as a third sending platform, it took a day instead of a week. Implement the interface, register the adapter, done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observe mode saved us from ourselves.&lt;/strong&gt; We built three system modes: OBSERVE (log what would happen), SUGGEST (create notifications), ENFORCE (actually do it). We ran in observe mode for 2 weeks watching the logs before flipping to enforce. Found 3 bugs that would have auto-paused healthy mailboxes.&lt;/p&gt;




&lt;p&gt;The whole system is TypeScript, Prisma + PostgreSQL, with BullMQ for job processing. Runs on Railway. The monitoring, healing, and validation layers are what we productized as &lt;a href="https://superkabe.com" rel="noopener noreferrer"&gt;Superkabe&lt;/a&gt; - but the architecture patterns apply regardless of whether you build or buy.&lt;/p&gt;

&lt;p&gt;If you're running cold outbound at any real volume and your infrastructure management is still manual, you're leaving money on the table. Or more accurately, you're burning domains that cost money to replace.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>news</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
