Skip to main content

Product Roadmap

Non-AI features ordered by commercial priority. AI features live in the separate AI Roadmap.

Near-term (next 30 days)

1. AWS SES email delivery

Owner digests, team invites, contractor magic links all currently require manual URL sharing. SES wiring = proper deliverability + DKIM + reply-to. ~1 day of work; the delay is DNS + AWS SES account production-access approval.

2. Permanent contractor demo endpoint

Today the landing-page contractor demo runs off a Cloudflare tunnel from the founder's laptop. A permanent /api/v1/jobs/demo endpoint on app.pmfriend.com removes the laptop dependency. ~2 hours.

3. Proper logo file upload

Today Settings → Agency profile → logo URL is paste-in. Replace with a file picker + S3 upload + public-read presigned URL. ~4 hours.

4. Stripe billing

$7/property/month, $299 minimum, 60-day pilot auto-converts. ~2-3 days. Includes Settings → Billing page, webhook handlers, admin invoice view, cancellation flow.

Medium-term (30-90 days)

5. Tenant mobile app (React Native / Expo)

Matches the "30-second submission" pitch from the landing page. Optional channel on top of the /report/{token} QR flow, not a replacement. Real-time push for "your report was received / dispatched / completed". ~1 week.

6. PropertyMe one-way sync (nightly)

See PropertyMe Sync for detail. 3–5 days.

7. Apple SSO

Blocked on Apple Developer Service ID + signing key setup. ~½ day once credentials are in hand.

8. Photo-based triage (Claude vision)

Tenant uploads a photo from the /report/{token} page → Claude vision classifies severity + category. Blocked on photo upload infra being wired into the report page. ~2 days after unblock.

8a. Email-to-maintenance intake (v1)

Tenants email the agency's existing support address as they always have; the agency forwards that mailbox to a per-agency PMFriend intake address. Each inbound email is classified by Claude — if it's a maintenance issue, a DRAFT request is created in the agency's inbox for the PM to review and promote with one click. The tenant never learns a new address, the PM gets structured drafts instead of free-form email.

Onboarding for the agency: generate harbor-x9f2k@inbound.pmfriend.com, walk the PM through setting up a mail-forwarding rule on their existing support inbox. ~5 min of onboarding time per agency.

Per-email flow: SES inbound rule writes raw .eml to S3 → SNS event → backend webhook. Match From: against tenant emails for that agency: known sender → AI classify → DRAFT request; unknown sender → "Unresolved" queue where the PM clicks to attach to a tenant (and the alternate email is saved for next time).

v1 scope:

  • Per-agency intake address + SES inbound rule + SNS subscription
  • inbound_emails table (raw S3 ref + classification JSON + status state machine)
  • "Unresolved" inbox UI inside Maintenance
  • Auto-classification with three confidence buckets (auto-draft / flag-for-review / unclassified)
  • Photos auto-attached from MIME parts
  • "View original email" link on every draft (presigned S3 URL)
  • Audit trail: every email + classification + PM action logged
  • Daily digest tile on dashboard ("12 emails overnight, 9 drafted")

Explicitly v2 (saved here so we don't lose them):

  • Threading: matching In-Reply-To headers to attach follow-up emails to existing requests instead of creating a new draft each time. Implemented later when v1 has bedded in and PMs ask for it.
  • Two-way reply from app: PM replies via the maintenance request page; outbound email goes from intake address; tenant's reply lands back into the existing request. Same threading dependency as above.
  • AI auto-reply confirmation: send tenant "we got your report" automatically. Held until manual flow proves it. Risks include feedback loops with auto-responders and inflated outbound volume.
  • Per-tenant intake addresses (Pattern A from the design brainstorm). Useful as a Scale-tier feature for agencies wanting tighter sender verification.

Ship: ~2-3 days for v1 (one day backend + use cases, half day frontend, half day SES/DNS/IAM setup, half day for testing on a real forwarding flow).

9. User-routed notifications — ✅ SHIPPED

Notifications now split into "Assigned to me" vs "All in agency" tabs. Per-user read + dismiss state (V20 migration adds notification_reads(notification_id, user_id, ...) table). The Hibernate listener captures the acting PM from SecurityContextHolder and assigns the notification to them; background scanner events stay agency-wide. The sidebar badge counts unread for the calling user only.

Full detail: Team & Settings → Notifications.

Longer-term (90+ days)

10. Data-residency migration to Sydney (ap-southeast-2)

Move primary RDS + S3 to ap-southeast-2. Requires a coordinated database cutover. Needed for agencies with hard AU-data-residency requirements. ~1 week planning + downtime window.

11. Infrastructure rename (mypmfriend-*pmfriend-*)

ECR, App Runner, IAM, S3, RDS physical names still say mypmfriend from the pre-rebrand days. Cosmetic for now; worth doing ahead of any external audit. ~2-4 hours with a short downtime.

12. PropertyTree + Console one-way syncs

Same shape as PropertyMe sync. Prioritised by pilot demand.

13. Tenant portal (optional)

A minimal owner/tenant login if a specific pilot asks. Currently deprioritised — the /report/{token} QR flow + magic-link contractor pattern covers 95% of the workflows. Opening a new auth surface is high-effort, low-value compared to the AI roadmap.

14. SOC 2 / ISO 27001

After material ARR. Adds audit overhead + marketing trust.

Items that keep getting suggested but aren't happening

  • Two-way PropertyMe sync. Would require us to push into PropertyMe's trust accounting, which breaks the "sit beside, never replace" principle. One-way is final design.
  • Replace PropertyMe. Same reasoning. Not our lane; not our regulatory mandate.
  • AU sales CRM / realestate.com.au vacancy listing. Out of scope.
  • Autonomous anything. Every AI-drafted comm goes through PM review. Non-negotiable.

See also