We built a campaign orchestration system managing 4-touch email, 3-touch LinkedIn, 2-touch Twitter, and social listening in a single PostgreSQL state machine, targeting 20-minute daily operator review.
1,000+
Daily touch capacity
94%
Reply classification accuracy
20 minutes
Operator daily review target
95%
A/B promotion confidence (chi-squared)
CHAPTER 01
Running a 1,000+ touch per day outbound operation as a solo operator without a campaign management layer means spending 4 to 6 hours daily on sequencing, reply triage, variant selection, and channel coordination. The design goal was not automation for its own sake. It was automation of the rote and human judgment on the consequential.
Campaign management for a custom development firm has a structural difference from campaign management for SaaS lead generation. The average deal size of $15,000 to $25,000 meant that each meeting was worth fighting for individually. A mass outreach tool that treated prospects as fungible was the wrong model.
The multi-channel requirement added complexity. Cold email was the primary channel. LinkedIn DM was the secondary channel for prospects who did not reply to email. Twitter DM was the tertiary channel for founders visible on that platform. Reddit and Discord opportunity monitoring ran in parallel as inbound-to-outbound triggers.
CHAPTER 02
The orchestration layer used alien/cadence (Rust), which consumed lead state from the PostgreSQL database and emitted scheduled send jobs to channel-specific Redis queues. Cadence logic: 4-touch email sequence (day 1, 3, 7, 14) plus 3-touch LinkedIn DM sequence triggered after email touch 3 with no reply, plus 2-touch retarget post sequence for prospects who opened email but did not reply.
Each channel had independent rate limits enforced at the Redis queue consumer level. Email: 30 to 50 sends per inbox per day, 90 inboxes, total 2,700 to 3,600 sends per day. LinkedIn DM: 30 total per day across all active LinkedIn accounts. Twitter DM: 20 total per day per Twitter account.
Reply classification used Claude API (claude-sonnet-4-6). Every inbound reply was classified into: positive, neutral, objection, bounce, or stop. Classification accuracy was validated at 94% against a manually labeled 200-reply test set. Classification cost approximately $0.001 per reply at Haiku pricing. At 72 replies per day, classification cost under $2.60 per month.
ARCHITECTURE OVERVIEW
PRESENTATION
Rust (alien/ab-tester, alien/cadence, alien/dm-engine)
API LAYER
Next.js 15 (operator UI /admin)
auth + rate limit + versioning
SERVICES
PostgreSQL (campaign state)
DATABASE
ClickHouse (analytics)
QUEUE
Redis 7 (job queues)
CHAPTER 03
Campaign state in PostgreSQL extended the lead state machine with a campaign_enrollments table linking leads to campaigns with per-touch status tracking. The join between leads and campaign_enrollments made it possible to answer operational questions like how many leads are on touch 3 of the November agency campaign with no reply to touch 2 in a single SQL query. Campaign pausing was atomic: an UPDATE on campaign_enrollments setting status=paused for all future touches.
The alien/ab-tester maintained a variants table in ClickHouse. Auto-promotion logic ran every 6 hours. Criteria: a challenger variant with at least 50 sends and a reply rate exceeding the current promoted variant by more than 2 percentage points at 95% confidence. Chi-squared test implemented in Rust using the statrs crate. The operator could reject the promotion within 2 hours by clicking a link, otherwise it was applied automatically.
The LinkedIn dm-engine simulated human typing cadence with 100 to 300ms delay between characters to avoid LinkedIn's automated bot detection. LinkedIn session cookies stored encrypted in PostgreSQL and rotated on 401 responses.
TECH STACK
CHAPTER 04
Campaign management system designed for 1,000+ touches per day across 4 channels. Reply classification accuracy: 94% against 200-reply labeled test set. A/B variant auto-promotion: 6-hour cadence, 95% confidence threshold. Break-up email reply rate: highest in sequence, consistent with practitioner benchmarks. Operator daily review time target: 20 minutes versus 4 to 6 hours without the system.
1,000+
Daily touch capacity
94%
Reply classification accuracy
20 minutes
Operator daily review target
95%
A/B promotion confidence (chi-squared)
CHAPTER 05
DECISION · 01
Multi-channel sequencing requires a unified state machine, not separate tools per channel. The LinkedIn DM should not fire until email touch 3 had been sent. The retarget post should not fire until the break-up email had been sent and opened. Coordinating these dependencies across separate tools required manual oversight for every lead.
DECISION · 02
Reply classification is more valuable than reply volume. Knowing that a prospect replied is less useful than knowing why they replied. The Claude API classification into five categories transformed the inbox from a pile of text into a triage queue. Stop requests triggered immediate removal from all sequences and addition to the blocklist.
DECISION · 03
Human approval on every outbound reply is correct at this deal size. An automated reply system makes sense when deal size is $99 per month and volume is the primary lever. At $15,000 per deal, a single poorly-worded automated reply was a meaningful revenue miss.
START A PROJECT
We build fast. Most projects ship in under two weeks. Start with a free 30-minute discovery call.
Start a ProjectWe launched a multi-tenant market intelligence SaaS serving computed signals from 425M rows, with all API routes under 500ms cold and unit economics positive from customer one.
425M+ ClickHouse rows at launch
Read case study →
PlatformsWe debugged 65 compounding bugs across seven subsystems of a live trading engine, fixed a score overflow that silently blocked all dark_matter_rs signals, and cut Redis memory from 11.8GB to 7.15GB.
65 Bugs fixed in one session
Read case study →
PlatformsWe built a retail investor dashboard serving live fund performance from a paper trading account, with compliance banners enforced as server-side dependencies and JavaScript bundle under 120KB.
7 Pages built and deployed
Read case study →