All Docs
FeaturesDepositClearUpdated March 12, 2026

Landlord Portal Invite Expiry & Decision Notifications

Landlord Portal Invite Expiry & Decision Notifications

Available from: v0.1.221

Overview

A scheduled workflow runs every day at 08:00 and performs two automated checks against all landlord portal invites. Its purpose is to ensure agents are never left waiting on stale or decided invites without knowing about it.


How It Works

The workflow executes two passes in sequence each morning.

Pass 1 — Expiry Sweep

ConditionAction
expiresAt < current timeMark invite status → expired
status is pending OR viewedNotify the sending agent
  • Invites already in a terminal state (approved, changes_requested, expired) are ignored.
  • The agent notification explains that the landlord did not respond before the invite deadline.

Pass 2 — Decision Notification Sweep

ConditionAction
status changed to approved or changes_requested in the last 24 hoursFire urgent in-app + email notification to the agent
Agent has not already been notified of this decisionNotification is sent
  • This pass acts as a safety net: if a landlord submits a decision overnight or outside office hours, the responsible agent is guaranteed to receive a prompt notification the following morning at the latest.
  • Notifications are marked urgent, surfacing them above standard in-app alerts.

Invite Status State Machine

pending ──────────────────────────────► approved
   │                                        │
   │                                        ▼
   ├─────── (landlord reviews) ──────► changes_requested
   │
   └─────── (expiresAt passed) ──────► expired

viewed ──────────────────────────────► approved
   │                                        │
   │                                        ▼
   ├─────── (landlord reviews) ──────► changes_requested
   │
   └─────── (expiresAt passed) ──────► expired

Notification Behaviour

Expiry Notification (Pass 1)

  • Recipient: Agent who sent the invite
  • Channel: In-app notification
  • Trigger: Invite transitioned to expired
  • Content: Informs the agent the landlord did not respond in time and the invite has now lapsed

Decision Notification (Pass 2)

  • Recipient: Agent responsible for the invite
  • Channel: In-app (urgent) + Email
  • Trigger: Landlord set status to approved or changes_requested within the last 24 hours, with no prior agent notification
  • Content: Surfaces the landlord's decision and prompts the agent to take the appropriate next step

Schedule

PropertyValue
Cron expression0 8 * * *
FrequencyDaily
Run time08:00 server time

Entities

EntityRole
landlordPortalInvitesPrimary records evaluated and updated by both passes
depositReleasesAssociated release records linked to each invite
orgMembersUsed to resolve the sending agent for notifications
notificationsRecords created for in-app and email alerts

Edge Cases

  • Already-notified decisions: Pass 2 checks whether an agent notification already exists before firing, preventing duplicate alerts.
  • Non-actionable statuses: Invites already expired before this workflow runs are not re-processed.
  • Timing overlap: An invite that expires and also has a decision within the same 24-hour window will be handled by Pass 1 only (expiry takes precedence if expiresAt has already passed at run time).