Run the template locally
This page takes a clean checkout to a working development application and explains how to return to a clean state.
Prerequisites
Install:
- .NET 10 SDK;
- Node.js 24 or a compatible current LTS release;
- npm;
- SQLite CLI for the diagnostic and verification scripts;
- Git.
Stripe CLI is optional until the Stripe sandbox step. PostgreSQL is only required for production and the optional integration test.
Confirm the local toolchain from the repository root:
./scripts/doctor.shWarnings about Stripe or email are expected for a new local checkout. Errors should be resolved before continuing.
Install dependencies
Install the browser dependencies and the small Node toolchain used by the ASP.NET host:
cd MyApp.Client
npm install
cd ../MyApp
npm installNuGet packages are restored automatically by dotnet build or dotnet watch.
Start the application
cd MyApp
dotnet watch
Open https://localhost:5001. ASP.NET Core owns the public origin and starts the Next.js development process automatically. Browser API requests therefore use the same origin as Identity cookies and ServiceStack APIs.
The first Development start with no application database:
- creates the ASP.NET Core Identity schema;
- runs the OrmLite SaaS migrations;
- seeds Free, Pro, Business, and Enterprise plans;
- creates development users;
- creates a personal organization and Free subscription when a seeded user first signs in.
Development accounts
All seeded users use the password p@55wOrd.

| Account | Intended use |
|---|---|
admin@email.com | Full SaaS administration |
billing@email.com | BillingAdmin boundary testing |
support@email.com | Support-access boundary testing |
manager@email.com | Customer owner and team workflows |
employee@email.com | Normal customer membership |
test@email.com | Minimal authenticated flow |
Seed users are created only in Development. Production startup never creates known credentials.
Check the application
After signing in, verify:
/dashboardloads the active organization once without repeated API calls;/documentspermits a small supported file upload;/usagedisplays document and storage usage;/settingsdisplays organization lifecycle controls for an Owner;/adminopens the Operations Center foradmin@email.com; its side menu links to the focused/admin/*routes;/upand/readyreturn healthy responses.
API contracts and diagnostic tools are available at /scalar/v1, /ui, and /admin-ui.
Recreate local state
This template is designed to recreate itself from an empty development database. Stop the application, then run:
ASPNETCORE_ENVIRONMENT=Development ./scripts/reset-dev.sh --yesThe script validates exact paths before removing MyApp/App_Data/app.db and MyApp/App_Data/files. It then runs the migration task. It refuses to run outside Development or without --yes.
ServiceStack Background Jobs and request logs use separate generated SQLite databases under MyApp/App_Data/jobs and MyApp/App_Data/requests. They are operational development artifacts and can also be removed while the application is stopped.
Common setup problems
The HTTPS certificate is not trusted
Trust the ASP.NET Core development certificate:
dotnet dev-certs https --trustPort 5001 or 3000 is already in use
Stop the previous dotnet watch, dotnet run, or Next.js development process before starting another instance.
The schema does not match the code
During template development, recreate the local database with reset-dev.sh. Derived production applications should add a forward migration instead.
Paid checkout is unavailable
That is expected until Stripe sandbox keys and plan Price IDs are configured in step 6.
Understand the template
Next SaaS provides the generic foundation that most self-service B2B SaaS products need. You replace the Acme example domain while retaining the reusable identity, billing, tenancy, entitlement, quota, and operations infrastructure.
Tour the project
The repository is organized so a feature has a predictable path from contract to implementation to UI.