Kelvin Biffi
EN PT
Résumé

Couryo

A transactional email API that never sends the same email twice.

Role
Founder, design and engineering
Status
Beta, sending
Stack
TypeScript · Node 22 · Hono · zod-openapi
Link
couryo.com ↗

01The problem

Transactional email breaks in boring, expensive ways: a retried request sends the receipt twice, one bad sender burns the reputation of everyone else, and Brazilian teams pay in dollars with IOF on top.

02What I built

A Resend alternative built for Brazil. REST API, SMTP relay and an MCP server in front of AWS SES v2, with one SES tenant per customer so reputation is measured and paused per sender. Official SDKs for Node, Python and PHP, plus React Email templates for Pix, boleto and password reset. My own products already send through it.

03The decision that mattered

Nothing reaches AWS before our own checks, and nothing reaches it twice. Every send carries an Idempotency-Key, so a retry returns the same message id instead of a second email, and send guards pause a sender on bounce or complaint rates long before AWS would.

04Receipts

  • AWS SES v2 in production, one tenant per customer, BYODKIM and a CNAME-only DNS setup for the customer
  • Idempotency-Key on every send, verified in production: two calls, one row
  • TypeScript end to end: Hono with zod-openapi, BullMQ on Redis, Postgres with Drizzle, 679 API tests
  • SMTP relay, MCP server, SDKs for Node, Python (Django backend) and PHP (Laravel transport)

05Stack

  • TypeScript
  • Node 22
  • Hono
  • zod-openapi
  • BullMQ
  • Redis
  • Postgres
  • Drizzle
  • AWS SES v2
  • Next.js
  • React
  • Vite
  • Docker
Next case Mentezinha An AI for kids that knows when to say no.