Codapult
TarifsPluginsBlogDocsDémo
Logo

Le boilerplate SaaS pour les créateurs

© 2026 Codapult. Tous droits réservés.

Built with Codapult

Projet

  • Tarifs
  • Plugins
  • Blog
  • Documentation

Alternatives

  • Comparaison de templates SaaS
  • Codapult vs Supastarter
  • Codapult vs Makerkit
  • Codapult vs ShipFast
  • Codapult vs SaaSBold
  • Codapult vs Gravity
  • Codapult vs Nextbase
  • Codapult vs BuilderKit

À propos

  • Contact

Mentions légales

  • Politique de confidentialité
  • Conditions d'utilisation
Tous les articles

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

Module Architecture

How Codapult modules work, the full module map, and how to remove features you don't need.

Design Principles

Every feature in Codapult is packaged as a self-contained module with its own directories, routes, components, and database tables. Modules follow three rules:

  1. Independent — each module lives in its own directories and can be deleted without breaking other modules.
  2. Core-dependent only — modules depend on the Core layer (Auth, Database, Rate Limiting, Validation), not on each other, unless explicitly noted.
  3. CLI-removable — the interactive setup wizard can strip modules automatically.

Module Map

ModuleDirectoriesDependenciesRemovableEnv Toggle
Authsrc/lib/auth/, src/app/[locale]/(auth)/Core (required)No
Databasesrc/lib/db/Core (required)No
AI Chatsrc/app/[locale]/(dashboard)/dashboard/ai-chat/, src/app/api/chat/, src/components/ai/NoneYesENABLE_AI_CHAT
Billingsrc/lib/payments/, src/lib/actions/billing.ts, src/app/api/webhooks/NoneYes
Blogsrc/app/[locale]/(marketing)/blog/, src/components/blog/, src/lib/blog/, content/blog/NoneYesENABLE_BLOG
Teamssrc/app/[locale]/(dashboard)/dashboard/teams/, src/app/[locale]/invite/AuthYesENABLE_TEAMS
Notificationssrc/lib/notifications/, src/components/dashboard/NotificationBell.tsxAuthYes
Feature Flagssrc/lib/feature-flags.ts, src/app/[locale]/admin/feature-flags/DBYes
File Uploadssrc/lib/storage/, src/app/api/upload/AuthYes
Waitlistsrc/app/[locale]/(marketing)/waitlist/EmailYesENABLE_WAITLIST
Welcome Pagesrc/app/[locale]/(marketing)/welcome/Billing, AuthYes
API Keyssrc/lib/api-keys.tsAuth, DBYes
Usage Creditssrc/lib/usage.tsAuth, DBYes
Activity Logsrc/lib/activity-log.ts, src/app/[locale]/admin/activity/DBYesENABLE_AUDIT_LOG
Webhook Logsrc/lib/webhook-log.ts, src/app/[locale]/admin/webhooks/DBYes
Support Widgetsrc/components/support/SupportWidget.tsxNoneYes
Emailsrc/lib/email/ResendYes
i18nsrc/i18n/, messages/next-intlYes
Analytics (PostHog)src/components/analytics/PostHogYes
SEOsrc/app/sitemap.ts, src/app/robots.tsNoneYes
Sentrysrc/instrumentation*.ts, src/sentry.*.ts@sentry/nextjsYes
GraphQL APIsrc/lib/graphql/, src/app/api/graphql/graphql-yogaYes
Enterprise SSOsrc/lib/sso/NoneYesENABLE_SSO
Help Centersrc/lib/docs/, src/app/[locale]/(marketing)/docs/, content/docs/NoneYesENABLE_HELP_CENTER
A/B Testingsrc/lib/experiments/DBYesENABLE_EXPERIMENTS
Feature Requestssrc/lib/feature-requests/DBYesENABLE_FEATURE_REQUESTS
Stripe Connectsrc/lib/payments/connect.tsStripeYes
Event Storesrc/lib/event-store/DBYes
White-labelingsrc/lib/white-label/DBYesENABLE_BRANDING
GDPRsrc/lib/gdpr/DBYes
Outgoing Webhookssrc/lib/outgoing-webhooks/DBYesENABLE_WEBHOOKS
Drip Campaignssrc/lib/drip-campaigns/Email, JobsYesENABLE_DRIP_CAMPAIGNS
Onboarding Tourssrc/lib/onboarding/DBYesENABLE_ONBOARDING
Analytics (Self-serve)src/lib/analytics/DBYesENABLE_ANALYTICS
Custom Domainssrc/lib/custom-domains/DBYes
Workflowssrc/lib/workflows/EmailYesENABLE_WORKFLOWS
Referralssrc/lib/referrals/DBYesENABLE_REFERRALS
OpenTelemetrysrc/lib/telemetry/@opentelemetry/*Yes
Changelog Widgetsrc/components/dashboard/ChangelogWidget.tsxNoneYesENABLE_CHANGELOG
RAG Pipelinesrc/lib/ai/rag.ts, src/lib/ai/embeddings.ts@ai-sdk/openaiYes
SCIM Provisioningsrc/lib/scim/TeamsYes
Chat Memorysrc/lib/ai/conversations.tsAI Chat, DBYes
Scheduled Reportssrc/lib/scheduled-reports/Email, JobsYesENABLE_REPORTS
API Versioningsrc/lib/api-version.tsNoneYes
Audit Log (User)src/app/api/audit-log/Activity LogYes

Removal vs. Disabling: Two Different Operations

Codapult has two separate ways to exclude a module from your product. Understanding the difference before setup matters.

Removing a module (CLI or manual, permanent): The module's code is deleted from your repository — files, routes, components, database tables, and imports. The build gets smaller and the codebase stays clean. Removing a module via the CLI wizard cannot be undone through the CLI. If you need the module back later, you add it manually from the Codapult source repository.

Disabling a module (env var, reversible): If a module is present in the codebase but you are not ready to use it, you can hide it via an environment variable. The code stays in the repo; the feature is invisible to users. Flip the variable to re-enable it at any time, with no code changes.

Practical rule: Remove modules you are confident are outside your product's scope. Keep modules you are unsure about — disable them via env var until you need them. The cost of keeping code you do not use yet is low. The cost of manually re-adding removed code is not.

How to Remove a Module

CLI Wizard (Recommended)

Run the interactive setup wizard and deselect the modules you don't need:

npx @codapult/cli setup

The wizard automatically deletes files, removes imports, cleans up navigation, and updates the schema.

This is permanent. The wizard deletes files, imports, and schema tables — it doesn't just hide them. If you're not sure whether you'll need a module later, don't remove it here. Leave it in and turn it off with the matching ENABLE_* environment variable instead (see the Module Map below or Environment Variables) — that's reversible, the CLI removal isn't.

Manual Removal

For finer control, remove a module by hand:

  1. Delete the module's directories (see the table above).
  2. Remove all imports referencing the deleted module.
  3. Remove database tables from src/lib/db/schema.ts and regenerate migrations.
  4. Remove navigation links from src/config/navigation.ts, Sidebar.tsx, admin layout, and marketing navbar.
  5. Uninstall npm dependencies unique to the module.
  6. Remove environment variables from .env.example.

Example: Removing AI Chat

# Delete files
rm -rf src/app/\\[locale\\]/\(dashboard\)/dashboard/ai-chat
rm -rf src/app/api/chat
rm -rf src/components/ai

# Remove the AI Chat nav item from Sidebar.tsx
# Edit src/components/dashboard/Sidebar.tsx

# Uninstall dependencies (if not used elsewhere)
pnpm remove @ai-sdk/openai @ai-sdk/anthropic ai @ai-sdk/react

# Remove env vars from .env.example:
# OPENAI_API_KEY, ANTHROPIC_API_KEY, EMBEDDING_PROVIDER,
# VECTOR_STORE_PROVIDER, OLLAMA_BASE_URL, OLLAMA_EMBEDDING_MODEL

Example: Removing Teams

# Delete files
rm -rf src/app/\\[locale\\]/\(dashboard\)/dashboard/teams
rm -rf src/app/\\[locale\\]/invite
rm src/components/dashboard/TeamSwitcher.tsx
rm src/components/dashboard/TeamSettings.tsx
rm src/components/dashboard/AcceptInvitationButton.tsx
rm src/lib/db/organizations.ts
rm src/lib/actions/organizations.ts

# Remove organization tables from src/lib/db/schema.ts:
# organization, organization_member, organization_invitation

# Remove TeamSwitcher from Sidebar.tsx

# Regenerate migrations
pnpm run db:generate

Dependency Boundaries

Modules form a layered dependency graph. The Core layer is required; everything above it is optional and independently removable.

┌───────────────────────────────────────────────┐
│                 Core Layer                    │
│  (Auth, Database, Rate Limiting, Validation)  │
└─────────────────────┬─────────────────────────┘
                      │
         ┌────────────┼────────────┐
         │            │            │
    ┌────▼────┐  ┌────▼────┐  ┌────▼────┐
    │ Billing │  │  Teams  │  │  Admin  │
    └─────────┘  └─────────┘  └─────────┘
         │            │            │
    ┌────▼────┐  ┌────▼────┐  ┌────▼────┐
    │ Usage   │  │  RBAC   │  │ Feature │
    │ Credits │  │         │  │  Flags  │
    └─────────┘  └─────────┘  └─────────┘

Modules only depend on the Core layer. They do not depend on each other unless explicitly noted in the Dependencies column (for example, SCIM Provisioning depends on Teams, and Chat Memory depends on AI Chat).

Analytics & MonitoringWaitlist