Skip to content
OurCommonsOurCommons

Security & trust

Is your building's data safe with us? Yes, and here's exactly why.

We get this question on every call. Below: the promises we make, in plain English. Hover anything that looks like jargon, and we'll explain it in terms that actually make sense.

AES-256-GCM

Ballot encryption

< 1 hr RPO

Point-in-time recovery

7 years

Financial data retained

3× logged

Per disbursement

Every dollar out needs a human authorised approver.

The Licensee in Charge (the human who legally owns trust account responsibility) has to approve every disbursement. The screen can't bypass it. Even our own engineers can't bypass it.

Show the technical detail

PSA s.86 enforcement at the database level. A disbursement is rejected unless the approving user matches the building's designated Licensee. Three audit logs record every attempt, approval and completion.

Service accounts cannot bypass the approval gate: write operations are tied to the authenticated identity of the approving user and cannot be forged or delegated at any layer.

Your records can't be altered.

Once a financial entry is in, it's in. Correcting an error works the way every accountant does it: by posting a reversing entry. The original entry stays in the record forever.

Show the technical detail

All financial records are stored in an immutable append-only ledger: modifications and deletions are rejected at the database level. Correcting an error follows the same convention as production accounting: a reversing entry, not a deletion.

Arithmetic is Decimal.js with ROUND_HALF_EVEN (banker's rounding) at 20-digit precision. No floating-point drift across thousands of levy amounts.

Your data is stored in Australia.

Your building's records live in a database hosted in Sydney, and nowhere else. We use AWS in Sydney specifically so this stays true. Where a feature relies on an overseas provider (AI, email delivery, meeting recording), we name that provider in our privacy policy rather than hiding it.

Show the technical detail

Supabase region pinned to ap-southeast-2; AWS KMS at-rest encryption; TLS 1.2+ in transit. Australian Privacy Act APP 8 (cross-border disclosure) is addressed by Sydney hosting for stored data and by data processing agreements with each overseas subprocessor named in the privacy policy.

The application layer (Vercel) is stateless: it processes requests but does not store data. Transactional emails are delivered via Resend; metadata for those crosses borders (US storage); the email body is encrypted in transit. AI features (CoMo, minutes drafting, document extraction) are processed by Anthropic, and knowledge-base search embeddings by OpenAI; both process requests in the United States under data processing agreements, and the results are stored in Sydney.

Only the right people can see your building.

A strata manager at Firm A literally cannot see Firm B's buildings. This isn't a permission setting. It's enforced by the database itself. A bug in the app can't break it.

Show the technical detail

Data is strictly isolated between buildings at the database level: no user can access another building's records, and no application-layer bug can override this. Access is derived from the caller's authenticated session, not from any header or parameter the client controls.

Within a building, access follows least-privilege: SM (full portfolio), Committee Member (governance + minutes), Lot Owner (own lot + AGM docs), Building Manager (observer + ticket submission), Auditor (read-only financials).

Votes are sealed and the voter can verify them.

When an owner casts a secret-ballot vote, it's encrypted the moment it's cast and stays sealed until the ballot is formally revealed. Every voter gets a cryptographic receipt they can check later to confirm their vote was recorded exactly as cast, and individual choices are never shown to other participants.

Show the technical detail

AES-256-GCM encryption with a unique 256-bit session key per ballot and a random IV per vote. HMAC-SHA256 receipt over choice + voter + ticket + time + building.

The receipt token can be verified at /votes/verify to verify; the platform recomputes the HMAC and confirms the vote was recorded exactly as cast. A mismatch is logged as a tamper attempt.

If something breaks, your data is built to survive it.

We back up your data every day, keep a week of history, and can restore to any point within the last hour if something goes wrong. Recovery takes a couple of hours, end-to-end.

Show the technical detail

Daily database backups with 7-day retention. Point-in-Time Recovery enabled for sub-hour granularity. Our recovery targets: under 1 hour of data loss, under 2 hours to full restore.

The application layer is stateless: if Vercel had an outage, a redeploy from git restores the app in 2–3 minutes. All your data lives in Supabase, separate from the app. Real-time error monitoring via Sentry.

We're built for Australian regulation, not retrofitted.

Privacy Act, NSW SSMA, NSW PSA, WCAG 2.1 AA. Built for these from the schema up. Multi-state coverage for NSW, VIC and QLD.

Show the technical detail

Australian Privacy Act (APPs 1–13): privacy policy at /legal/privacy. Cross-border disclosure (APP 8) addressed by Sydney hosting.

NSW SSMA & SSMR: meeting notice periods, quorum, by-law management, AGM procedures (s.18A, s.146, s.174/s.184) and record-keeping built to spec. VIC and QLD equivalents covered.

NSW Property Stock and Business Agents Act: trust accounting meets the PSA: immutable ledger, double-entry, LIC approval (s.86), bank reconciliation, ABA payment files, 7-year retention. Trust audit packs exportable in-app.

WCAG 2.1 AA: colour contrast, keyboard navigation, skip-to-content, ARIA roles, focus-visible rings, screen reader compatibility.

Architecture

Security, layer by layer.

Hover each layer to understand what it does in plain English.

Your browser

HTTPS everywhere · TLS 1.3 in transit · no data stored client-side

hover to explain

Edge network

Vercel CDN · rate limiting · DDoS protection · CORS enforcement

hover to explain

API layer

Next.js routes · auth validation on every request · input sanitisation · audit logging

hover to explain

Auth layer

Supabase Auth · short-lived JWTs · role-based session context

hover to explain

Database

PostgreSQL · RLS on every table · immutable ledger trigger · encrypted ballot store

hover to explain

Infrastructure

AWS Sydney (ap-southeast-2) · KMS at-rest encryption · daily backups · 7-day PITR

hover to explain

Built to comply with (hover each to learn what it means)

Got a question we didn't answer?

Email aden@ourcommons.co with anything. We usually answer the same day.

Penetration testing results, data processing agreements, and specific compliance questions; happy to send on request.

  1. PostgreSQL database run by Supabase in AWS region ap-southeast-2 (Sydney). Encrypted at rest with AWS KMS.

What now?

Trust is earned, not asserted.

Book a 30-minute call. We'll show you the controls in action: the immutable ledger, the RLS policies, the audit pack. Then you can decide for yourself.