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
Infrastructure

Terraform & Pulumi

Provision AWS infrastructure for Codapult with Terraform or Pulumi.

Codapult includes equivalent AWS infrastructure templates in infra/terraform/ and infra/pulumi/.

What Gets Provisioned

ResourcePurpose
VPC + public subnetsIsolated network across availability zones
Security groupsALB ingress and ECS task access
ECRDocker image registry with image scanning and lifecycle policy
ECS FargateServerless container hosting for the Next.js app
ALBHTTP/HTTPS load balancing with /api/health checks
ACM + Route53Optional TLS certificate and DNS record when domain_name is set
S3Optional private upload bucket for the S3 storage adapter
SSM Parameter StoreEncrypted application secrets
CloudWatchContainer logs and ECS observability

The templates do not provision a database. Use Turso/libSQL or managed PostgreSQL and pass the connection values as secrets.

Terraform

cd infra/terraform
cp terraform.tfvars.example terraform.tfvars
terraform init
terraform plan
terraform apply

Build and push the app image:

ECR_URL=$(terraform output -raw ecr_repository_url)
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin "$ECR_URL"
docker build -t "$ECR_URL:latest" ../..
docker push "$ECR_URL:latest"
aws ecs update-service \
  --cluster "$(terraform output -raw ecs_cluster_name)" \
  --service "$(terraform output -raw ecs_service_name)" \
  --force-new-deployment

Important variables:

VariableDescription
project, environment, aws_regionResource naming and target region
vpc_cidr, availability_zonesNetwork layout
container_cpu, container_memory, desired_countFargate sizing
domain_name, route53_zone_idOptional HTTPS custom domain
enable_s3_storageCreate private S3 upload bucket
turso_database_url, turso_auth_tokenTurso/libSQL database connection
better_auth_secretBetter Auth signing secret
stripe_secret_key, stripe_webhook_secretStripe billing
resend_api_key, openai_api_keyEmail and AI integrations

Pulumi

cd infra/pulumi
pnpm install
pulumi stack init production
pulumi config set aws:region us-east-1
pulumi config set tursoUrl "libsql://..." --secret
pulumi config set tursoToken "..." --secret
pulumi config set authSecret "..." --secret
pulumi up

Useful Pulumi config keys:

KeyDescription
project, environmentResource naming
containerPort, cpu, memory, desiredCountECS task configuration
domainName, route53ZoneIdOptional TLS and DNS
enableS3Optional S3 uploads bucket
healthCheckPathALB health check path
tursoUrl, tursoTokenDatabase connection
authSecret, stripeKey, stripeWebhook, resendKey, openaiKeyApp secrets

Outputs

Both templates expose the app URL, ECR repository URL, ECS cluster/service names, S3 bucket name, and CloudWatch log group. Use these outputs from CI/CD to push images and trigger ECS deployments.

Production Notes

  • Store secrets in terraform.tfvars only for local operator workflows; prefer CI secret stores for automated deployments.
  • Set domain_name/domainName only when the Route53 zone is available in the AWS account.
  • Use private subnets and NAT gateways if your compliance requirements prohibit public ECS task IPs; the included template favors a lower-cost public-subnet baseline.
  • Configure STORAGE_PROVIDER="s3" and S3 env vars when using the provisioned bucket for uploads.
Background JobsKubernetes