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
| Condition | Action |
|---|---|
expiresAt < current time | Mark invite status → expired |
status is pending OR viewed | Notify 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
| Condition | Action |
|---|---|
status changed to approved or changes_requested in the last 24 hours | Fire urgent in-app + email notification to the agent |
| Agent has not already been notified of this decision | Notification 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
approvedorchanges_requestedwithin 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
| Property | Value |
|---|---|
| Cron expression | 0 8 * * * |
| Frequency | Daily |
| Run time | 08:00 server time |
Entities
| Entity | Role |
|---|---|
landlordPortalInvites | Primary records evaluated and updated by both passes |
depositReleases | Associated release records linked to each invite |
orgMembers | Used to resolve the sending agent for notifications |
notifications | Records 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
expiredbefore 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
expiresAthas already passed at run time).