Codapult
料金プラグインブログドキュメントデモ

開発者のためのSaaSボイラープレート

© 2026 Codapult. All rights reserved.

Built with Codapult

プロジェクト

  • 料金
  • プラグイン
  • ドキュメント
  • SaaSテンプレート比較

会社概要

  • お問い合わせ

法的情報

  • プライバシーポリシー
  • 利用規約
全記事

Getting Started

  • Introduction
  • Quick Start
  • Project Structure
  • License and Permitted Use

Configuration

  • Environment Variables
  • App Configuration

Authentication

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

Database

  • Database
  • Migrations

Teams

  • Teams & Organizations
  • Permissions & RBAC
  • SCIM Provisioning

Payments

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

Api

  • API Layer
  • tRPC
  • GraphQL

Ai

  • AI Features
  • Streaming Chat
  • RAG and Semantic Search
  • Quotas and Memory

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

Security

  • Security

Monitoring

  • Analytics & Monitoring

Modules

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

Plugins

  • Plugin System
  • AI Kit Plugin
  • CRM Plugin
  • Helpdesk Plugin
  • Email Marketing Plugin

Deployment

  • Deployment
  • Troubleshooting

Upgrading

  • Upgrading Codapult

Developer Tools

  • AI Agents & IDEs
  • MCP Server
  • Testing
Modules

Waitlist

Collect early-access signups with a public landing page, rate limiting, and confirmation email.

What it is

The Waitlist module gives you a public, conversion-focused landing page at /waitlist where visitors enter their email (and optionally name + referral source) to join your early-access list. Each submission is persisted to the database and triggers a confirmation email.

Use it when you want to:

  • Launch a "coming soon" page while building.
  • Gate signups behind an approval flow (beta / invite-only).
  • Collect demand signal before going public.

How to enable / disable

Enabled by default. Toggle with a single env var — no code changes.

# Disable the public /waitlist page and the admin/waitlist sidebar entry
ENABLE_WAITLIST="false"

When disabled:

  • /waitlist returns 404 (via src/proxy.ts).
  • The Waitlist link is removed from the marketing navbar.
  • The /admin/waitlist link is hidden from the admin sidebar.
  • The waitlist URL is removed from sitemap.xml.

Dashboard/admin API routes continue to exist; the flag only controls visibility of UI surfaces.

Where customers find it

  • Marketing navbar — a Waitlist link is shown when ENABLE_WAITLIST is on.
  • Direct URL — /<locale>/waitlist (indexed in the sitemap).

If you want to route visitors from a "Coming soon" hero instead of the regular pricing page, remove /pricing from the navbar and point the Hero CTA to /waitlist by editing src/components/marketing/Hero.tsx.

Files

FilePurpose
src/app/[locale]/(marketing)/waitlist/page.tsxPublic landing page (server component, i18n-ready).
src/components/marketing/WaitlistForm.tsxClient form with inline success / error state.
src/lib/actions/waitlist.tsServer action joinWaitlist — validation, dedupe, email.
src/lib/db/schema.ts (waitlist_entry table)Persistence (email unique, optional name + referral source).
src/app/[locale]/admin/waitlist/Admin list view (entries, export, etc.).

Flow

  1. Visitor submits the form on /waitlist.
  2. joinWaitlist server action validates input with Zod and checks a shared rate limit (waitlist:global, 60 req/min).
  3. If the email is new, a row is inserted into waitlist_entry; duplicates return a friendly "already on the list" message.
  4. A confirmation email is sent via the Email module (sendEmail). Failures are logged but do not block the response.
  5. Admins can review submissions at /admin/waitlist.

i18n

Copy lives under the Waitlist namespace in messages/<locale>.json. Required keys: pageTitle, pageSubtitle, noSpam, plus form/error strings used by WaitlistForm.

Removing the module

If you don't need waitlist at all (not just temporarily disabled), remove it entirely:

  1. Delete src/app/[locale]/(marketing)/waitlist/, src/app/[locale]/admin/waitlist/, src/lib/actions/waitlist.ts, src/components/marketing/WaitlistForm.tsx.
  2. Drop the waitlist_entry table from src/lib/db/schema.ts and regenerate migrations (pnpm run db:generate).
  3. Remove the waitlist entries from src/config/navigation.ts and the blog/waitlist branches in src/proxy.ts, src/app/sitemap.ts, and src/components/marketing/Navbar.tsx.
  4. Remove the waitlist flag from env.features in src/lib/config.ts and drop ENABLE_WAITLIST from .env.example.
  5. Remove the Waitlist namespace from each messages/<locale>.json.
Module ArchitectureAudit Log