Skip to content
All projects

Project

PostStack

The email API I built after a year of stitching three vendors together. Transactional mail, newsletters and inbound mail in one product, with a TypeScript SDK, a real test mode and hosting in the EU.

Built with
  • Bun
  • Hono
  • Postgres
  • Redis
  • BullMQ
  • MCP

What it is#

PostStack is an email API for developers. Transactional mail, newsletters and inbound mail run in one product, with one API key, one suppression list and one set of contacts.

I built it because I had been buying those three things from three vendors. They share the same contacts and the same deliverability problems, and the code I wrote to keep three vendors in agreement was the worst code in the project.

What it solves#

Plenty of small teams still buy email in three pieces: Resend for transactional mail, Mailchimp for newsletters and Postmark for inbound. Then they write code to keep the three in sync. In one of my own projects that was about 600 lines of TypeScript and a Postgres table. With PostStack it went away.

With everything in one place:

  • Someone who unsubscribes or bounces is blocked everywhere, not just in one of the systems.

  • A reply to an email lands on the same contact, without a webhook worker you wrote yourself.

  • Automations start on events from the same platform instead of a cron job polling three services.

  • There is one bill and one agreement.

Decisions that shaped it#

A TypeScript SDK with proper types. The SDK was designed alongside the API, so requests, responses and errors are typed the way you use them, not generated afterwards.

A real test mode. Send with a test key and PostStack runs the whole send, renders the template, validates the address and fires the webhooks, but nothing leaves the platform and nothing is billed. Your CI can test against the real API.

Deliverability built into the product. SPF, DKIM and DMARC alignment, blocklist monitoring, handling of bounces and complaints, and warm-up of new domains. It's the dull work that decides whether a password reset reaches the inbox.

An MCP server. PostStack comes with a Model Context Protocol server, so Claude Code can send mail, check deliverability and look into problems without anyone opening the dashboard.

How it's built#

Bun with Hono for the API, Postgres for contacts and events, and Redis with BullMQ for the queues.

I use it myself. Everything micci.dk sends goes through PostStack: the receipt when you write to me, the alerts I get, quotes, invoices and reminders.

Read more#

The full argument for one product instead of three is in the blog post Building the email API I wanted but couldn't buy.

Other projects