Bulk Email Engine (Redis / BullMQ)
Asynchronous high-volume email delivery architecture replacing fragile browser-dependent API loops with resilient Redis/BullMQ worker queues.
Engineered With
Why I Moved Bulk Email to BullMQ
The problem wasn't sending emails. The problem was where the work lived. Transitioning from client-tied loops to resilient Redis background workers.
Every campaign forced the employee to babysit their browser. A network hiccup, laptop sleep mode, or single timeout permanently halted the dispatch.
Click “Simulate Dispatch” to test how this architecture handles real-world batch workloads.
The Problem & Context
The Messy Part (Behind the Build)
Architecture & Design Decisions
The Problem Wasn't Sending Emails. The Problem Was Where the Work Lived.
If an operation requires processing 1,500 records and someone tells the user:
"Please do not close this browser tab until the progress bar reaches 100%"
...that is not an operation. That is an architectural flaw.
Before: The Client-Tied Loop
Browser (Loop) ──HTTP──> API ──SMTP──> Provider
│
(User closes laptop at 32%)
│
▼
Campaign halts. 480 sent, 1020 lost. Re-run causes duplicates.
After: Decoupled Queue Architecture
Browser ──HTTP (Single Batch)──> API ──Push Job──> Redis (BullMQ)
│
┌─────────┴─────────┐
▼ ▼
Worker 1 Worker 2
│ │
▼ ▼
Provider Provider
With workers processing asynchronously in Docker containers, the user can immediately close their laptop, take a train, or shut down their workstation. The work continues reliably, failures retry with exponential backoff, and idempotency guarantees that no student receives duplicate correspondence.
What I'd Do Differently Today
Related Work & Systems
BusinessOS
Commercial-grade financial operating system for SMEs with ledger-first accounting, immutable transaction journals, integer minor-unit money calculations, and multi-tenant audit logs.
Microsoft Teams & Calendar Engine
Hiding deep Microsoft Graph API complexity behind an automated calendar & meeting sync engine for 20K+ EdTech users.