README-template.md
Your application, generated from the FSH .NET Starter Kit — a production-ready modular .NET 10 monolith with two React 19 apps, multitenancy, identity, background jobs, and cloud-native deploy.
You own all of this source. There are no framework NuGet packages to track or upgrade —
the shared code lives in src/BuildingBlocks and is yours to change.
dotnet run --project src/Host/FSH.Starter.AppHost
Aspire starts Postgres, Redis, and MinIO, runs database migrations, then launches the API and both React apps.
| Surface | URL |
|---|---|
| Aspire dashboard | https://localhost:15888 |
| API + Scalar docs | https://localhost:7030/scalar |
| Admin console | http://localhost:5173 |
| Tenant dashboard | http://localhost:5174 |
dotnet run --project src/Host/FSH.Starter.Api # needs external Postgres + Redis
cd clients/admin && npm install && npm run dev # → http://localhost:5173
cd clients/dashboard && npm install && npm run dev # → http://localhost:5174
The React apps read their API URL at runtime from public/config.json — no rebuild to repoint.
src/
BuildingBlocks/ Shared framework libraries — yours to modify
Modules/ Bounded contexts: Identity, Multitenancy, Auditing, Billing,
Catalog, Chat, Files, Notifications, Tickets, Webhooks
Host/
FSH.Starter.Api/ API composition root
FSH.Starter.AppHost/ .NET Aspire orchestrator
FSH.Starter.DbMigrator/ One-shot migrate / seed runner
FSH.Starter.Migrations.PostgreSQL/ EF Core migrations
Tests/ Unit, integration (Testcontainers), and architecture tests
clients/
admin/ Operator console (React 19 + Vite + Tailwind)
dashboard/ Tenant app (React 19 + Vite + Tailwind, SSE live feed)
deploy/
docker/ Production docker-compose + .env
terraform/ AWS infrastructure (ECS, RDS, ElastiCache, S3)
Migrations run automatically under Aspire. To apply them yourself:
dotnet run --project src/Host/FSH.Starter.DbMigrator -- apply --seed
This project shipped with sensible defaults. Before production:
deploy/docker/.env (the fsh CLI generates these
for you; otherwise cp deploy/docker/.env.example deploy/docker/.env and fill them in).
Never commit .env.clients/admin/public/logo-fullstackhero.png and
clients/dashboard/public/logo-fullstackhero.png with your own.MailOptions in
src/Host/FSH.Starter.Api/appsettings.json.OpenApiOptions.Contact in appsettings.json.deploy/terraform/apps/starter/**/variables.tf and terraform.tfvars.cd deploy/docker
# .env is generated for you by the fsh CLI; otherwise: cp .env.example .env && edit
docker compose up -d --build
Sign in to the admin console as [email protected] using the SEED_ADMIN_PASSWORD from your
.env, then rotate it from Settings → Security.
src/Modules/{Module}.Contracts/v1/{Area}/{Feature}/src/Modules/{Module}/Features/...MapEndpoints()dotnet test src/FSH.Starter.slnx # integration tests require Docker