AI Property Suggestions
On any property's detail page, the AI suggested actions card shows 2–5 actionable items Claude has inferred from that property's current state. Each item has a CTA that can execute the whole chain in one click.
What Claude reads
ClaudePropertyAiSuggester sends Claude:
- Open maintenance requests (title + category + urgency + age)
- Recent completed work orders last 60 days (scope + cost + date)
- Upcoming compliance tasks next 30 days (friendly name + due date)
- Already-overdue compliance items
- Insurance status (current / expiring / expired)
It does not send tenant names, emails, or PII.
Output structure
{
"suggestions": [
{
"kind": "COMPLIANCE_BOOK",
"title": "Book smoke alarm annual test",
"body": "Due in 11 days (2026-05-05). Smoke Alarm Pro available.",
"ctaLabel": "Book now",
"deepLink": "/maintenance?select=new&kind=COMPLIANCE_BOOK&complianceTaskId=CT-abc"
},
{
"kind": "REPEAT_PATTERN",
"title": "Third plumbing issue in 60 days",
"body": "Bathroom tap + shower mixer + kitchen sink. Consider a full bathroom plumbing inspection.",
"ctaLabel": "Draft inspection WO",
"deepLink": "/maintenance?select=new&kind=REPEAT_INSPECTION"
},
{
"kind": "INSURANCE_REMINDER",
"title": "Building insurance expires in 23 days",
"body": "Nominal Insurance Co. Remind the owner to renew via digest.",
"ctaLabel": "Draft owner digest",
"deepLink": "/owners/abc/digest/draft"
}
],
"modelVersion": "claude-haiku-4-5@prompt-v1"
}
Kinds
| Kind | Meaning | CTA behaviour |
|---|---|---|
COMPLIANCE_BOOK | Compliance task due / overdue | Triggers ExecuteAiSuggestedAction → creates WO |
INSPECTION_DUE | Routine inspection due | Triggers ExecuteAiSuggestedAction → creates inspection WO |
INSURANCE_REMINDER | Building insurance approaching expiry | Opens owner digest drawer |
DIGEST_DRAFT | Good moment to send fortnight digest | Opens digest drawer |
REPEAT_PATTERN | Multiple similar requests at same property | Drafts a "full inspection" WO |
DISMISS | Nothing actionable; card shows "All clear" | No CTA |
The action chain
CTAs on COMPLIANCE_BOOK, INSPECTION_DUE, and INSURANCE_REMINDER
kinds don't just navigate — they execute. One click chains four use
cases:
1. SubmitMaintenanceRequest (create the request)
2. ApplyTriageDecision (AI-picked category + urgency)
3. WorkOrderScopeDrafter (Claude drafts the scope)
4. ConvertRequestToWorkOrder (commit the WO with scope + ceiling)
Implementation: ExecuteAiSuggestedAction use case. Endpoint:
POST /api/v1/properties/{id}/ai-actions/create-work-order
Content-Type: application/json
{
"title": "Smoke alarm annual test",
"body": "Per VIC minimum standards. Tenant home Thu.",
"category": "OTHER",
"urgency": "NORMAL"
}
Returns:
{
"maintenanceRequestId": "MR-9981",
"workOrderId": "WO-4420",
"scope": "Book licensed smoke alarm technician...",
"costCeilingCents": 12000,
"modelVersion": "claude-haiku-4-5@prompt-v1"
}
The frontend deep-links to the new request via /maintenance?select=MR-9981
so the PM lands inside the drawer ready to pick a contractor.
Fallback
If Claude is unavailable, a rule cascade fires instead:
- Any overdue compliance →
COMPLIANCE_BOOKsuggestion per overdue item - Compliance due within 14 days →
COMPLIANCE_BOOKper item - Open work orders ≥30 days old in
IN_PROGRESS→REPEAT_PATTERNflag - Insurance expires within 30 days →
INSURANCE_REMINDER - None of the above → single
DISMISScard "All clear at this property"
See also
- Property Detail — where the card is rendered
- Compliance: Book a Contractor — COMPLIANCE_BOOK destination