ATLAS

Property Operations

Property intelligence, made operational.

Leasing, accounting, maintenance, owners, vendors, documents, and assets in one governed operating system — every workflow connected to the same property record, the same financial record, and the same asset history.

The gap

The category is crowded. The model is still fragmented.

Property teams already have leasing, accounting, and maintenance software. What they rarely have is one record those workflows agree on. The seams show up as spreadsheets, re-keyed data, and an audit trail that stops at the module boundary.

Typical platform reality

Leasing and maintenance exist, but records do not behave like one operational chain.

Accounting is powerful, but physical asset context is thin.

Documents exist, but not as a connected evidence graph.

AI appears as assistance, not as governed action infrastructure.

The Atlas position

One canonical property operations model.

Operational and financial events tied to the same property graph.

Assets, vendors, documents, and approvals connected by design.

AI introduced only with policy, auditability, and human control.

The promise

One operating model for every property event.

Orient

Portfolio, property, unit, lease, owner, vendor, and resident tied to one governed record.

Coordinate

Work orders, approvals, invoices, notices, and reports connected to real operational context.

Account

Every financial and operational action reviewable, permissioned, and auditable.

Property & unit Lease & resident Work order & vendor Invoice & ledger Document & audit trail

From resident request to owner report, the chain stays intact.

The console

Built from the seeded demo portfolio.

Every figure below comes from flask seed demo — three properties, 26 units, 19 active leases, three months of invoices and payments, and maintenance running through to completed work orders.

atlas · northlight property group · dashboard
Occupancy73.1%19 of 26 units
Open receivable$12,900$12,900 overdue
Delinquency4.2%of open balance
SLA compliance100%0 breached of 4 open

Work queue

Soonest deadline first
OrderTitleTradePriorityStatusDue
WO-000004Heating not reaching the bedroomhvacHighIn progressin 62h
WO-000005Front door lock stickinggeneralHighAssignedin 68h
WO-000002Kitchen tap drippingplumbingLowIn progressin 29d
WO-000001No hot water in the bathroomplumbingEmergencyCompletedresolved

“No hot water” was submitted as normal priority. Atlas reclassified it as a habitability emergency on intake — statutory response clocks are not a triage opinion.

trial balance

Posted account totals

In balance
CodeAccountDebitCredit
1000Cash — Operating$157,850.00
1100Accounts Receivable$169,450.00$157,850.00
4000Rental Income$169,450.00
Totals$338,750.00$338,750.00

The invariant is enforced three times: in the service, by a flush-time recomputation from the lines, and by a database CHECK.

audit trail

Recent activity

Chain intact · 311 events verified
SeqActionResourceHash
311maintenance.work_order_completedWO-000001a3f7c1e0…
310ledger.journal_postedJE-0001107b21d94f…
309ar.payment_appliedPMT-000053c08e5a2b…
308ar.invoice_issuedINV-0000571d6fb730…

Each event hashes its predecessor. Altering or removing any row breaks every hash after it, and verification reports the exact sequence where it starts.

Engineering

The parts that are hard to retrofit.

Tenant isolation, three deep

Service scoping, an ORM guard that refuses unscoped tenant queries, and PostgreSQL row-level security. Plus a build-failing invariant: a table carrying org_id without being enrolled fails CI — the mistake that is invisible in review.

Audit you can prove

Append-only events chained by SHA-256 per organization. Tampering is not prevented — it is made undeniable, which is the property compliance actually asks for.

Deny by default

One policy engine combining role scopes with ownership predicates. An unknown action fails closed. Money movement demands a fresh MFA assertion. The test suite walks the whole role × action × resource matrix.

Money that stays exact

Decimal end to end, NUMERIC on PostgreSQL and scaled integers on SQLite — because a float ledger makes 0.10 + 0.20 equal 0.30000000000000004, and a test that lets that pass is worse than no test.

Run it

Two commands to a seeded portfolio.

# clone, install, and seed a complete demo organization
git clone https://github.com/ibuilder/atlas.git && cd atlas
make setup
make demo

# or bring up Postgres, Redis, web, worker, and beat
docker compose up --build

make demo prints a sign-in for every role — administrator, controller, accountant, property manager, leasing agent, dispatcher, auditor, resident, owner, and vendor — so every surface is walkable from one seed.

Status

What is built, and what is not.

Version 0.5.0 completes every roadmap item through asset intelligence. It is not 1.0: four conditions remain open, and they are the ones code cannot satisfy. The full matrix is in FEATURES.md; a roadmap that reads as a feature list is how a buyer discovers the gap during implementation.

AreaStatusNotes
Tenancy, audit, authorizationCompleteThree layers including PostgreSQL row-level security
Identity, MFA, SSO, directory provisioningCompleteOIDC with PKCE, SAML 2.0, SCIM
Ledger, AR, AP, reconciliation, closeCompleteStatements, recurring billing, delinquency
Maintenance, inspections, preventive workCompleteOffline inspection replay is idempotent
Automation, approvals, webhooks, reportingCompleteDry run cannot mutate; conditions are data, not code
Documents, assets, capital planning, spacesCompleteExtraction is a suggestion a person accepts
Leasing: applications, screening, renewalsModelledSchema and statutory deadlines; no workflow yet
Resident, owner, and vendor portalsPartialRead surfaces complete; some writes API-only