A reminder that won't go away until you sign

The moment a customer signs, a persistent banner appears at the top of the dashboard and stays there until the builder counter-signs — with a deliberate two-tap dismiss for stale ones.

What it is

The sign route inserts a persistent admin_alert of type contract_counter_sign_needed naming the signer. AdminAlertBanner polls every 30 seconds, listens for an admin_alert_changed window event, and renders the open alerts. Past three open alerts the stack collapses to a one-line summary that expands into a height-capped scrollable list.

Also called: counter sign reminder · persistent alert · contract waiting on me

See it
A reminder that won't go away until you sign
New lead 4
Marlin Hoover
$31k
Delia Yoder
$46k
Contacted 3
Sutter Kline
$37k
Ronan Petsch
$29k
Estimate 4
Ivy Brubaker
$65k
Gideon Alt
$49k
Sold 4
Marlin Hoover
$60k
Delia Yoder
$55k
The sticky top banner with a counter-sign alert row and a Sign action, plus its collapsed one-line summary state. AdminAlertBanner.tsx. Sample data — no customer information appears here.
How it works
  1. 1Alert created at customer sign: 'Counter-sign required: contract for <name>' with body '<name> signed the contract. Your counter-signature is required to make it fully executed.'
  2. 2createAdminAlert() dedupes on type + entity so a second open alert for the same contract is never stacked.
  3. 3Clicking an alert of this type opens the counter-sign modal directly.
  4. 4Dismiss is gated behind a branded confirm dialog — 'the deliberate-action seatbelt' — for stale, void or test reminders.
  5. 5Counter-signing resolves every open alert pointing at that contract.
Why we built it

The banner's docstring records both the intent and the bug it survived: reminders are 'deliberately sticky (resolving the underlying action is the primary way to clear them), BUT a backlog must never bury the UI: past a few items the stack COLLAPSES… and every alert can be deliberately dismissed (two-tap confirm) when it's stale/void/test data.' The collapse threshold names its cause: 'the bug: 10+ stuck test reminders.'

The problem
  • Counter-signatures forgotten for weeks
  • An alert backlog swallowing the dashboard
  • No escape hatch for stale reminders
Sound familiar?
What you get
Impossible to forget an outstanding counter-signature
A backlog collapses instead of taking over the screen
Deliberate dismissal for anything genuinely stale

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 →