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
Modules

Welcome Page

Post-purchase landing for the one-time license flow — shows the license key and onboarding next steps.

What it is

/welcome is the landing page users are redirected to after a successful one-time license purchase. It shows:

  • A success confirmation (with the customer's name when available).
  • The license key and the email it's registered to.
  • Three onboarding "next steps": access the private GitHub repo, read the quick-start guide, and join the community.
  • Primary / secondary CTAs linking to the docs quick-start and the homepage.

The page is server-rendered, i18n-ready, and marked robots: noindex, nofollow — it is only meant to be reached via a redirect from checkout, not indexed.

Query parameters

The page reads the following search params and renders them directly — it does not hit the database:

ParamRequiredUsed for
license_keyOptionalDisplayed in a highlighted card; hidden if missing.
emailOptionalShown alongside the license key ("Registered to …").
nameOptionalPersonalizes the heading ("Welcome, !").
order_idOptionalReserved for future use (not rendered today).

Because values come from the URL, do not pass secrets beyond the license key itself, and make sure your payment provider's redirect is HTTPS.

Where it's wired in

The checkout route in src/app/api/checkout/route.ts sets redirectUrl to ${appConfig.appUrl}/welcome. Your payment provider (Stripe, LemonSqueezy, or Polar) appends the license key + customer data as query params via its return URL / webhook. Example LemonSqueezy redirect after a successful purchase:

https://your-app.com/welcome?license_key=ABCD-1234&email=customer@example.com&name=Alex

If you use a different payment provider, configure its post-purchase redirect to the same /welcome URL and the same param names.

Files

FilePurpose
src/app/[locale]/(public)/(marketing)/welcome/page.tsxThe landing page (server component, reads search params).
messages/<locale>.json → Welcome namespaceAll copy (heading, subtitle, step titles, CTAs).
src/app/api/checkout/route.tsSets redirectUrl so the provider lands users here.

Not to be confused with…

  • Welcome email (src/lib/email/templates/WelcomeEmail.tsx) — a transactional email sent by the Auth module on signup. Different trigger, different delivery channel, different template.
  • Onboarding tours (src/lib/onboarding/) — in-app guided tours for logged-in users. The welcome page runs before login.

Customizing

  • Copy — edit the Welcome namespace in each messages/<locale>.json.
  • Steps / CTAs — edit the steps array and the two buttons in src/app/[locale]/(public)/(marketing)/welcome/page.tsx. The default steps (GitHub, docs, community) match the license-sale flow; if you're selling a managed SaaS subscription instead of source code, replace them with "Go to dashboard", "Invite your team", etc.
  • License key block — wrap the <Card> section with server-side verification (e.g. call your licensing API) if you want to validate the key before rendering it.

Removing the module

If you're not selling one-time licenses (for example, pure subscription SaaS without license keys):

  1. Delete src/app/[locale]/(public)/(marketing)/welcome/.
  2. In src/app/api/checkout/route.ts, change redirectUrl to /dashboard (or any post-checkout page that makes sense for your flow).
  3. Remove the Welcome namespace from each messages/<locale>.json.
A/B TestingReferrals