Life ConnectLife Connect
Wiki index
Architecture
Services
UI
Concepts
Runbooks
Infra
Swagger Docs
GitHub
Wiki index
Architecture
Services
UI
Concepts
Runbooks
Infra
Swagger Docs
GitHub
  • Architecture

    • Architecture overview
    • Service-to-service communication
    • Data layer
    • Authentication
    • ADB monorepo audit — use cases & flow maps
Last updated 2026-09-23

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.

ProjectPortRole
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-persons8081Persons & organizations management (owners, tenants, suppliers), company settings
adb-utilities8082Catalogue values, i18n translations, INSEE index sync, cross-app configuration, UI log forwarding to Elastic, serial number generation (contracts etc.), allocation keys
adb-files8083Document storage (S3 + Mongo metadata)
adb-contracts8084Contract management (OwnerContract, RentalContract, RentalDelegateContract, etc.), insurance (GLI), guarantee, SEPA, entry point for call for rent process, PDF generation for contract-related documents
adb-parts8085Real-estate assets: properties, buildings, units, equipment, charges, sales
adb-aggregates8086Read-only multi-service aggregation
adb-accounting8089Accounting: invoices, payments, accounting events, accounting entries, general ledger accounts, auxiliary accounts, CRG
adb-reports8090PDF generation (contracts, reports — some deprecated/unused), template metadata management for adb-contracts, handles new contract creation flow for CIVIL and COMMERCIAL contracts
adb-views8092Consolidated views / dashboards
adb-tickets8093Ticket 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.

ProjectRole
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/uiThe 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-legacyadb-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/apiThe 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

ProjectRole
adb-uiLegacy 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-webNot 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

ProjectRole
adb-chartsHelm charts + Terraform for Kubernetes deployment (AKS primary, AWS secondary).
adb-infrastructureMongoDB Atlas scripts + AWS EventBridge configuration.
adb-tests-artilleryLoad / end-to-end API tests (Artillery.js).
adb-docVuePress documentation site (this site).

External services (referenced but out-of-monorepo)

ProjectStatus
adb-notesDeprecated — features migrated to adb-tickets (the /notes route redirects).
adb-graphDeprecated — 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.md states 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 (see CLOUDFLARE_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 Cloudflare services/* Workers falling back to the JVM services via a strangler-fig fetch() 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.md describes 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 predate services/, apps/, packages/ and infra-cf/ entirely (this page's own "Project inventory" now lists them, but index.md itself has not been updated). Until it is refreshed, prefer this page and CLAUDE.md's module table over index.md's tree diagram for what currently exists.
Edit this page
Last Updated:
Contributors: Grégory Horion
Next
Service-to-service communication