AI Owner Digest (deep dive)
User-facing walkthrough: Fortnightly Digest.
Prompt structure
ClaudeDigestDrafter sends Claude:
- Owner first name (for salutation only)
- PM first name (for sign-off)
- Agency name
- For each property the owner owns:
- Suburb / state / postcode (no street detail)
- Work orders completed in the period (scope, cost in dollars, completion date)
- Compliance items completed in the period (friendly name, date)
- Compliance items due within 30 days (friendly name, due date)
- Insurance status summary
The system prompt asks for:
- Australian English
- First-person-plural ("we") for the agency voice
- Specific dollar figures, not bands
- Warm but not saccharine
- Overdue items lead the subject + body if any exist
- 2-3 alternate subject lines
Output structure
record DraftedDigest(
String subject,
List<String> alternateSubjects,
String body,
String modelVersion
) {}
Friendly compliance naming — the fix
Early draft outputs leaked UUIDs: "we'll book rule-2188-7384 next month". Reason: Claude saw the compliance entities with their primary-key IDs in the prompt context.
Fix: DigestContext now carries a
Map<UUID, String> ruleDisplayNameById. The prompt injects the map and
instructs Claude to reference rules by their display name. Output is
clean prose: "we'll book the smoke alarm annual test next month".
Fallback template
If Claude fails:
Subject: Fortnightly property update — {propertyAddress}
Hi {ownerFirstName},
Short update from us this fortnight.
{if completedWorkOrders non-empty:
"We completed the following work this period:
- {scope} ({date}, ${amount})
..."}
{if upcomingCompliance non-empty:
"Coming up: {friendlyName} due {date}."}
{if nothing to report:
"Nothing urgent to report. Rent continues on time."}
Let us know if you'd like anything else.
— {pmFirstName}, {agencyName}
Not as warm as Claude's prose, but informative. PM can edit before send.
What's explicitly not sent
- Tenant identity (name, email, mobile)
- Tenant payment status (rent arrears, late fees) — that's the PMS's job
- Contractor contact details
- Internal database IDs