Skip to main content

Troubleshooting

Login / session

"Continue with Google" loops back to the login page

Check that you're not logged in as the demo account in the same browser. /login and /register invalidate the session on mount, but some browser extensions race that. Clear cookies for app.pmfriend.com, reload.

Sandbox iframe on pmfriend.com shows the login page

Expected if third-party cookies are blocked (Safari ITP, Brave, Firefox Enhanced Tracking Protection strict mode). The sandbox uses CHIPS (Partitioned cookies) + CSP frame-ancestors to work around ITP in most mainstream configurations. If yours is stricter, log in directly at https://app.pmfriend.com instead.

Invites live for 7 days. Have your agency admin issue a fresh one under Settings → Team members → Invite. If within 7 days, check whether someone else already claimed the URL — invites are single-use.

CSV imports

"row N: invalid state"

Use the 2-3 letter code (VIC, NSW, QLD, WA, SA, TAS, ACT, NT), not the full name. Case-insensitive but the codes only.

"row N: owner_approval_threshold must be integer cents"

Use cents, not dollars. $50050000. Decimal values (500.00) fail validation.

Some rows loaded, others didn't

Expected — each row is its own transaction. The errors panel lists which rows failed and why. Fix those rows in your CSV, save, re-upload. Dedupe keys mean good rows aren't re-inserted.

Uploaded a CSV but nothing shows up

Check the errors panel — it might be the first-row header mismatch (streett,suburb,… instead of street,suburb,…). The header is validated strictly.

AI triage

"Human triage required" badge on every request

Means either confidence < 0.7 consistently, or Claude is unavailable (circuit breaker open). Check ANTHROPIC_API_KEY is set on App Runner and that you haven't hit a 3-fail-in-a-row window. Re-try in 5 minutes.

Triage returns nothing at all

Tenant text is empty or under ~5 words. The UI prompts you to enter more detail before calling triage. If the field has content but triage still 422s, file a ticket with the request ID.

Claude keeps returning the same urgency

Confidence is usually very high for unambiguous cases. If you disagree with a consistently high-confidence pick, edit in the review form (Claude's suggestion is never auto-applied). If you think the prompt is wrong, send us the request text and we'll look at the fixture.

Contractors

  1. Check the contractor's email address is correct in the Contractors page.
  2. Check their spam folder — we don't DKIM-sign yet (SES wire-up pending), so some Gmail + Outlook configurations mark it as junk.
  3. Copy the plaintext URL from the WO detail page and send it via WhatsApp / SMS directly.

"Contractor accepted but status stuck at ACCEPTED"

Contractor needs to pick a date via the Schedule button. Until they do, the WO stays at ACCEPTED. The PM can chase via the contact info on the WO page.

Invoice upload fails silently

Check file size (< 10 MB) and format (PDF or image). The upload endpoint is POST /api/v1/jobs/{token}/invoices — plaintext POST, multipart/form-data, single file field.

Compliance

New property has no compliance tasks

State field may be missing or misspelt. Open the property detail → Overview → State field. If it's blank, set it; the register is regenerated on next save.

Compliance task stuck in UPCOMING status after completion

Completion happens automatically when a linked WO transitions to COMPLETED. If you manually closed the WO in an unusual way (e.g. via DB), the compliance task won't know. Mark it complete manually: POST /api/v1/compliance/tasks/{id}/complete.

Notifications

Unread count is wrong

Cached on the client. Refresh the page. The badge fetches /api/v1/notifications?limit=1 with an unread-count header.

Never received email for an urgent request

Email delivery via SES is not yet wired (see Product Roadmap). Today, urgent events land in the in-app feed + unread badge only. Turn browser notifications on so you see the badge bump.

Still stuck?

Email hello@pmfriend.com with:

  • Your agency name
  • The request / WO / property ID
  • What you expected vs what happened
  • Browser + OS
  • Timestamp (for log correlation)

We aim to respond within 4 business hours AEST.