Stalled intake form — customer nudges and an internal alert

When a customer signs but leaves the information form untouched, the system nudges them at 24 hours and again at 48, and raises an internal alert so somebody knows to call.

What it is

A server-side sweep over signed estimate links with no completed customer form in the last seven days. It raises a de-duplicated admin alert per window and sends the customer a branded email (and text, where the org switched texting on for that message) with a direct link to the form. Each window fires once.

Also called: customer hasn't filled the form · chase the project details · form reminder · 24 hour nudge

See it
Stalled intake form — customer nudges and an internal alert
Dirt work
Foundation
3
Framing
4 photos
4
Roofing
5
Trim
6
Final
The two nudge emails side by side ('A quick nudge' / "We're holding your spot") with the admin alert banner behind them. api/cron/reminders + renderCustomerActionEmail. Sample data — no customer information appears here.
How it works
  1. 1The sweep runs inside the reminders cron every ~5 minutes.
  2. 2Elapsed time since signing selects the 24h or 48h window; the matching form_reminder_*_sent_at stamp prevents a re-nag.
  3. 3The admin alert is deduped against open alerts for the same link and always fires — it is internal.
  4. 4The customer nudge is behind the granular 'Form reminder' toggle in Settings, with the tenant's own wording honoured, and both channels compose from the same tokens.
  5. 5The stamp is written even when the toggle skipped the send: 'the org said no, that's not a retry-forever condition.'
Why we built it

The comment records where it came from and why it moved: “Moved server-side this was a client-side scan in lib/contracts.ts that only raised ADMIN alerts, so the 'form reminder' customer messages in Settings › Notifications never actually reached a customer — and nothing at all fired unless someone from the org happened to be logged in.” then un-gated it from the org master switch 'like every other customer progress message', because no org had ever flipped that switch and the emails were dead everywhere.

The problem
  • A client-side scan that only ran when someone was logged in
  • Customer-facing reminders that were configured but never sent
Sound familiar?
What you get
The customer gets chased automatically, twice, then stops
Someone inside is told the job is stalled

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →