Blog
Notes from the team. Engineering deep-dives, product changes, and the occasional war story.
2026-04-15
Why we rewrote our mail engine in a weekend
Stalwart kept silently overriding our config from the DB. We replaced it with Postfix + a tiny Node SMTP shim and shipped. Here's the story.
Read
2026-05-04
MCP is the new SDK: shipping @jassra25/inboxr-mcp on day one
We built the MCP server before the REST docs were polished. Here's why agent-first beats agent-also, and what 16 tools look like when you start from "an LLM should drive this end-to-end."
Read
2026-05-01
How to ship SMS without a carrier deal
Most disposable SMS services need a Twilio relationship and 30-day approvals. We use a fleet of physical Pixels on prepaid SIMs, route inbound via a 30-minute claim window, and bill PAYG. Here's the architecture.
Read
2026-04-28
Webhooks that don't lie: what we changed after a 4am incident
A receiver returned 200 with an HTML error page. We marked it delivered. Two days of silent data loss. The fix: capture response body on every attempt — success or failure — and surface it in the dashboard.
Read
2026-04-22
Rate limiting without Redis: a 30-line Postgres helper
Adding Redis just for rate limits felt like a tax. A single ON CONFLICT … DO UPDATE upsert against a (scope, key, window_start) row gets you 5/sec/tenant + 60/min/phone with no new infra.
Read
2026-04-18
Pricing on two axes: email and SMS bill independently
Most platforms force you onto one ladder. We split email and SMS into two independent plans because the cost shapes differ — email is mostly storage, SMS is mostly per-message. The pricing page is honest about that.
Read