Skip to content

Technical Documentation ​

This section covers the engineering of Registry: the two-service architecture, the reactive backend, the Angular frontend, the data model and API contracts, the security model, and the Architecture Decision Records that justify each choice. It assumes the Functional Documentation — especially the Roles & Permissions baseline — is understood.

System at a glance ​

Registry is delivered as two independently versioned services plus two supporting infrastructure components:

The browser loads the SPA from nginx, which calls the backend over REST, authenticating via HttpOnly cookies rather than a token held in JavaScript. Authentication is delegated to an external OIDC provider; the backend both validates JWTs (as a resource server) and brokers the code/refresh exchanges (as a confidential client). All state lives in a single PostgreSQL database. See Security for the cookie/CSRF mechanics and the separate, unauthenticated management port that carries health/metrics/docs.

Documentation map ​

PagePurpose
Getting StartedRun the whole stack locally: prerequisites, dependencies, and configuration
ArchitectureThe hexagonal backend, the Angular frontend, and how a request flows end to end
SecurityAuthentication flow, JWT-to-user mapping, and how the project-scoped RBAC is enforced
Data ModelThe PostgreSQL schema, entity relationships, auditing, and trigram search
API ReferenceEvery /api/v1 endpoint, grouped by domain, with its required permission
ADR indexAll Architecture Decision Records, in causal order

Stack summary ​

Versions are given to the major only; the source repositories hold the exact pins.

LayerBackendFrontend
LanguageKotlin 2 (JVM toolchain 25)TypeScript 6
FrameworkSpring Boot 4 · WebFlux (reactive)Angular 22 (standalone components)
ArchitectureHexagonal (ports & adapters), ArchUnit-enforcedDomain-driven folders, per-route lazy state
State / dataR2DBC (reactive) + Flyway migrationsNGXS (selectSignal) behind per-domain facades
UI—PrimeNG + @primeuix/themes + Bootstrap grid
AuthOAuth2 resource server + confidential client (OIDC), HttpOnly cookies, stateless HMAC CSRFwithCredentials HTTP interceptor relaying the CSRF header, route guards
API docsspringdoc OpenAPI (feature-flagged)—
i18nSpring MessageSource (en, fr)@ngx-translate (en, fr)
ObservabilityActuator + Micrometer/Prometheus—
BuildGradle (Kotlin DSL)Angular CLI + pnpm
Runtime imageDistroless Java 25, non-root, JVM jarUnprivileged nginx serving the static bundle
PersistencePostgreSQL (pg_trgm trigram search)—
Releasesemantic-release → GHCR (retain 5)semantic-release → GHCR (retain 5)