GenerateSaaS

Introduction

Production-ready SaaS boilerplate with a Nuxt frontend on a shared Hono backend, with every feature flag-gated.

GenerateSaaS is a production-ready SaaS boilerplate. This Nuxt frontend (apps/web-nuxt) runs on a shared Hono backend (@repo/api), and every feature is gated by a flag in the config object (packages/config/src/index.ts).

Feature grid

Each feature is owned by a @repo/* package and switched on through its config key. Pick a feature to see its flag, keys, and setup.

Auth & access

Billing

Messaging

Storage & data

Backend & platform

Content & growth

Integrations

AI & ops

Config-flag philosophy

The config object exported from packages/config/src/index.ts is the master switch - most features are a discriminated union { enabled: false } | { enabled: true; ... }. The frontend checks the flag before rendering, so a feature's package files stay in place either way and flipping the flag is enough.

config.X.enabledBehavior
trueFeature renders, its routes mount, its @repo/* package runs.
falseUI hidden, routes and sidebar entries skipped, backend paths short-circuit - no setup required.

Shipped defaults: almost everything ships on - payment (provider: "stripe"), storage ("s3"), sms ("twilio"), email ("smtp"), newsletter ("listmonk"), plus notifications, blog, apiKeys, and captcha. The one feature off by default is waitlist (false), so signups create real accounts.

Single-vendor features (payment, storage, sms, email, newsletter, captcha) pick their vendor via a provider value plus matching env vars. analytics differs - enable one or more providers by adding each provider's sub-config (no provider key). See Configuration.

These docs are AI context

This documentation ships inside every generated project and doubles as AI-agent context. A generated Nuxt project keeps the docs/nuxt silo (the other framework's silo and the internal docs/superpowers folder are stripped by generatesaas init). The generated AGENTS.md points coding agents at docs/, and every cited config key, package, and path is real - so an agent can act on it directly.

Get started

On this page