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
Authentication
Email/password, social OAuth, 2FA, passkeys, roles.
API Keys
Per-user keys for programmatic API access, rate-limited by plan.
CAPTCHA
Cloudflare Turnstile bot protection on auth and public forms.
Billing
Payments
Stripe or Polar - subscriptions and billing.
Plans & Pricing
Subscription tiers, prices, and currencies in pricingConfig.
Credits
Usage-based credit balances and consumption.
One-time Products
Single-purchase items with ownership checks.
Organizations
Teams, members, roles, multi-tenancy.
Messaging
Transactional + marketing email, typed templates.
Newsletter
Daily sync of opted-in users to Listmonk or Resend.
SMS
Twilio text messaging and phone flows.
Notifications
In-app and delivered user notifications.
Admin Notifications
Operator alerts to Discord, Slack, or Telegram.
Storage & data
Storage
File uploads to S3-compatible object storage.
Database
Drizzle + Postgres schema, migrations, and auth tables.
Caching
Redis-backed cache layer.
Backend & platform
API
The shared Hono backend and typed RPC client.
Background jobs
Inngest functions for billing and lifecycle.
i18n
Multi-locale translations and routing.
Performance Monitoring
Per-request Hono timing - method, path, status, duration.
Content & growth
Blog
Content-driven marketing blog with view tracking.
Marketing & SEO
Prerendered landing, structured data, sitemap, robots.
Waitlist
Pre-launch capture instead of real signups.
Onboarding
Post-signup profile step + welcome email sequence.
Banners
Site-wide and dashboard announcement bars - config.banner.
Integrations
Analytics
Umami and other analytics providers.
Support chat
Crisp live chat / support widget.
Affiliate tracking
Referral and affiliate attribution.
Cookie Consent
GDPR-aware consent banner gating third parties.
AI & ops
AI
LLM-backed features and chat.
Audit logs
Recorded security and admin events.
CLI
Scaffold, eject, and license generated projects.
Dashboard & Settings
Authenticated dashboard with flag-gated settings and admin.
Deployment
Vercel, Docker, and self-hosting.
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.enabled | Behavior |
|---|---|
true | Feature renders, its routes mount, its @repo/* package runs. |
false | UI 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.