diff --git a/docs/demo-script.md b/docs/demo-script.md index fdaf9c5..f98d265 100644 --- a/docs/demo-script.md +++ b/docs/demo-script.md @@ -5,6 +5,27 @@ copy-pasteable walkthrough against a local `make up` stack. --- +## S-08a — Nx workspace + self-service portal skeleton + +**Outcome:** the frontend foundation — an Nx (pnpm) monorepo with the `self-service` Angular app +(standalone + signals), lint/test/build green in a CI Node lane. The login + submit form follow in +S-08c. + +```bash +# From a fresh clone (Node 24 + pnpm 11): +pnpm install # native builds are pre-approved in pnpm-workspace.yaml +pnpm nx test self-service # Vitest component test +pnpm nx build self-service # production build +pnpm nx serve self-service # → http://localhost:4200 (placeholder page) +# Or the CI-equivalent one-shot: +make frontend # install + nx lint/test/build +``` + +> Nx manages only `apps/`+`libs/`; the .NET services stay on `dotnet`/the Makefile. NL Design System +> and the real form arrive in S-08c (#67); see `docs/frontend-decisions.md`. + +--- + ## S-07 — BFF: the portals' single backend **Outcome:** the BFF validates Keycloak `digid` tokens on the self-service submit (forwarding the diff --git a/docs/frontend-decisions.md b/docs/frontend-decisions.md new file mode 100644 index 0000000..9f2e7f2 --- /dev/null +++ b/docs/frontend-decisions.md @@ -0,0 +1,31 @@ +# Frontend decisions + +A running log of frontend tooling and component decisions (CLAUDE.md §10). One entry per +decision; record *why*, and note any deviation from NL Design System. + +--- + +## Workspace & tooling (S-08a, #65) + +The portals live in an **Nx monorepo at the repository root**, alongside the .NET `services/`. + +- **Package manager: pnpm.** Native build scripts are approved explicitly in `pnpm-workspace.yaml` + under `allowBuilds` (pnpm 11 fails the install otherwise). Node 24, pnpm 11. +- **Angular, standalone components + signals, no NgModules** (§10). Apps are generated with + `@nx/angular:application`. +- **Unit tests: Vitest** via Angular's built-in `@angular/build:unit-test` (the `vitest-angular` + runner). **Angular Testing Library** is added for component tests when the first real components + land (S-08c); the S-08a placeholder uses a plain `TestBed` render assertion. +- **Lint: ESLint** (flat config, `@nx/eslint`). +- **Nx is scoped to `apps/` + `libs/` only.** The `@nx/docker` and `@nx/dotnet` plugins are **not** + installed — the .NET services are built by `dotnet`/the Makefile, and `@nx/docker` would otherwise + infer every `services/*/Dockerfile` as an unnamed Nx project and break the project graph. +- **No Nx Cloud.** `nxCloudId` is stripped from `nx.json`; remote caching would depend on an + external service, and the repo is Gitea-only (§8.7). Nx's "configure-ai-agents" additions + (`.claude/settings.json`, a CLAUDE.md section referencing a GitHub marketplace) are **not** + committed for the same reason. +- **CI:** a `frontend` job (`make frontend` → `pnpm install --frozen-lockfile` + `nx run-many -t + lint test build`) runs on pnpm + Node, with pinned action URLs (§15). + +**NL Design System:** not yet introduced — the S-08a app is a placeholder. NL DS components arrive +with the submit form (S-08c, #67); any deviation from NL DS will be recorded here. diff --git a/mkdocs.yml b/mkdocs.yml index 51895e5..423e269 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -33,6 +33,7 @@ nav: - "ADR-0009: External-task job worker": architecture/adr-0009-external-task-job-worker.md - "ADR-0010: BFF OIDC validation": architecture/adr-0010-bff-oidc.md - Working in Gitea: gitea-workflow.md + - Frontend decisions: frontend-decisions.md - Demo script: demo-script.md - Runbooks: - CI: runbooks/ci.md