Prerequisites & Setup Guide
Relevant source files
The following files were used as context for generating this wiki page:
Introduction
Send Again is an open-source email campaign platform designed to facilitate high-deliverability email sending via Amazon SES. This guide outlines the essential prerequisites, environmental configurations, and infrastructure setup required to deploy and operate the platform. The system supports both a managed cloud version and a self-hosted implementation, the latter requiring manual configuration of AWS, Supabase, and various DNS providers.
Sources: README.md:1-15, src/lib/openapi.ts:4-9
The setup process involves three primary pillars: core infrastructure (Node.js and database), email deliverability (AWS SES), and optional automation (DNS and AI services). Users must configure these components to ensure proper workspace isolation, domain verification, and campaign tracking.
Sources: README.md:27-35, src/app/app/page.tsx:1290-1310
Core Infrastructure Prerequisites
To self-host Send Again, the environment must meet specific software and service requirements.
System Requirements
- Node.js: Version 20 or higher is required for the runtime environment.
- Database: A Supabase project is required for authentication and application data storage.
- Storage: Supabase Postgres is used for workspace data, contacts, and campaign history.
Sources: README.md:29-31, src/app/app/page.tsx:1003-1010
Initial Installation
The project is initialized via a standard Git and NPM workflow:
git clone https://github.com/guillaumegay13/send-again.git
cd send-again
npm install
Sources: README.md:37-41
Environment Configuration
Configuration is managed via a .env.local file. The platform requires several categories of variables to function correctly.
Required Variables
| Variable | Description |
|---|---|
AWS_ACCESS_KEY_ID | AWS IAM access key with SES permissions |
AWS_SECRET_ACCESS_KEY | AWS IAM secret key |
SUPABASE_URL | The URL of your Supabase project |
SUPABASE_PUBLISHABLE_KEY | Supabase client-side publishable key |
SUPABASE_SECRET_KEY | Supabase server-side secret key |
Sources: README.md:47-53, README.md:118-124
Recommended & Optional Settings
Additional variables enable features like AI-powered email generation (OpenAI) or automated DNS management for SPF, DKIM, and DMARC.
# AI Compose
OPENAI_API_KEY=your-openai-api-key
OPENAI_MODEL=gpt-4.1-mini
# DNS Automation (e.g., Cloudflare)
CLOUDFLARE_API_TOKEN=your-cloudflare-token
CLOUDFLARE_ZONE_ID=optional-zone-id
Sources: README.md:61-73, src/app/api/vibe/route.ts:133-138
Email Deliverability Setup
A critical phase of the setup is the verification of sending domains within Amazon SES. Send Again provides an automated workflow to handle domain verification, DKIM tokens, and SPF records.
SES Verification Workflow
The platform interacts with the AWS SDK to initiate verification and retrieve DNS tokens that must be published to the domain's DNS records.
This diagram shows the sequence of events required to verify a domain in SES for sending.
Sources: src/app/app/page.tsx:1385-1490, src/app/api/workspaces/setup/route.ts:168-185
Deliverability Checklist
The following components must be verified for a "Ready" status:
- Domain Verification: SES verification TXT record (
_amazonses.domain.com). - SPF: TXT record (
v=spf1 include:amazonses.com ~all). - DKIM: Three CNAME records for cryptographic signing.
- DMARC: Policy record (
_dmarc.domain.com). - Configuration Set: Required for tracking bounces and complaints via SNS.
- Unsubscribe Page: A reachable
/unsubscribeendpoint on the workspace URL.
Sources: src/app/app/page.tsx:1290-1310, src/app/api/workspaces/setup/route.ts:114-143
DNS Provider Automation
Send Again supports automated DNS configuration for specific providers to simplify the SES verification process.
Supported Providers and Requirements
| Provider | Required Input Fields | API Endpoint |
|---|---|---|
| Namecheap | API User, Username, API Key, Client IP | /api/workspaces/setup |
| Cloudflare | API Token, Zone ID (optional) | /api/workspaces/setup |
| Route 53 | Hosted Zone ID (optional) | /api/workspaces/setup |
Sources: src/app/app/page.tsx:880-925, src/app/api/workspaces/setup/route.ts:187-235
DNS Setup Sequence
When a user triggers an "Apply DNS" action, the backend follows this logic:
This sequence illustrates the automated flow from the UI to the DNS provider.
Sources: src/app/api/workspaces/setup/route.ts:187-235, src/app/app/page.tsx:880-925
Workspace & User Setup
After infrastructure is configured, the application requires administrative bootstrapping.
Database Schema
The Supabase database must be initialized with the provided schema. Users typically run supabase/schema.sql in the Supabase SQL Editor.
Sources: README.md:86-89
Authentication & Initial User
- Enable the Email provider in Supabase Authentication.
- Create a user with the email address specified in
INITIAL_OWNER_EMAIL. - Upon first login, the user can create a Workspace by providing a domain name (e.g.,
example.com).
Sources: README.md:91-97, src/app/app/page.tsx:1120-1135
Conclusion
Setting up Send Again requires a synchronized configuration between Node.js, Supabase, and Amazon SES. While the core application can be bootstrapped quickly, achieving high deliverability depends on correctly implementing the DNS requirements (SPF/DKIM/DMARC) and verifying domains within the SES console or via the integrated automation tools.