GenerateSaaS

Quick Start

From your license key to a running app you can build your SaaS on with AI.

This is the whole path: create your project, run it, then ask your AI agent to build your SaaS on top of it. GenerateSaaS is a pnpm + Turborepo monorepo - the Nuxt frontend (apps/web-nuxt) mounts the Hono backend (@repo/api) at /api, and one pnpm dev runs both. You need Node >=22 (pnpm is installed for you if missing).

Run it

Create your project

npx generatesaas@latest init <your-license-key>

Use the key from your purchase. init walks you through your stack choices, then installs dependencies and writes a ready-to-run .env for you - no separate setup. Already generated your project? Skip to the next step.

Fill in your environment

Open the generated .env and set the values marked # TODO - the credentials for the providers you chose at init. Your database connection must be set before the dev server starts: DATABASE_URL for a self-hosted Postgres (already filled in if you chose the local default), or your managed-database credentials. Regenerate the auth secret any time with openssl rand -hex 32.

Start the dev stack

cd <your-project>
pnpm dev        # http://localhost:3000

Turborepo runs the Nuxt app and the mounted @repo/api backend together. Open http://localhost:3000.

If you chose Docker-backed services at init (self-hosted Postgres, Redis, Mailpit, or Inngest), start them first with pnpm infra; with all-hosted providers there is no infra/ directory and you can skip it.

Build your SaaS

Open the project in your favourite AI coding agent - Claude Code, Cursor, or whatever you use - and ask it to build what you want. The generated AGENTS.md and the docs/ folder ship as context, so your agent understands the architecture, config, and features and builds on the boilerplate instead of reinventing it. That is the point: start from a complete SaaS foundation and describe the product you are building.

Local ports

The Nuxt dev server serves the app and /api from the same origin (fullstack). The shipped .env.example sets NUXT_PUBLIC_API_URL=http://localhost:3000/api, and devServer.port defaults to 3000 to match, so the app and its auth/API clients align out of the box.

ServiceURLWhen
Nuxt app + /apihttp://localhost:3000Always
Inngest UI (background jobs)http://127.0.0.1:8288Always
Mailpit SMTPlocalhost:1025smtp email provider
Mailpit inboxhttp://localhost:8025smtp email provider

Override the port with WEB_PORT in .env (for example to run a second frontend alongside). For a standalone backend (separate architecture), point API_URL and NUXT_PUBLIC_API_URL at port 3010 instead - see Deployment.

The Inngest dev server (UI at http://127.0.0.1:8288, matching INNGEST_BASE_URL) must be running or queued jobs never execute. pnpm dev:inngest always starts it; if infra/ ships, pnpm infra runs it as a container instead. See Background Jobs for the full function list.

Email in development

config.email.provider is whatever you picked at init. With "smtp" it targets Mailpit once you set SMTP_HOST=localhost and SMTP_PORT=1025 (both present in .env.example); Mailpit captures every outgoing message at the inbox http://localhost:8025. With "ses" or "resend" set that provider's credentials instead - see Email.

Next steps

On this page