Production-oriented SaaS starter with a credible admin shell, provider-backed runtime settings, organization-centric tenancy, and an upgrade-safer core/app boundary.
LogicStarter is a sellable SaaS foundation for teams that want more than a demo scaffold.
It gives you a reusable platform core with:
- organization-centric multi-tenancy
- starter-owned admin and settings surfaces
- provider-backed runtime configuration stored in the database
- billing, branding, support, and operator access posture already modeled
- safer long-term layering between starter core and app-specific product logic
- Website: starter.logicm8.com
- Public Docs: starter.logicm8.com/docs
- Changelog: CHANGELOG.md
- Deployment Guide: docs/deployment.md
- Getting Started: docs/getting-started.md
- Admin Overview: docs/admin-overview.md
- Runtime Settings: docs/runtime-settings.md
- Architecture: docs/starter-architecture.md
- Dual-track Development: docs/dual-track-development.md
- Sign Integration Path: docs/sign-integration-path.md
- Starter Next-phase Entry: docs/starter-next-phase-entry.md
- Release Readiness Checklist: docs/release-readiness-checklist.md
- Troubleshooting: docs/troubleshooting.md
If you are evaluating the project from GitHub, start here first.
Use Docker when you want the fastest reproducible local or server deployment baseline.
- Copy the repository source.
- Create a
.envfile. - Start PostgreSQL and the app with Docker Compose.
Repository deployment assets:
If you want the shortest bootstrap path for local evaluation:
sh scripts/install.shThis script creates .env if needed, generates a starter-safe secret when the placeholder is still present, and starts the default Docker stack.
Use 1Panel when you want a buyer-friendly or operator-friendly deployment flow.
Recommended posture:
- create a PostgreSQL service in 1Panel
- set
DATABASE_URLandSETTINGS_SECRET_KEY - build and run the app inside the deployment environment
- expose it behind your reverse proxy and TLS
The deployment guide now includes a dedicated 1Panel section with the recommended order of operations.
pnpm install
pnpm db:generate
pnpm db:push
pnpm devMinimum .env:
DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/starter
SETTINGS_SECRET_KEY=replace-with-a-long-random-secret- Credible admin shell
- you do not start from empty placeholder tiles; operators get a real control surface on day one
- Database-backed runtime settings
- integrations are managed in the product instead of being trapped in
.envforever
- integrations are managed in the product instead of being trapped in
- Organization-first tenant model
- billing, access, branding, and rollout posture stay easier to reason about
- Clear starter/app split
- starter-owned platform concerns stay reusable while product-specific flows stay outside core
- External docs boundary
- public docs, FAQ, and editorial publishing live in external docs systems instead of leaking back into starter core
- React Router 7 application shell
- Better Auth-based local authentication baseline
- PostgreSQL persistence through Drizzle ORM
- provider-backed runtime settings for email, SMS, payment, storage, authentication, and branding
- starter-owned admin shell for operators
- user, organization, payment, support, and settings operational surfaces
- white-label and brand posture controls
- role-based admin access with real authenticated sessions
- runtime verification and health endpoints
- owner self-delete now closes the last-owned organization instead of blocking account deletion
- organization members lose tenant access, while user accounts and payment history are retained
/admin/usersand/admin/organizationsnow follow the same list-first, click-to-edit admin workflow- first install and admin docs are aligned around Initialize administrator and role-based
/adminaccess - repository docs and public docs were updated to reflect the current multi-tenant model and access posture
/adminis protected by real authenticated sessions, not by a separate protected-mode password gate- only users with
users.role = adminorusers.role = operatorcan access starter admin routes - the first install flow initializes the first administrator with email, password, and confirm password
- protected platform access mode and
/accessare removed from the current starter posture - organizations remain the tenant root for billing, plan assignment, and member access
- when the last
ownerdeletes their own account, LogicStarter closes that organization, removes member access, keeps member accounts, and retains billing history
- SaaS starter
- Admin-first
- Multi-tenant
- React Router 7
- PostgreSQL
- Drizzle ORM
- Better Auth
- Docker-ready
- 1Panel-friendly
- Commercially credible
- Repository version:
1.66.0 - Primary operator surface:
/admin - Primary admin configuration entry:
/admin/settings - Public docs posture: external docs site
- License posture:
AGPL-3.0by default with separate commercial licensing
Current runtime integrations:
- Email: Resend, SMTP, Amazon SES
- SMS: Console relay, AWS End User Messaging, Twilio, Vonage
- Payment: Stripe, Lemon Squeezy
- Storage: Local, S3, R2
Authentication is not treated as a casual dropdown swap.
- default posture: Better Auth-style local auth flow
- replacements such as Clerk or Supabase should be treated as explicit architectural swaps
Current operator-facing surfaces include:
/admin/admin/users/admin/organizations/admin/payment/admin/support/admin/content/admin/settings/admin/branding
Legacy /settings/* paths may still exist as compatibility routes, but /admin/* is the primary operator posture.
After the app starts, verify this order:
- open
/and start the first-install flow if the system has no users yet - initialize the first administrator with email, password, and confirm password
- open
/admin/settingsand configure runtime integrations - review
/admin/communications,/admin/payment,/admin/billing, and/admin/branding - open
/adminand inspect organizations, users, payment posture, support, and operational visibility
Start with these repository docs:
- docs/getting-started.md
- docs/deployment.md
- docs/admin-overview.md
- docs/runtime-settings.md
- docs/starter-architecture.md
- docs/dual-track-development.md
- docs/sign-integration-path.md
- docs/starter-next-phase-entry.md
- docs/release-readiness-checklist.md
- docs/extending-starter.md
- docs/operations.md
- docs/troubleshooting.md
For the customer-facing documentation experience, use the dedicated public docs site at starter.logicm8.com/docs.
LogicStarter is organized around four layers:
coreprovidersmodulesapp
Boundary rules:
- apps should prefer starter public surfaces over deep internal imports
- providers should isolate runtime-specific implementation details
- modules should describe reusable capability, not app-specific delivery behavior
- app-specific workflows should remain outside starter core so upgrades stay safer
This repository is available under AGPL-3.0 by default.
If your use case is incompatible with AGPL obligations, a separate commercial license may be offered.
See:
LICENSECOMMERCIAL_LICENSE.mdSECURITY.mdCONTRIBUTING.md
Commercial contacts:
- Licensing:
licensing@logicm8.com - Business:
business@logicm8.com
