┌──────────────────────────────────────────┐
│ ░▒▓ SECURE CHANNEL ESTABLISHED ▓▒░ │
│ >>> IDENTITY: ANONYMOUS <<< │
│ >>> TRACE: NULL <<< │
└──────────────────────────────────────────┘
Disposable email that self-destructs. No signup. No trace. No limits.
Ephemask is a serverless temporary email service that lets users receive disposable emails without registration. Inboxes auto-delete after a configurable TTL. Built with Go, Terraform, Astro, Svelte, and React Native.
[Internet] → MX Record → [AWS SES Inbound]
↓
[S3 Bucket] (raw email storage)
↓
[Lambda - email-processor] (Go)
↓
[DynamoDB] (parsed email metadata + body)
↓ TTL auto-delete
[API Gateway] ← [Lambda - api] (Go)
↓
[Frontend Web - Astro + Svelte]
↓
[Frontend Mobile - React Native + Expo]
Flow: User gets a random address → SES receives email → S3 stores raw → Lambda parses MIME → DynamoDB stores with TTL → Frontend polls API → Data auto-destructs.
| Layer | Tech |
|---|---|
| Backend | Go 1.22+ (AWS Lambda) |
| Infrastructure | Terraform (SES, S3, DynamoDB, API Gateway, Route53) |
| Frontend Web | Astro + Svelte 5 + Tailwind CSS |
| Frontend Mobile | React Native + Expo + Expo Router |
| Shared Package | TypeScript (API client, types, utils) |
| Monorepo | Turborepo + pnpm workspaces |
ephemask/
├── terraform/ # AWS infrastructure (SES, DynamoDB, Lambda, API GW, Route53)
├── services/ # Go backend
│ ├── cmd/processor/ # Lambda: processes incoming emails from S3
│ ├── cmd/api/ # Lambda: REST API for frontend
│ ├── internal/email/ # MIME parser (enmime)
│ ├── internal/inbox/ # Models, repository (DynamoDB), service layer
│ ├── internal/handler/ # HTTP handlers
│ └── pkg/randaddr/ # Random address generator
├── packages/shared/ # Shared TypeScript package (@ephemask/shared)
├── apps/web/ # Astro + Svelte web frontend
└── apps/mobile/ # React Native + Expo mobile app
npm install -g pnpm)pnpm install
cd services && go test ./... -v
pnpm --filter shared build
pnpm --filter web dev
# → http://localhost:4321
cd apps/mobile
npx expo start
make build-go
make tf-init
make tf-plan
make tf-apply
| Method | Route | Description |
|---|---|---|
POST |
/inbox |
Generate a new random inbox |
GET |
/inbox/{address} |
List messages for an inbox |
GET |
/inbox/{address}/messages/{messageId} |
Get full message detail |
DELETE |
/inbox/{address} |
Delete inbox and all messages |
| Free | Pro ($4/mo) | |
|---|---|---|
| Inbox TTL | 10 minutes | Up to 60 minutes |
| Simultaneous inboxes | 1 | Multiple |
| Domain | Random | Custom |
| API access | - | Yes |
| Forwarding | - | Yes |
| Ads | Yes | No |
| Variable | Description | Default |
|---|---|---|
DYNAMODB_TABLE |
DynamoDB table name | - |
S3_BUCKET |
S3 bucket for raw emails | - |
DOMAIN |
Email domain | ephemask.dev |
DEFAULT_TTL_SECONDS |
Free inbox TTL | 600 |
ENV |
Environment (dev/prod) |
dev |
PUBLIC_API_URL |
API URL for web frontend | - |
EXPO_PUBLIC_API_URL |
API URL for mobile app | - |
us-east-1 (SES inbound only available in us-east-1, us-west-2, eu-west-1)Private project.