Stage complete — one send, once

Finishing a stage sends the customer a progress update and the team a notification — exactly once, no matter how many devices saw it happen.

What it is

One shared server routine handles everything that follows a stage finishing: the customer progress email, the internal notification, the per-stage automation rules, and the 'that was the last build stage' congratulations. A database-enforced claim guarantees a single send.

Also called: customer progress email · stage finished notification · got the same email twice

See it
Stage complete — one send, once
Apr
May
Jun
Jul
Gideon Alt — Equipment Storage
Framing
Gideon Alt — Equipment Storage
Concrete
Gideon Alt — Riding Arena
Trim
Marlin Hoover — Barndominium
Framing
Ivy Brubaker — Hobby Shop
Concrete
Framing crewConcrete crewTrim crew
Sequence diagram: two tabs both claiming, one winning, one email leaving — stageNotifyClaim.ts. Sample data — no customer information appears here.
How it works
  1. 1The first caller to see the transition inserts a claim row on a unique index; everyone after gets duplicate:true and sends nothing
  2. 2The claim is taken BEFORE the automation engine and before the customer email, because both are outbound and neither is retractable
  3. 3If the finished stage is the LAST build stage, the 'project completed' congratulations email takes over from the generic stage update — one action, one customer message
  4. 4Reopening a checkpoint releases the claim, so finishing the stage again can notify again
  5. 5Customer progress emails are gated by their own granular Settings toggle, not the org master switch
Why we built it

Customers were getting the same 'your stage is complete' email twice: two tabs open on one job each decided the stage had just finished, and a builder retrying a save that looked stuck sent it again. No check inside a browser can fix that, because each browser is correct about what it saw. The send is claimed once, centrally, so the second attempt finds it already taken. Reopening a checkpoint releases the claim, because otherwise fixing the work and ticking it again would leave the customer never hearing that it finished the second time.

The problem
  • Duplicate customer emails from multiple tabs or retries
  • Progress emails silently dead behind an org switch nobody flipped
  • One-shot notification after a reopen
Sound familiar?
What you get
Customers get exactly one message per real completion
Reopen-and-refinish notifies correctly
Crew-side and office-side completions behave identically
What's inside

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 →