Self-guided tours and reaching the renter

A renter stood at the door on Saturday. The lockbox code had been on file for two days.

Shipped — proven at Willows 2026-10-21

2026-10-20 · Western Slope · read-only production pulls · from the Western Slope inspection

The answer. A phone is required to book. But no phone never means no send: every reminder, follow-up and the lockbox code goes out on every channel we have, text first, email backup. Any send that still fails raises an engineering alert. Nothing is swallowed.

Fede's rule (Oct 20)Status
1. Phone required to book.Live phone chain #21270, #21273, #21298
2. Fallback always. "Just because we don't have a phone number doesn't mean we fail."Shipped reminders (#21438), code and check-in (#21589, #21591, #21595)
3. Never silent. "I cannot swallow it."Shipped tour-start alert proven; see proof

Decided and shipped: the code goes out one hour before; the fixes are live. See the Willows proof.

Saturday, before → after

Sat Oct 17, 10:00. Email only, staff-booked. Her replies at 10:02 and 10:11 went to AppFolio's thread.

StepWhat happenedWith the fallback rule
BookingNo phone on filePhone asked first (live); else email carries everything
Thu confirmation"Text me here" with no number, wrong address"Reply to this email when you get there", right address
Fri 24-hour reminderSkipped: no phoneEmailed (live since #21438)
Sat 9:00 reminderSkipped: no phoneEmailed, with the code
Sat 9:30 alertSkipped: code on fileReplaced by a tour-start alert: code not delivered
Code senderWaited for "I'm here" that never reached ClaraCode sent one hour before, no wait
Any skipSilentEngineering alert in #alerts
OutcomeStaff emailed the code by hand at 10:30, 30 min lateCode in her inbox at 9:00

The fallback rule

Send duereminder · follow-up · code 1 · Textif a phone is on file 2 · Emailalways, if an email is on file 3 · Alertnothing delivered no phone, failed text or bounce moves to the next step; never a skip
Every channel on file, text first, email backup.
"No phone = skip" rule todayBecomes
Reminder sender skips with no phoneEmail (already live, #21438)
Lockbox code waits for a texted or emailed "I'm here"Code sent on schedule to every channel
"Code missing" alert skips when a code is on fileTour-start alert when the code was not delivered
Leave check-in skips email-only renters (#16824)Check-in by email

Failures raise an alert

WhenWhereCarries
A send due for a tour delivered on no channel#alerts, as an engineering incident; never a DM (Fede, Oct 6)Tour id, channel tried, reason (no phone, bounced, failed, skipped), time
Code on file, not delivered at tour startSame, plus the staff tour-start alert (fix 3)Same, plus unit

Once per tour per failure.

When the code goes out

Goal: staff never has to hand-type the code. "Hold it until I'm here" is dropped: too strict for how staff work.

OptionForAgainst
(c) One hour before RecommendedArrives while she drives over; short window for forwarding; the original Sept 28 design (#12879)A no-show still got the code. Staff once preferred arrival-only (Oct 5)
(a) At bookingSimplest; she has it from day oneCode sits for days, easy to forward. #16811 removed a sender that mailed one 6 hours early
(b) With the day-of reminderRides a message already sentHours of exposure; buried in an inbox by tour time

Why (c): the latest point that needs no reply from her; nothing in the history argues against it.

Fixes, ready on Fede's word

  1. Wording per channel (email: "reply to this email when you get there").
  2. The right address in the confirmation (Sept 27 audit saw the same).
  3. Tour-start staff alert when the code was not delivered, replacing the 9:30 "code missing" alert.
  4. Trace the worker mismatch: an Oct 15 check-in step failed as "not registered".

Fixes ship with no switch.

Decisions Decided

#QuestionRecommendation
1When does the lockbox code go out: (a) at booking, (b) day-of reminder, (c) one hour before?(c)
2Ship the four fixes?Yes

Replies on AppFolio's own showing thread, and AppFolio's showing reminder, moved to the PMS conversations page.

Proof: Willows live run, 2026-10-21

Production, Willows test property only, 20:28–21:59 UTC. Web and worker both ended on commit 14f8458a487d; every build during the run carried all three PRs.

RenterBefore (Sat 10-17, Western Slope)After (Willows, 10-21)
Email onlyNever got the code staff typed it 30 min lateCode by email at one hour before
Has a phoneCode only after a texted "I'm here"Text + email at one hour before; re-sent 21 s after "what's the code?"
No code on fileAlert 30 min before, nothing at the startTour-start alert + text to the host
CaseClaimResultEvidence
AEmail-only renter gets the code by email one hour before; no alertPasstour ed64114b-5b95-46f3-88e8-0fbd9a7fd242 · email msg_a5749d41-0965-413d-bed2-780ca849a76a 20:45:09Z · delivery [email: sent] · start leg "code-delivered"
BRenter with a phone gets text and email one hour beforePasstour edb025cf-45f2-4f83-bff1-c5159125aeb8 · text SM39d11fc96a03222b83fac67ada901824 20:55:03Z · email msg_ba4f7f12-689e-4520-ae6f-b2694c950bcf 20:55:04Z
B"what's the code?" re-sends on both channelsPassin SM6e20b27d9064ef9c68092e2ead2c19ff → text SM9c41013ebf372fb8ea6387d46d14b1d9 21:51:31Z · email msg_39d7e841-3f0b-4414-8cee-311a3115eea4 21:51:33Z
B"I'm here" sends no second code; host told she has itPassin SMa214876f905e160f5b62eb7bdcaeeb4d · host SMc27dd92bfbe2ee82c2bf6fb1b9b1b312 21:52:49Z
CNo code: tour-start alert and host text; old 30-min alert gonePasstour 4335a624-f0b3-4dd1-87f6-75cf8e7185bd · Sentry JAVASCRIPT-NEXTJS-1KA event 819fe1e079e24da4b50918f640efdef2 21:15:02Z · host SM776bbe2939df87ff8c4d0cf90df286b9 21:15:08Z · lockbox_code_missing_30m = 0
DA send that reaches no channel raises an alertCode path onlyself-guided-lockbox-code-delivery.ts:471, :505
ERenter messages name the home's streetDefectA's email: "Willows Test - 102, Denver, CO 80202" (not 1601 Blake Street)
FEmail check-in after an email-only tourScheduled, not sentA ev 194 wait → 22:45:00Z; workflow ended at teardown 21:58Z

What this run does not prove

Defects found

PRs: #21589, #21591, #21595 merged; #21643, #21645 armed.

History and root cause (for engineers)
WhenWhat we didWhat it left open
Sep 28–30Code in the 1-hour reminder text (#12879); staff asked by hand (#12871, #12892).No phone required; email-only never considered.
Sep 28–Oct 2Switch churn: six PRs, ~115 PR-hours.Time went to the switch.
Oct 2Code emailed to email-only renters (#15555); alert if no code 30 min before (#15623).No alert for "code on file, undelivered".
Oct 5Code only on "I'm here" (#16786, #16811); the email send undone.Named and never fixed: nothing tells an email-only renter to send "I'm here" (#16786, #16824).
Oct 7–17Wording fix #17619 was text-only. Oct 17: every gap at once.Email copy untouched.

Root cause: each fix patched one channel, and every gap ended in a silent skip. In the 30 days before, 7 of 33 Western Slope tours had no phone, and none got reminders.

Tourf99af294-a8c3-43fa-b37b-a4ce9ac64f2b · unit 585-201 · Sat 2026-10-17 10:00 MT
SkipsT-24h no-phone · T-1h no-phone · 9:30 alert has-code · code sender awaiting-arrival
PropFlow Docs