Skip to Content

ENTERPRISE TECHNICAL FRAMEWORK


YARBIS combines infrastructure engineering, AI-assisted document processing, workflow automation, and transactional systems within a single environment, built to support mortgage and real estate operations today and to scale as new tenants and capabilities are added. This framework reflects the platform's actual production configuration as of September 2026, plus the observability layer already planned for deployment, and will be updated as the infrastructure evolves.

PURPOSE & SCOPE

This document describes the actual production architecture behind YARBIS as of September 2026 — not a target-state design. It is maintained as the platform evolves; sections marked "planned" describe committed roadmap items, not live capabilities.

COMPUTE & ORCHESTRATION

Host Environment

YARBIS runs on a single VPS: Ubuntu 24.04.5 LTS, kernel 6.8.0-139-generic, x86_64, 4-core AMD EPYC 7543P, 15GB RAM, 16TB storage. This is a single-host deployment, not a multi-node cluster.

Container Runtime

Docker Engine 29.8.1 is the sole runtime. Each tenant and each shared service is defined as its own Docker Compose stack rather than one shared compose file — per-tenant docker-compose.yml definitions ranging 5–11KB depending on service count. As of this writing the host runs 80 active containers across 11 tenants plus shared infrastructure services, with zero orphaned volumes, zero unused images, and zero stopped containers left uncleaned.

Orchestration Model

There is no Kubernetes or Swarm orchestrator in production. Single-host Compose keeps operational complexity bounded at current scale while preserving a direct migration path: every service is already a discrete, externally-configured container rather than a monolith, which is the precondition for a future orchestrator migration, not a substitute for one.

NETWORKING & INGRESS

Edge Layer

Traefik v3.6.7 is the platform's sole ingress point, running as a Layer 7 reverse proxy with the Docker provider enabled for dynamic service discovery. Routing rules attach to containers via Docker labels rather than static config files — a new tenant's routes go live as soon as its container starts, with no reload of Traefik's own configuration.

TLS

TLS is terminated at Traefik. Certificates are issued and renewed automatically via the ACME/Let's Encrypt HTTP-01 challenge (confirmed via active certificate stores on the host).

Static Asset Delivery

Each tenant runs its own dedicated Nginx container scoped specifically to static asset and media delivery, separate from routing (Traefik) and application logic (Odoo). This division keeps each layer independently scalable and simpler to reason about.

Tenant Network Segmentation

Each tenant's containers run on their own isolated Docker bridge network (confirmed: 11 tenant-scoped networks currently active, each attaching only that tenant's own services). Traefik is the only component with a path across network boundaries, acting as the single controlled crossing point between the public internet and any tenant's internal services.

DATA LAYER & MULTI-TENANCY

Isolation Model

Multi-tenancy is enforced at the infrastructure level, not the application level: each tenant runs its own dedicated PostgreSQL 15 container rather than a shared instance with schema- or row-level tenant scoping. A query bug or a compromised application layer in one tenant's Odoo instance cannot reach another tenant's data at the database engine level — a guarantee schema-based multi-tenancy does not give to the same degree.

Tradeoff

The cost of this model is per-tenant resource overhead — a dedicated Postgres process and memory footprint per tenant instead of one shared instance. At the platform's current scale (11 tenants) that tradeoff favors isolation over density.

Transactional Integrity

PostgreSQL provides ACID guarantees for all transactional and financial data processed through Odoo.

AI / DOCUMENT INTELLIGENCE INFRASTRUCTURE

Current State

pgvector is installed and available as a PostgreSQL extension on the platform, but it is not currently in active use. There is no semantic search, embeddings-based retrieval, or vector similarity search running in production today.

Document Storage Today

Document storage and retrieval — PDFs, images, identity documents, financial statements — runs entirely through Odoo's native Attachment model. Files are stored as standard ir.attachment records tied to their parent record (a borrower or loan file) via res_model/res_id, and inherit that record's access control rules rather than being governed by a separate document-access layer.

Planned Direction

pgvector represents provisioned infrastructure for a future AI-assisted document retrieval layer. When implemented, the tenant isolation model described above will need to be extended to the vector store explicitly — at present, pgvector runs as a single shared instance rather than one per tenant, so isolation there is an open design question to resolve before, not after, that capability goes live.

AUTOMATION & INTEGRATION LAYER

n8n

n8n orchestrates webhook processing, API integrations, and workflow automation. Each tenant runs its own dedicated n8n instance and its own n8n Postgres database — automation logic, credentials, and webhook endpoints for one tenant are not reachable from another tenant's instance.

Production Workflows

Automated workflows currently in production include borrower onboarding (Borrower Discovery), document routing (OCR/document viewer), and Letters of Explanation generation and e-signature routing.

