← Back to Portfolio

Case Study / Infrastructure Engineering

A routing system for building sender reputation before launch

A workflow automation platform that simulates realistic, threaded email conversations across multiple product lanes, so a new sending domain earns trust with mail providers before real customer volume goes out.

RoleAssigned build, architecture to deployment
Stackn8n, AWS SES, Gmail OAuth2, OpenAI, Supabase
StatusCore lanes live, scheduling and one lane in progress
notifications research reports product personas x6 customer support send reply & thread recipient

Eleven sender identities route through a shared reply engine, each keeping its own thread history and voice.

Cold domains get flagged, warm ones get delivered

The company's outbound mail was landing in spam more often than not. New sending domains had no history with mail providers, and every real campaign that went out on a cold domain made the deliverability numbers worse instead of better. It was flagged as a priority problem across a notifications lane, a research digest, six product specialists, and a support desk, each needing a believable sending history before a single real campaign could safely go out. Mail providers score a domain on how it behaves over time: reply rates, thread depth, spam complaints. There is no shortcut around that except time and genuine looking conversation.

I was asked to find a way to fix it. The brief that came out of that was to build the conversation automatically, at a pace and shape that reads as human, across every lane, without turning into an obvious bot loop.

Four workflows, one shared configuration

Everything reads from a single lane configuration table rather than being duplicated per identity, so adding a twelfth sender is a data change, not a new workflow.

WF1 · Sender

WF1 Sender workflow canvas

Routes fixed template mail and AI generated persona mail through a shared renderer, merges the branches, and logs every send per lane.

WF2 · Reply Engine A

WF2 Reply Engine A workflow canvas

Listens for replies to the notifications lane, generates a contextual answer, and constructs raw MIME with correct In Reply To and References headers by hand, since the sending API has no native reply endpoint.

WF2b · Reply Engine B

WF2b Reply Engine B workflow canvas

Covers the research lane and all six product specialists through an allowlist and a per product lookup table, so each persona keeps a consistent voice and brand.

WF3b · Recipient Auto Reply

WF3b Recipient Auto Reply workflow canvas

Plays the other side of the conversation using native OAuth threading, with a quoted block of the original message so the thread reads correctly in any client.

What actually broke, and what it taught me

Run Mode

A code node left on run once for all items will silently collapse an entire batch into a single item. Now a standing checklist item on every new node.

Merging

Two parallel render branches need an explicit merge before the next step, or the platform treats each branch as its own execution run. Easy to miss, easy to debug wrong.

Domain Match

A naive ends with check on the sending domain silently dropped subdomains. Fixed once, but a good reminder to test the edge case you did not write.

Threading

Some clients strip In Reply To and References headers outright, so filtering by recipient address turned out more reliable than trusting headers alone.

Loop Safety

A six hop cap on both reply workflows keeps two bots from replying to each other indefinitely. Cheap insurance against a very embarrassing failure mode.

Tools

n8n AWS SES Gmail OAuth2 OpenAI API Supabase Raw MIME construction Microsoft Graph (in progress)

Honest state of the build

Core send, reply, and recipient workflows built and tested end to end
Eleven sender lanes routed through shared configuration
Converting workflows from manual triggers to scheduled, unattended runs