import { Cloud, Database, Globe, HardDrive, Key, Mail, Radio, Shield, Terminal, Timer } from "lucide-react"; const STACK = [ { icon: Cloud, label: "Cloudflare Workers", desc: "Serverless runtime for API, email handling, and cron cleanup" }, { icon: Database, label: "D1 (SQLite)", desc: "Inbox and email metadata with Drizzle ORM" }, { icon: HardDrive, label: "R2", desc: "Object storage for email bodies and attachments" }, { icon: Key, label: "KV", desc: "Session tokens with automatic TTL expiry" }, { icon: Radio, label: "Durable Objects", desc: "Hibernation WebSocket API for real-time push notifications" }, { icon: Mail, label: "Email Routing", desc: "Catch-all rules forward inbound mail to the Worker" }, ]; const FEATURES = [ { icon: Timer, title: "Test inboxes", desc: "Spin up an address with a 24, 48, or 72-hour TTL. Auto-cleanup when it expires.", }, { icon: Radio, title: "Real-time delivery", desc: "Emails land via WebSocket the moment your app sends them. No polling, no refresh.", }, { icon: Globe, title: "Bring your own domain", desc: "Wire up a domain — every address on it catches mail. Match the domain your app uses in production.", }, { icon: Shield, title: "Admin dashboard", desc: "Manage domains, inspect active test inboxes, and monitor permanent mailboxes.", }, ]; export function AboutPage() { return (
{/* Hero */}
Powered by Cloudflare Workers

How flamemail works

Catch-all email testing for developers, running entirely on Cloudflare's edge.

{/* Code snippet */}
worker.ts — email pipeline
01 export default {"{"}
02 async email(message, env, ctx) {"{"}
03 // 1. Parse inbound stream
04 const parsed = await{" "} parseEmail(message.raw);
05 // 2. Store body in R2
06 await env.STORAGE.put(id, parsed.html);
07 // 3. Notify connected clients via WebSocket
08 await env.INBOX_WS.get(id).fetch(event);
09 {"}"}
10 {"}"}
{/* Features & Tech Stack */}

Features

{FEATURES.map((f, i) => (
{f.desc}
))}

Technology stack

{STACK.map((s, i) => (
{s.label} {s.desc}
))}
{/* How it works */}

How it works

  1. 1 Create an inbox — pick a domain and lifetime. You get a random address and an access token stored in your browser.
  2. 2 Receive email — Cloudflare Email Routing forwards inbound mail to the Worker, which parses it, stores the body in R2, and writes metadata to D1.
  3. 3 Instant notification — a Durable Object wakes up just long enough to push the new-email event over WebSocket, then hibernates again.
  4. 4 Automatic cleanup — an hourly cron purges expired inboxes, their emails, and all R2 objects.
); }