Codapult
DocsBlogPricingPluginsDemo
Get Codapult
Logo

Build your SaaS with AI. Keep the architecture under control.

Get Codapult

Product

  • Pricing
  • Architecture
  • Modules
  • AI platform
  • Plugins

Developers

  • MCP
  • CLI
  • Documentation
  • Launch your SaaS
  • Build a B2B SaaS

Resources

  • Blog
  • FAQ

Connect

  • Contact
  • GitHub

Compare

  • SaaS template comparison
  • Codapult vs Supastarter
  • Codapult vs Makerkit
  • Codapult vs ShipFast
  • Codapult vs SaaSBold
  • Codapult vs Gravity
  • Codapult vs Nextbase
  • Codapult vs BuilderKit

Featured on

Codapult on LaunchNestCodapult on LaunchNestbetterlaunch.cobetterlaunch.coFeatured on LaunchBuffFeatured on LaunchBuffCodapult on PeerPushCodapult on PeerPushFeatured on LaunchItFeatured on LaunchIt
© 2026 Codapult·All rights reserved·Privacy Policy·Terms of Service
Full source code · One-time purchase · Self-host anywhere
All articles

Getting Started

  • Introduction
  • Quick Start
  • Your First 30 Minutes
  • Project Structure
  • License and Permitted Use
  • Starter Profiles and Recipes
  • Product Recipes

Configuration

  • Environment Variables
  • App Configuration
  • Which Modules Should I Enable?
  • Provider Matrix
  • Capability Coverage

Database

  • Database and Provider Guide
  • Database
  • Migrations

Authentication

  • Authentication
  • OAuth Providers
  • Two-Factor & Passwordless
  • Enterprise SSO (SAML)

Ai

  • AI Runtime Architecture and Evals
  • AI Features
  • Streaming Chat
  • RAG and Semantic Search
  • Quotas and Memory

Teams

  • Teams & Organizations
  • Permissions & RBAC
  • SCIM Provisioning

Security

  • Data Retention Policy
  • Security

Deployment

  • Enterprise E2E Evidence
  • Enterprise Production Readiness
  • Deployment, Backup, and Restore Runbook
  • Deployment
  • Troubleshooting

Payments

  • Payments & Billing
  • Stripe Setup
  • LemonSqueezy Setup
  • Polar Setup
  • Payment Webhooks

Api

  • API Layer
  • tRPC
  • GraphQL

Email

  • Email
  • Email Templates

Infrastructure

  • Infrastructure
  • Self-Hosting
  • File Storage
  • Docker
  • Background Jobs
  • Terraform & Pulumi
  • Kubernetes

Ui

  • UI & Theming

I18n

  • Internationalization

Content Management

  • Content Management

Admin

  • Admin Panel

Monitoring

  • Analytics & Monitoring

Modules

  • Module Architecture
  • Waitlist
  • Audit Log
  • White-Labeling
  • Workflow Automation
  • A/B Testing
  • Welcome Page
  • Referrals
  • GDPR Export and Deletion
  • Promotions
  • Outgoing Webhooks

Plugins

  • Plugin System
  • CRM Plugin
  • Helpdesk Plugin
  • Email Marketing Plugin

Upgrading

  • Upgrading Codapult

Developer Tools

  • AI Agents & IDEs
  • MCP Server
  • Testing
  • Build Your First Feature with Codapult MCP
  • How Guard Blocks an Architectural Regression
Email

Email

Transactional email with Resend, React Email templates, and custom domain management.

Codapult uses Resend for transactional email delivery and React Email for composable, type-safe email templates. Emails are sent through the background job system for reliability and non-blocking performance.

Setup

Set these environment variables in .env.local:

VariableDescription
RESEND_API_KEYYour Resend API key from resend.com/api-keys
EMAIL_FROMDefault sender address (e.g. Your App <hello@yourdomain.com>)

Sending Email

Use the enqueueEmail helper from @/lib/jobs to send emails via the background job system:

import { render } from 'react-email';
import { enqueueEmail } from '@/lib/jobs';
import { WelcomeEmail } from '@/lib/email/templates/WelcomeEmail';

const html = await render(
  <WelcomeEmail userName="Jane" dashboardUrl="https://app.example.com/dashboard" />,
);

await enqueueEmail('jane@example.com', 'Welcome to the team!', html);

The enqueueEmail function accepts three arguments — to, subject, and html — and dispatches a send-email background job that delivers via Resend.

Templates

Email templates live in src/lib/email/templates/ and are React components built with the react-email package. Five templates are included out of the box (Welcome, Billing, Reset Password, Invitation, and a shared BaseLayout).

For creating new templates, the component API, and styling rules, see the dedicated Email Templates page.

Custom Sending Domains

Codapult integrates with the Resend Domains API to let you verify and manage custom sending domains directly from the admin panel.

Admin Panel

Navigate to Admin → Email Domains to:

  • Add a new sending domain
  • View DNS records required for verification (SPF, DKIM, DMARC)
  • Check verification status
  • Remove a domain

How It Works

  1. Add your domain in the admin panel
  2. Resend returns the required DNS records
  3. Add the DNS records to your domain provider
  4. Resend verifies the records automatically
  5. Start sending from @yourdomain.com addresses

Development Without Resend

When RESEND_API_KEY is not set, all email sending is skipped — the enqueueEmail function logs the email details to the console instead of sending. This lets you develop and test without a Resend account.

To test actual email delivery locally, sign up for a free Resend account and use the provided API key. The free tier allows 100 emails/day.

Bounce Handling

Resend handles bounces and complaints automatically. You can configure bounce webhooks in the Resend dashboard to receive notifications when emails bounce or are marked as spam. Codapult does not include built-in bounce handling logic — implement it based on your product's needs (e.g. disable email notifications for bouncing addresses).

Removing the Module

Email is a manually removable module, but it does not have a separate setup-wizard flag. See the Modules documentation for the removal scope and update any code that calls enqueueEmail if you remove it.

GraphQLEmail Templates