Multi-tenant platform

Property Management OS

A rental operations platform covering properties, units, tenants, leases, rent, maintenance, documents, notifications and controlled agent-assisted operations.

Product work and architecture overview by Savi Saluwadana.

GoOIDCPostgreSQLS3OpenAPIMCP

What it does

Who it serves
Property managers, owners and authorized operational users.
Product purpose
Multi-tenant rental operations and controlled agent-assisted work.
  • Properties, units, tenants, occupancies and leases.
  • Rent obligations, ledger views, maintenance and documents.
  • Organization membership, RBAC and audit-aware workflows.
  • Transactional notification outbox and authenticated MCP tools.

How it works

  1. A manager or agent requests an operation through the authenticated API.
  2. The Go modular monolith applies organization scope and domain rules.
  3. PostgreSQL stores records and notification intents; documents use S3-compatible storage.
  4. A Go worker consumes the outbox and delivers notifications through configured providers.

Architecture

Next.js → Go modular monolith → PostgreSQL → Outbox worker → MCP

Property Management OS architectureManager interface connects to Domain API. Agent interface connects to Domain API. Domain API connects to Domain + outbox. Domain API connects to Documents. Notification delivery connects to Domain + outbox.Manager interfaceNext.jsAgent interfaceMCP / stdioDomain APIGo / OIDC / RBACDomain + outboxPostgreSQLDocumentsS3-compatible storageNotification deliveryGo outbox worker
Component overview. Arrows show requests and data flow between the main parts of the product.
Property Management OS components and responsibilities
ComponentResponsibility
Go APIOrganization-scoped domain logic, OIDC identity and RBAC.
PostgreSQLPortfolio, tenancy, rent, maintenance and outbox state.
Object storageDocument objects with database metadata.
Outbox workerDurable notification processing through a delivery provider.
MCPAgent access through authenticated domain APIs.

Current scope

MCP calls the same authenticated HTTP API as other clients and has no direct database connection. Advanced financial writes and other domains remain subject to the project’s implemented tool scope.

Architecture summary reviewed . Repository documentation.

Contributor notes

Run locally

Set values from .env.example; docker compose up --build

Design decision

Go modular monolith keeps domain rules and authorisation behind authenticated APIs; notification writes use an outbox.

Trade-off

Transactional domain authority stays in one backend, but asynchronous delivery needs worker and retry handling.

Unfinished

README lists remaining milestones; some agentic mutations are outside the current tool scope.

Licence: No licence identified