A clean web app to send and manage email using the Resend API.
- Compose emails with HTML or plain text body, CC, and Reply-To
- List sent emails with status badges and pagination
- View email details with safe HTML preview (sandboxed iframe)
- Settings drawer to configure your API key (stored in browser
localStorage) - Dark theme, responsive layout, keyboard accessible (Escape to close, focus-visible outlines)
- Node.js 18+
- A Resend API key
- A verified domain for sending (e.g.
example.com); or test withonboarding@resend.dev
# Install dependencies
npm install
# Copy env file and fill in your API key
cp .env.example .env
# Start the server
npm start
# Or with auto-restart on changes
npm run devOpen http://localhost:3000.
| Variable | Description | Default |
|---|---|---|
RESEND_API_KEY |
Your Resend API key | — |
RESEND_DEFAULT_FROM |
Pre-filled From address in compose form | — |
PORT |
Server port | 3000 |
- Settings — Click the gear icon to enter your API key.
- Compose — Fill in the form and click Send. The From address is remembered between sends.
- Sent — Switch to the Sent tab to see your emails, their delivery status, and click any to view details.
| Method | Path | Description |
|---|---|---|
POST |
/api/send |
Send an email |
GET |
/api/emails |
List sent emails (?limit=, ?after=) |
GET |
/api/emails/:id |
Get email details |
GET |
/api/config |
Get server configuration |
GET |
/api/status |
Check if API key is configured |
All endpoints accept x-api-key header for the Resend API key.
- Never commit
.env(it's in.gitignore). - Email HTML is rendered in a sandboxed iframe to prevent XSS.
- The API key stays in
localStorageon the client and is sent only via thex-api-keyheader. - For production / multi-user use, add authentication and store keys server-side.