Project Description:

Phantom Inbox is a disposable email product I built for developers and QA: one click mints a real, receivable address so verification emails, password resets, transactional receipts, and webhook-style messages can be tested without polluting a personal inbox. Guests can use it immediately; free accounts keep addresses tied to a user, and a premium tier adds more inboxes, longer retention, custom display names, and a REST API with API keys.

The landing experience doubles as a live demo—you can generate an inbox on the page, copy the address, send mail from any provider, and watch messages arrive in real time with sandboxed HTML preview plus plain text and raw source views for debugging templates and headers.

These are the technologies and libraries I used to build this project:

  • Next.js (App Router)
  • React
  • TypeScript
  • Drizzle ORM
  • PostgreSQL
  • NextAuth.js (Auth.js v5)
  • Stripe
  • mailparser
  • smtp-server (Node)
  • Cloudflare inbound webhook
  • Zod
  • Phantom Inbox — landing and disposable inbox UI

    Live site

    You can try the product below. If the embed is blocked by the host's security headers, open the same URL in a new tab.

    https://phantom-inbox.com

    Key features

    Real mail, not mocks: Inboxes are real addresses on the service domain; SMTP routing (via Cloudflare Email Routing webhook or an optional Node SMTP receiver) persists parsed messages for the UI and API.

    Safe message inspection: Sandboxed HTML rendering with toggles for plain text and raw RFC822 source, which makes template and deliverability debugging much easier.

    Live inbox UI: Polling keeps the mailbox fresh so OTPs and short-lived flows show up without manual refresh.

    Automation-friendly: Premium unlocks REST API keys; the product is positioned alongside CLI and client workflows for CI and end-to-end tests.

    Billing: Stripe checkout and webhooks manage subscriptions; plan definitions support price changes without breaking existing subscribers.

    Technical implementation

    The app uses Next.js server components and route handlers for auth, inbox CRUD, inbound mail ingestion, API key management, and Stripe. Drizzle models users, sessions, OAuth accounts, inboxes, messages, and billing-related state. Auth supports email and password plus OAuth providers through the Auth.js Drizzle adapter.

    Inbound mail can enter through a Cloudflare Email Routing worker posting to /api/inbound/cloudflare, or through a dedicated smtp-server process for self-hosted deployments that accept mail on port 25—both paths normalize to the same persistence layer.

    Back