Build your next SaaS product on a starter that already ships authentication, billing, storage, provider runtime management, and operator-facing observability.
Logicstarter is the current starter baseline for future product lines.
It is designed for teams that want to launch faster without rebuilding the same infrastructure every time:
- Better Auth already wired into the runtime
- Provider configuration for auth, billing, email, SMS, and storage
- Stripe billing flows with checkout, portal, webhook, state, and repair paths
- Storage abstraction for local, S3, and R2
- Runtime visibility for operators
- Real smoke validation paths for auth, storage, and billing
-
Authentication
- Better Auth
- email/password
- social providers
- organization-ready auth surfaces
-
Billing
- Stripe checkout
- customer portal
- webhook handling
- billing state sync and repair
-
Provider runtime
- env-oriented configuration workflow
- provider settings console
- runtime snapshots for troubleshooting
- validation before rollout
-
Storage and delivery
- local storage
- S3 / R2 support
- email provider abstraction
- SMS provider abstraction
-
Live starter
https://starter.logicm8.com
-
Docs
https://starter.logicm8.com/docs
-
Provider console
https://starter.logicm8.com/settings/providers
Logicstarter supports two main deployment styles:
-
Node runtime
- uses
.envand optional.env.runtime
- uses
-
Cloudflare-style runtime
- uses bindings and deployment secrets as the source of truth
For future product lines, runtime env and deployment secrets should remain the canonical configuration layer.
/settings/providers/api/providers/runtime/api/auth/runtime/api/billing/runtime/api/billing/checkout/api/billing/portal/api/billing/webhook/api/billing/state/api/billing/sync/api/storage/runtime
- Copy
.env.exampleto.env. - Copy
.env.runtime.exampleto.env.runtimeif you want runtime overrides. - Set
DATABASE_URL,BETTER_AUTH_SECRET,BETTER_AUTH_URL,APP_ORIGIN, andSETTINGS_SECRET_KEY. - Configure the providers you need.
- Start the app with your normal package workflow.
- Copy
.env.docker.exampleto.env.docker.app. - Copy
.env.docker.db.exampleto.env.docker.db. - Copy
.env.docker.runtime.exampleto.env.docker.runtime. - Set
POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD, andDATABASE_URLin the Docker env files. - Set
LOGICSTARTER_DOCKER_POSTGRES_PORTif host port55432is not suitable. - Run
docker compose up --build. - Run
docker compose exec app pnpm db:migrate.
For the full bootstrap flow, read docs/docker-install.md.
pnpm typecheckpnpm buildpnpm smoke:baselinepnpm smoke:auth-realpnpm smoke:storage-realpnpm smoke:billing-real
Billing validation depends on these being correct:
- Stripe runtime keys are configured
/api/billing/runtimereports healthy readiness- the Stripe test account contains at least one active recurring price
Before treating billing as blocked by application logic, also confirm:
- the smoke user exists and is verified
LOGICSTARTER_TEST_EMAILis setLOGICSTARTER_TEST_PASSWORDis setLOGICSTARTER_STRIPE_TEST_PRICE_IDpoints to an active recurring Stripe test price
If webhooks are delayed or missed, use the authenticated POST /api/billing/sync endpoint to repair local billing state.
Use these documents as the operating baseline for new projects and upgrade work:
docs/docker-install.mddocs/better-auth-current-version-comparison.mddocs/ai-windsurf-operations.mddocs/migration-from-starter.mddocs/release-candidate-checklist.mddocs/github-transition-handoff.mddocs/plans/logicstarter-github-transition-plan.md
If you are moving an older starter deployment onto this line, follow docs/migration-from-starter.md.