A clean reimplementation that takes the best of two earlier solutions. The new platform has a single core and serves each organization as a separate client (tenant).
AI assistanceThe project is built with the help of AI coding assistants. The design, the module boundaries and the reviews stay with a human; the code goes through automated tests and checks.
Architecture
- Shared database, separated data: every record belongs to a tenant, and access to another tenant’s data is an exception guarded by automated checks.
- Tenant by address: the organization is recognized by hostname, including its own look and content.
- Features in packages: modules and capabilities are enabled per tenant.
- Modular core: domain modules talk only through public interfaces, and external services (e-mail, SMS, sign-in, storage) sit behind adapters.
What had to be solved
- tenant isolation even in background jobs, where there is no web request context;
- permissions limited to a subset of the data and a layered policy engine;
- personal data protection: masking and erasure under the GDPR, an audit trail of sensitive actions;
- migration of existing data and versioning of code lists;
- module boundary checks in CI, an extensive automated test suite, and health and readiness checks for operation.
Status
In the pre-production phase: internal testing and migration, with a planned gradual rollout.