Overview
AI-generated content
This document was generated by an AI assistant. Verify accuracy before relying on the details.
LifeConnect ADB is a real-estate management platform (assets, persons, contracts, accounting) originally built on reactive Spring WebFlux microservices (Java 18 / Spring Boot 3.1) behind an Nginx/Keycloak gateway on Azure Kubernetes, with an Angular frontend (adb-ui). That backend is being rewritten service-by-service as Cloudflare Workers (services/* + shared packages/*), fronted by a new React BFF (apps/ui) that will replace adb-ui. The Cloudflare port is live and actively developed against staging; whether it has taken over the production path is not established on this page — see Open questions.
The hlc-lifeconnect/adb repo is a monorepo that holds the entire codebase (recently consolidated from a collection of submodules — commit 6376e7e). A third, unrelated, frozen attempt at a Cloudflare rewrite also exists in the tree (adb-web/) — see adb-web before assuming it is the one described here.
Big picture
flowchart TB
Browser[End-user browser]
subgraph CFPort[Cloudflare Workers port — active, root-level, staging-proven]
ReactUI[apps/ui<br/>React BFF, SSR,<br/>strict: no direct backend calls]
CFServices[services/*<br/>10+ Workers,<br/>one per JVM service]
Broker[services/mongo-broker<br/>pooled MongoClient]
end
subgraph Gateway[Internal gateway — original JVM path]
Proxy[adb/proxy<br/>Nginx + Keycloak]
end
subgraph CoreServices[Business microservices]
Persons[adb-persons<br/>:8081]
Parts[adb-parts<br/>:8085]
Contracts[adb-contracts<br/>:8084]
Accounting[adb-accounting<br/>:8089]
Tickets[adb-tickets<br/>:8093]
end
subgraph SupportServices[Support services]
Files[adb-files<br/>:8083]
Utilities[adb-utilities<br/>:8082]
end
subgraph ReadServices[Read / aggregation services]
Aggregates[adb-aggregates<br/>:8086]
Views[adb-views<br/>:8092]
Reports[adb-reports<br/>:8090]
end
subgraph DataLayer[Data layer]
Mongo[(MongoDB Atlas)]
S3[(AWS S3)]
SQS[AWS SQS / SNS]
end
Browser --> ReactUI
ReactUI -->|Service Binding| CFServices
CFServices -->|one WebSocket per request| Broker
Broker --> Mongo
CFServices -.strangler-fig, not-yet-ported routes.-> Proxy
UI_Legacy[adb-ui<br/>Legacy Angular] --> Proxy
Proxy --> Persons
Proxy --> Parts
Proxy --> Contracts
Proxy --> Accounting
Proxy --> Files
Proxy --> Utilities
Proxy --> Aggregates
Proxy --> Views
Proxy --> Reports
Proxy --> Tickets
Contracts --> Persons
Contracts --> Parts
Contracts --> Files
Contracts --> Utilities
Accounting --> Contracts
Accounting --> Persons
Accounting --> Parts
Accounting --> Files
Accounting --> Utilities
Aggregates --> Persons
Aggregates --> Parts
Aggregates --> Contracts
Aggregates --> Files
Aggregates --> Utilities
Views --> Persons
Views --> Parts
Views --> Contracts
Views --> Files
Reports --> Aggregates
Persons --> Mongo
Parts --> Mongo
Contracts --> Mongo
Accounting --> Mongo
Files --> Mongo
Files --> S3
Utilities --> Mongo
Views --> Mongo
Reports --> Mongo
Tickets --> Mongo
Contracts -.events.-> SQS
Accounting -.events.-> SQS
Files -.events.-> SQS
Views -.events.-> SQS
Project inventory
Backend — original (Java / Spring Boot 3.1.3, reactive WebFlux)
Being replaced service-by-service by the Cloudflare Workers port below; ports below are the JVM services' own listen ports behind adb/proxy, not exposed by the Cloudflare Workers.
| Project | Port | Role |
|---|---|---|
adb | – | Maven parent: shared modules (adb-common, adb-model, adb-messaging, adb-openapi, adb-actions, adb-action-logs, adb-test, adb-descriptor, adb-communication) plus the Nginx reverse proxy |
adb-persons | 8081 | Persons & organizations management (owners, tenants, suppliers), company settings |
adb-utilities | 8082 | Catalogue values, i18n translations, INSEE index sync, cross-app configuration, UI log forwarding to Elastic, serial number generation (contracts etc.), allocation keys |
adb-files | 8083 | Document storage (S3 + Mongo metadata) |
adb-contracts | 8084 | Contract management (OwnerContract, RentalContract, RentalDelegateContract, etc.), insurance (GLI), guarantee, SEPA, entry point for call for rent process, PDF generation for contract-related documents |
adb-parts | 8085 | Real-estate assets: properties, buildings, units, equipment, charges, sales |
adb-aggregates | 8086 | Read-only multi-service aggregation |
adb-accounting | 8089 | Accounting: invoices, payments, accounting events, accounting entries, general ledger accounts, auxiliary accounts, CRG |
adb-reports | 8090 | PDF generation (contracts, reports — some deprecated/unused), template metadata management for adb-contracts, handles new contract creation flow for CIVIL and COMMERCIAL contracts |
adb-views | 8092 | Consolidated views / dashboards |
adb-tickets | 8093 | Ticket management (SALE, DAMAGES, TENANT_SEARCH, INCIDENTS, WORKS, etc.) and related events |
Cloudflare Workers port (root-level — the active migration)
No wiki entity pages exist yet for these; the links below go straight to the raw source (README.md / CLAUDE.md) per this wiki's rule against duplicating canonical content.
| Project | Role |
|---|---|
services/* | One private Cloudflare Worker per JVM service (accounting, aggregates, contracts, files, notifications, parts, persons, reports, tickets, utilities, views, plus doc-renderer, event-dispatch, realtime-hub) and mongo-broker, the one pooled MongoClient behind a Cloudflare Sandbox. |
packages/* | Shared libraries consumed by every service Worker: @adb/data (the WebSocket client to mongo-broker), @adb/auth, @adb/upstream, @adb/observability, @adb/queues, @adb/ui-kit, @adb/i18n, @adb/catalog, @adb/email, @adb/templates, @adb/shared-types, @adb/action-logs, @adb/doc-renderer. |
apps/ui | The React BFF replacing adb-ui — server-rendered, "strict BFF" (no browser request ever names a backend service directly). Not the same directory as adb-web/apps/ui, which is an unrelated empty Angular scaffold — see adb-web. |
apps/ui-legacy | adb-ui's own Cloudflare entry Worker: serves the Angular SPA via a Static Assets binding and dispatches /<service>/* to the same services/* Workers. Kept until apps/ui takes over the hostname. |
apps/api | The one publicly reachable Worker (adb-api) — dispatches every services/* route, two tiers keyed on the caller's OIDC client (azp): first-party (the SPA) vs. public (extranet, technical clients). |
infra-cf/ | Pulumi stacks for the Cloudflare side (staging, production, access, sentry, cdc). |
Frontend
| Project | Role |
|---|---|
adb-ui | Legacy Angular 19 frontend — the one confirmed in production. Talks directly to every microservice through the gateway (or, where the Cloudflare port has been rolled out, through apps/ui-legacy's Service Bindings to services/* — see the table above). |
adb-web | Not the Cloudflare port above, despite the similar description. A separate, frozen, 🔴 black-box scaffold (Yarn 4 + Turborepo, Angular + Hono) with almost nothing implemented and no commits since 2026-07-02. Read adb-web before assuming it is live. |
Infrastructure & tooling
| Project | Role |
|---|---|
adb-charts | Helm charts + Terraform for Kubernetes deployment (AKS primary, AWS secondary). |
adb-infrastructure | MongoDB Atlas scripts + AWS EventBridge configuration. |
adb-tests-artillery | Load / end-to-end API tests (Artillery.js). |
adb-doc | VuePress documentation site (this site). |
External services (referenced but out-of-monorepo)
| Project | Status |
|---|---|
adb-notes | Deprecated — features migrated to adb-tickets (the /notes route redirects). |
adb-graph | Deprecated — RabbitMQ consumer feeding Neo4j, no K8s deployment. |
Going further
- Service-to-service communication — call patterns, FQDNs, gateway, BFF, events
- Data layer — MongoDB, S3, Neo4j, messaging
- Authentication — Keycloak, JWT, BFF
Open questions
- Has the Cloudflare port actually taken over the production path? Root
CLAUDE.mdstates current hosting as "Azure (West Europe), Kubernetes" for the JVM services and describes the Cloudflare port generally as not yet in production, but the wiki has no direct evidence either way for the current moment — only that the Cloudflare port is live and exercised on staging (seeCLOUDFLARE_STAGING.md,CLOUDFLARE_ENVIRONMENTS.md). The "Big picture" diagram above shows both paths (the original JVM/Nginx path and the Cloudflare port) as coexisting, with the Cloudflareservices/*Workers falling back to the JVM services via a strangler-figfetch()for routes not yet ported (see e.g.services/parts/src/worker.ts's own doc comment). Confirm the current production split with the engineer before stating it as fact on this page. - Root
CLAUDE.mddescribes hosting as "Azure (West Europe), Kubernetes"; the wiki's ECS Fargate deploy lifecycle and Current AWS state describe AWS ECS Fargate instead. Not reconciled here — worth a dedicated ingest pass comparing both against whatever actually serves production traffic today. index.md's service catalog and directory tree still predateservices/,apps/,packages/andinfra-cf/entirely (this page's own "Project inventory" now lists them, butindex.mditself has not been updated). Until it is refreshed, prefer this page andCLAUDE.md's module table overindex.md's tree diagram for what currently exists.