APPLICATION LAYER (ODOO / ERP)

System of Record

Odoo 18 Community Edition is the transactional system of record for CRM, pipeline tracking, and accounting. Each tenant runs its own dedicated Odoo container and database — no shared Odoo instance across tenants.

Custom Modules

YARBIS-specific functionality (Borrower Discovery, Update Borrower, the Document Viewer, the Loan Pipeline Menu, the LOE/DocuSeal integration) is built as custom Odoo modules and embedded HTML components served alongside the core Odoo instance, integrated via n8n webhooks rather than modifying Odoo core.

DOCUMENT PROCESSING & E-SIGNATURE

DocuSeal

DocuSeal (self-hosted, Community edition) handles e-signature workflows for the 15 Letters of Explanation templates, with its own dedicated Postgres and Redis containers per the yarbis tenant's stack.

Gotenberg

Gotenberg handles server-side document generation/conversion (e.g., producing signable PDFs from templated content) ahead of the DocuSeal signing step.

COMMUNICATIONS INFRASTRUCTURE

Email

Mailcow provides self-hosted email infrastructure, with SPF, DKIM, and DMARC configured for deliverability and domain reputation.

Messaging

Evolution API provides WhatsApp/SMS integration, governed by the SMS/WhatsApp/TCPA Consent Framework published in the Legal Framework section of this site.

Scheduling

Cal.com handles appointment scheduling and calendar coordination for lender and agent workflows, running as its own dedicated service with its own database.

ACCESS CONTROL & IDENTITY

Current Model

Access control today runs on Odoo's native user and group permission model: each user is assigned to functional groups (loan officer, administrator, borrower-facing, etc.) that gate which records and actions they can reach, inherited automatically by every custom module built on top of Odoo.

Roadmap

Multi-factor authentication and a formally documented, granular role-based access policy beyond Odoo's default groups are on the platform's security hardening roadmap, to be layered on as the client base and the number of administrative users grow.

HOST & TRANSPORT SECURITY

Host Hardening

SSH key-based authentication, Fail2ban, and a UFW firewall are active on the host, with security patches current as of the last diagnostic (zero pending security updates).

Transport Encryption

All web-facing traffic is encrypted via TLS, terminated at Traefik with automated certificate issuance and renewal.

Isolation as a Security Control

Per-tenant Docker network segmentation (see Networking & Ingress) is the platform's primary control against lateral movement between tenants — a compromise in one tenant's application layer does not have a network path to another tenant's containers.

OBSERVABILITY (PLANNED)

Status

A full-stack observability layer — Prometheus (metrics), Grafana (dashboards), Loki (log aggregation), Netdata (real-time infrastructure telemetry), and Uptime Kuma (external availability monitoring) — is part of YARBIS's finalized technical roadmap. It has not yet been deployed to production; current operational visibility relies on direct infrastructure diagnostics rather than automated dashboards.

Design Intent

Once deployed, this stack is intended to give continuous, automated visibility into infrastructure health, traffic patterns, latency, logs, and per-tenant service uptime, replacing manual diagnostics.

DEPLOYMENT & RELEASE

Current Process

Deployments run directly against each tenant's Docker Compose stack: images are rebuilt and containers restarted following a rolling-deployment approach, without an automated build/test pipeline in front of it today.

Roadmap

A formal release process — a staging environment, an automated CI/CD pipeline, and a documented rollback procedure — is the near-term engineering milestone for standardizing releases as tenant count and release frequency increase.

BACKUP & DISASTER RECOVERY

Current State

A full VPS-level backup runs daily at 2:00 AM CST, covering every tenant container, database, and configuration file on the host.

Gap and Direction

Formal disaster recovery — a documented, tested procedure with a defined recovery time objective, built on top of that backup — is not yet in place. The direction already set for closing that gap is infrastructure replication: a second, geographically separate VPS kept in sync as a standby target, so a host-level failure is recovered onto already-replicated infrastructure rather than rebuilt from a cold backup. Daily backups are today's safety net; replicated infrastructure is the next milestone on top of it.

SCALABILITY & ARCHITECTURAL EVOLUTION

Current Ceiling

The architecture scales today by adding tenants within the existing single-host Compose model. At 80 containers on a 4-core/15GB host, headroom exists but is finite — the host, not the architecture, is the current scaling constraint.

Next Steps

The two changes that extend this ceiling, in order: (1) infrastructure replication for disaster recovery, which also creates a second host that can absorb load; (2) migration to container orchestration (Kubernetes-compatible by design, per the container-per-service model already in place) once tenant count or availability requirements justify that operational overhead.