BlastBlast
High-scale notification engine

A million messages. Five minutes.

A durable queue, competing worker pools, atomic rate limiting, and exponential-backoff retries — engineered to absorb a million-message burst without breaking a sweat.

One API · every channel

Email
SMS
Push
Webhooks
In-app
Broadcast
Email
SMS
Push
Webhooks
In-app
Broadcast
The journey of a message

Ingestion is decoupled from delivery. The queue absorbs the burst; workers drain it.

Ingest
Queue
Workers
Rate limit
Delivered
Transient failure
re-queued with exponential backoff + jitter
Recipient over cap
deferred — never counts as a retry
Max attempts hit
dead-lettered exactly once
Built for load, not luck

Every failure path is accounted for.

The hard parts of high-scale delivery — durability, fairness, retries, scale — handled at the infrastructure layer.

0
messages dropped
Durable by default

A queue that survives anything

Every notification is persisted to a durable RabbitMQ queue the instant it's accepted. Brokers restart, workers crash — messages are redelivered, never lost.

1
round-trip per check
Atomic rate limiting

No recipient ever gets flooded

A single Redis Lua script enforces the per-recipient cap atomically across every worker. Over the limit? The message is deferred — not failed, not dropped.

5
attempts, then DLQ
Exponential backoff

Transient failures heal themselves

Failed sends are re-queued with an exponentially growing delay plus jitter, via per-message TTL. After the final attempt, they dead-letter exactly once.

N
workers, linear scale
Horizontal scale

Throughput is a dial, not a rewrite

Workers are competing consumers with fair prefetch. Add processes to add throughput — linearly, with zero code changes and zero downtime.

Live console

Launch a blast. Watch the engine work.

Synthetic recipients are generated on the fly. The failure-rate dial drives the retry and dead-letter paths — all real, all live.

blast-engine · live console
peak 0/soffline
channel
volume
simulated failure rate
10%
dispatch.log

$ awaiting blast…

0.0throughput / sec
0in flight
0enqueued
0sent
0retried
0failed · dlq
0rate-limited
100.0success %
throughput
no active campaign
0%

backend offline — start the API + worker to stream live data

Under the hood

Boring infrastructure, used precisely.

No exotic dependencies. Proven primitives composed correctly: a broker for durability, a cache for atomic coordination, stateless workers for scale. Deploys to Render and Vercel as two units.

Ingestion API
FastAPI
async, 202 in <5ms
Durable queue
RabbitMQ
DLX · per-message TTL retries
Competing consumers
Workers
asyncio · fair prefetch
Rate limit + metrics
Redis
atomic Lua · shared counters

See it absorb a million.

Spin up a demo blast and watch throughput, retries, and rate limiting play out in real time.