Deterministic full-stack starter showcasing .NET 9 + Angular with Keycloak and Postgres, wired for reproducible local infra, EF migrations via a one-shot migrator, and monorepo-friendly Docker/Nx workflows.
- Infra: Postgres + PgAdmin, Keycloak with declarative seeding (config CLI).
- Backend: ASP.NET Core 9 API with Keycloak auth/UMA and SPA config at
/api/identity/spa-config. - Frontend: Angular SPA that bootstraps Keycloak/API config from the backend (no hardcoded env files).
Prereqs: Docker/Compose. Run from repo root:
cp .env.example .env(or use.env.localfor personal overrides)docker compose -f docker/docker-compose.yml up --build- URLs: API http://localhost:5106 (Swagger UI at
/api, spec at/api/specification.json), Keycloak http://localhost:8081, PgAdmin http://localhost:5050.
- Infra + API via Docker:
docker compose -f docker/docker-compose.yml up --build(includes EFdb-migrator, Postgres, Keycloak, API). - Frontend locally:
yarn installthenyarn nx serve todo(http://localhost:4200). The SPA reads/api/identity/spa-config; no Angular env files needed.
- Copy
.env.exampleto.envfor Docker defaults; use.env.localfor local-only overrides. - Key vars:
ConnectionStrings__DefaultConnection, Keycloak realm/admin/client secrets, SPA client IDs/URLs. Defaults are in.env.example.
- EF migrations run via the
db-migratorone-shot service in Compose before the API starts. - HTTPS/prod hardening is out of scope; adjust compose/nginx as needed.