Skip to main content

How it Works

PMFriend is an ops layer that sits beside your existing property management system (PropertyMe, PropertyTree, Console). It doesn't replace trust accounting. It takes the work that drains a PM's week — maintenance triage, compliance tracking, owner comms, contractor dispatch — and compresses it with a Claude-powered workflow.

The principle: sit beside, never replace

Your PMS holds the money. It's where rent lands, where statements are run, where trust account reconciliation happens. We don't touch any of that. Nothing in PMFriend can debit an owner, credit a tenant, or issue a statement. That's a deliberate moat — it means no PM ever loses sleep that adopting us will break audit compliance.

What we do handle:

WorkWho does it todayWhat PMFriend does
Tenant reports a burst pipe at 11pmPM's phone rings/report/{token} QR link captures it in 30 sec; AI triages before PM reads it
Quarterly compliance checkSpreadsheet in someone's headAuto-scheduled per property per jurisdiction; reminders 14d before due
Owner "what did you spend my $400 on?"PM writes an emailFortnightly digest: prose, warm tone, PM-reviewed before send
"Find me a plumber with current insurance"Phone treeRanked picker: trade match + preferred + insurance status in one view
"Is this a duplicate of last week's report?"Memory + guessworkSemantic duplicate detection across same-property requests (14d window)

The data model in one page

Agency (you)
├─ Properties
│ ├─ Owners (1..N)
│ ├─ Tenants (via Leases)
│ ├─ ComplianceTasks (auto-generated from state rules)
│ └─ MaintenanceRequests
│ ├─ TriageSuggestion (AI output, PM-editable)
│ └─ WorkOrder
│ ├─ Scope (raw or AI-drafted)
│ ├─ CostCeiling (AI-suggested or manual)
│ ├─ ContractorDispatch (magic-link token)
│ └─ StatusTransitions (ASSIGNED → ACCEPTED → SCHEDULED → ON_SITE → COMPLETED)
├─ Contractors (agency-wide directory, reusable across properties)
└─ Notifications (agency-wide feed)

Every row is scoped to your Agency via PostgreSQL row-level security. No code path can leak a row to another agency — the database itself blocks it. See Legal & Compliance for detail.

What we intentionally do NOT do

  • Trust accounting. No receipts, no deposits, no statements, no reconciliation. Your existing PMS owns that.
  • Advertising / listings. Realestate.com.au integrations, vacancy advertising — not our lane.
  • Rent roll valuation / sales CRM. No buyer pipeline, no sales agent workflow.
  • Legal advice. Our compliance register reminds you when things are due. It is not a legal certification and we say so in the UI.
  • Autonomous action. Nothing sends without a PM reviewing it. Claude drafts — PMs approve.

Architecture at 30,000 ft

  • Backend: Spring Boot 3.4 modular monolith (domain → application → infrastructure → web → bootstrap), Java 21, Gradle.
  • Database: PostgreSQL 16 with FORCE ROW LEVEL SECURITY per tenant.
  • AI: Anthropic Claude Haiku via direct JDK HttpClient (no SDK). Every integration has a prompt-version tag (e.g. claude-haiku-4-5@prompt-v2) and a deterministic heuristic fallback.
  • Frontend: React / Vite / Tailwind / TanStack Query, served as static files from the backend JAR.
  • Auth: email+password (BCrypt), Google SSO, session cookie (HS384 JWT, 14-day TTL, Partitioned for the sandbox iframe).
  • Hosting: AWS App Runner (Frankfurt, eu-central-1), RDS PostgreSQL, S3 for documents, Lightsail Sydney for the landing + docs.

Full architecture diagram in ARCHITECTURE.md.

Why Australia

The founder (Dim) is based in Melbourne. PM domain is extremely state-specific in AU — the difference between a QLD Form 11 and a NSW Notice to Remedy Breach is not cosmetic, it's legal. A generic US SaaS cannot get this right without rebuilding from scratch for each state. PMFriend's compliance rules ship with all 8 jurisdictions on day one.

Next