All projects
AppSaaS2026

POSTBOX

A multi-tenant support-ticket system that turns a small business's website contact form and support email into one threaded inbox. The alternative for a small shop is a shared Gmail account where enquiries get lost, and the commercial helpdesks are priced and shaped for far larger teams.

Desktop — inbox list beside an open ticket thread
Client
Personal project — my own product
Scope
Multi-tenant SaaS, email threading, admin
Timeline
—
Stack
Next.js 16, TypeScript, Neon Postgres, Drizzle, Clerk, Resend, Vercel
Live

The problem

A small business takes enquiries through two unrelated channels — a website contact form and a support inbox — with no shared history and no record of what was answered. The obvious fix, replying from the business's own domain, was not available: you cannot verify a domain you do not control, so mail sent as the client would fail authentication and land in spam. Replies had to originate from a domain I could verify while still threading correctly in the customer's mail client.

What I did

One Next.js application, with tenancy scoped per workspace. The email loop is the substance of it. Replies send from a verified domain as "Business Name" <replies@…>, with a per-ticket reply address, so a customer answering in their own mail client lands back on the right thread without the business needing to hand over their domain. Threading anchors on the customer's own Message-ID rather than one I mint, because the sending infrastructure overwrites custom ids — that detail took the longest to find and is the difference between a conversation and a pile of disconnected emails. Inbound mail arrives by signature-verified webhook, with bodies fetched separately since the webhook carries only metadata.

33% → 59%
Share of a phone screen given to the conversation, 277px up to 495px
260 → 180
Pixels of interface above the first message on mobile
0 → 27
Unit tests over reply-parsing and threading logic
Mobile thread — before and after the responsive work
A reply arriving in Gmail and threading back