S-09: Openbaar Register portal — public lookup #76

Merged
not merged 6 commits from feat/10-openbaar-portal into main 2026-07-13 14:35:35 +00:00
Contributor

What & why

S-09 (scoped to the portal — approval flow split out to #75). Adds the anonymous Openbaar Register portal and closes the walking-skeleton loop: submit → BFF → domain → projection → public visibility.

Changes

  • apps/openbaar — new anonymous Angular app (standalone + signals, NL DS via libs/ui, no auth/OIDC, no config.json). RegisterPage loads the full public register on open and searches via the BFF's /openbaar/register?q=; results table (referentie + status), loading + empty states.
  • Serving — nginx image + compose service on :8141, reverse-proxying /openbaar to the BFF (same-origin, no CORS), health-checked over IPv4, no Keycloak dependency. Added to the health-wait list.
  • e2e — extended the walking-skeleton happy path: after the self-service submit, the openbaar portal shows the submitted INGEDIEND entry (polls for the async projection).
  • Docsfrontend-decisions.md (openbaar decisions) + demo-script.md (public-visibility demo). BACKLOG.md updated for the S-09/S-09b split.

TDD / verification

  • Red → green: test(portal-openbaar) (failing register-page spec) → feat(portal-openbaar) (implementation). 5 openbaar unit tests incl. a11y (axe); make frontend green across all 6 projects.
  • Verified the portal end-to-end locally against a real BFF + stub projection: renders the register, bsn never leaves the BFF (asserted in-browser), search re-queries. Public-safe filtering itself is already unit/mutation-tested in the BFF.
  • Full submit→projection→openbaar chain runs in CI verify-stack (needs the live NRC→projection path + selectielijst egress, not reproducible locally).

Public-safe

Only id + status cross the BFF (OpenbaarProjection.PublicView); the portal never receives bsn/naam.

closes #10

## What & why S-09 (scoped to the **portal** — approval flow split out to #75). Adds the anonymous **Openbaar Register portal** and closes the walking-skeleton loop: submit → BFF → domain → projection → **public visibility**. ## Changes - **`apps/openbaar`** — new anonymous Angular app (standalone + signals, NL DS via `libs/ui`, no auth/OIDC, no `config.json`). `RegisterPage` loads the full public register on open and searches via the BFF's `/openbaar/register?q=`; results table (referentie + status), loading + empty states. - **Serving** — nginx image + compose service on `:8141`, reverse-proxying `/openbaar` to the BFF (same-origin, no CORS), health-checked over IPv4, no Keycloak dependency. Added to the health-wait list. - **e2e** — extended the walking-skeleton happy path: after the self-service submit, the openbaar portal shows the submitted `INGEDIEND` entry (polls for the async projection). - **Docs** — `frontend-decisions.md` (openbaar decisions) + `demo-script.md` (public-visibility demo). `BACKLOG.md` updated for the S-09/S-09b split. ## TDD / verification - Red → green: `test(portal-openbaar)` (failing register-page spec) → `feat(portal-openbaar)` (implementation). 5 openbaar unit tests incl. a11y (axe); `make frontend` green across all 6 projects. - Verified the portal end-to-end locally against a **real BFF + stub projection**: renders the register, **bsn never leaves the BFF** (asserted in-browser), search re-queries. Public-safe filtering itself is already unit/mutation-tested in the BFF. - Full submit→projection→openbaar chain runs in CI `verify-stack` (needs the live NRC→projection path + selectielijst egress, not reproducible locally). ## Public-safe Only `id` + `status` cross the BFF (`OpenbaarProjection.PublicView`); the portal never receives bsn/naam. closes #10
not added 6 commits 2026-07-13 14:17:44 +00:00
The walking skeleton has only INGEDIEND and no approval/status-transition path, so
the Openbaar portal (demoable against the existing public-safe BFF endpoint) and the
approve→visible flow are separate slices. See #75 for the approval flow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Scaffolds the anonymous openbaar Angular app (mirrors self-service: standalone +
signals, NL DS via the ui lib, no auth) and adds a failing register-page spec:
loads the public register from the BFF on open, searches by term, and shows an
empty-state message. The stub page renders only the heading, so the list/search/
empty-state assertions fail (red).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implement RegisterPage: load the full public register from the BFF on open, filter
by the search term via /openbaar/register?q=, and show a results table (referentie +
status), a loading indicator, and an empty-state message. Anonymous, same-origin
relative calls. Adds the app-shell spec. All openbaar lint/test/build green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the openbaar nginx image (serves the Angular app, reverse-proxies /openbaar to
the BFF, same-origin) and wire it into the compose stack on :8141, anonymous (no
Keycloak dependency). Add it to the health-wait list so the e2e can rely on it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Extend the walking-skeleton happy path: after the self-service submit + confirmation,
open the anonymous openbaar register portal and poll (reload) until the submitted
INGEDIEND entry appears — completing submit → BFF → domain → projection → public
visibility. Verified the openbaar portal renders the public-safe register (id+status,
no bsn) against a real BFF + stub projection.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs(portal-openbaar): record openbaar decisions + walking-skeleton public-visibility demo (refs #10)
All checks were successful
CI / lint (pull_request) Successful in 1m14s
CI / build (pull_request) Successful in 54s
CI / frontend (pull_request) Successful in 1m55s
CI / mutation (pull_request) Successful in 4m1s
CI / unit (pull_request) Successful in 1m4s
CI / verify-stack (pull_request) Successful in 6m57s
b00d8bd60e
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
not merged commit bc9831c113 into main 2026-07-13 14:35:35 +00:00
Sign in to join this conversation.