Delivery snapshot
Record date: January 20, 2026. Technology and screenshots describe the delivered version documented on this date. Any performance observations belong to the same point-in-time record. The linked live site may include later changes made by the client or other providers.
SendNode is a unified transactional email API that supports two deployment targets: Cloudflare Workers (using AWS SES for sending) or a standard Node.js VPS (using direct SMTP). Built to replace fragmented email sending setups across agency projects, it provides a single admin interface to manage API keys, monitor delivery logs, and verify DNS records for each project.
The platform uses signed cookie sessions for admin authentication, project-scoped API keys (sn_-prefixed) for programmatic sending, and DNS verification via Cloudflare DoH to confirm SPF records before marking projects as provisioned. A customer-facing setup portal (/setup/:token) lets clients check their own DNS status without accessing the admin dashboard.
Dual-Runtime Architecture
A single codebase runs on two runtimes. The IS_VPS=true environment flag switches between AWS SES via aws4fetch (Cloudflare Workers path) and direct SMTP via smtp-direct (Node.js path). This flexibility lets us deploy where resources allow without maintaining separate codebases.
Each project gets a unique API key prefixed with sn_. The POST /api/send endpoint authenticates via Authorization: Bearer <key> or the x-api-key header. Keys are created, rotated, and revoked from the admin dashboard.
The dashboard displays project-level statistics: email counts (total, success, failed), delivery rates, and recent activity. All /admin/* routes are protected by cookie-based session authentication with automatic 24-hour expiration.
The /admin/logs page shows the last 100 sent emails with filtering by project, status, and recipient. Each log entry includes the timestamp, recipient, subject, status code, and error message (if any).
Before marking a project as provisioned, SendNode verifies the domain's SPF record via Cloudflare DNS over HTTPS (1.1.1.1). This check runs on-demand from the admin panel and is also exposed to clients via the self-service setup portal.
Self-Service Setup Portal
Admins generate shareable setup_token links for clients. The /setup/:token page shows the client's project details and real-time DNS verification status, letting them confirm their domain is ready without contacting support.
All /admin/* routes require cookie session authentication. API routes use Bearer token authentication. This separation ensures that programmatic sending does not require session cookies while admin operations remain secure.
- Hono – TypeScript framework with JSX for server-rendered HTML
- Cloudflare D1 / SQLite – Database for projects, logs, and tokens
- AWS SES (Workers) – Cloud delivery path via SigV4 signed requests
- SMTP (VPS) – Direct delivery path via smtp-direct
- AWS4Fetch – SigV4 request signing for SES
- Nanoid – API key generation
- Signed Cookies – Session management with secure signing
Dual deployment flexibility
Maintaining a single codebase for two runtimes required careful abstraction. Environment flags (IS_VPS, DATABASE, EMAIL_PROVIDER) control which path executes. Both paths share the same API contract and database schema.
DNS verification reliability
Verifying SPF records from a server with a different IP than the sending server leads to false negatives. Switched to Cloudflare DoH (1.1.1.1) for consistent, reliable DNS queries regardless of the deployment environment.
API key security
API keys must be unique and unguessable. Used nanoid with a custom alphabet to generate sn_-prefixed keys with sufficient entropy to prevent enumeration.
- Consolidated email infrastructure into a single platform
- Real-time delivery visibility via the admin dashboard
- Self-service DNS verification reduces support overhead
- Flexible deployment fits both edge and VPS environments
- Project isolation ensures one project's issues don't affect others