BuildFlow Customer Email System — Full Preview

Sample recipient: Sarah Donovan, 412 S Sleight St, Prior Lake, MN 55372
16 emails rendered from source · Generated 2026-04-21

CRM Lifecycle — Step by Step

Leads progress through these stages in order, over time. Each step happens AFTER the prior one completes. The emails at each step fire only when that step is reached — not all at once.

Step CRM Stage What happens at this step Your action to advance + fire emails Emails / Meetings
1 New → Scheduled Prospect fills a form on the website. Consultation self-booked via the calendar embed. Nothing. Form submission automatically creates the lead in admin, sets status to New/Scheduled, and fires the Welcome email.
1.0 Welcome— immediate on form submit
🤝 CONSULTATION
ONSITE · 30–45 min
On-site walkthrough at the homeowner's address. Scan the space, discuss vision, scope, and timeline. Take Matterport scan. You show up, walk the space, take measurements and 3D scan. Update lead status: New → Contacted → OnSite. Human touchpoint — no emails fire
2 CreateEstimate Back at the office you build the estimate, generate renderings, upload layout. When ready, schedule the Estimate Review. Open the lead → click "Schedule" on the Estimate Review stage → pick date/time → paste the Google Meet link → hit "Send Invite". All 4 emails fire.
3.0 Meeting Confirmation— immediate on scheduling
3.1 Walkthru— immediate (piggybacks)
3.2 Transformation— +2 days *
3.3 Reminder T-24h— 24h before the meeting
🤝 ESTIMATE REVIEW
VIRTUAL · Google Meet
Walk the customer through the full proposal — scope, pricing, renderings, portal. Answer questions. Gauge intent. Present the estimate. After the call, formalize and send. Human touchpoint — meeting happens here
3 Quoted Estimate Review done. You finalize the estimate and send it with portal link. Open the Estimator workspace → finalize → click "Send Estimate". Email fires with portal link + total.
4.0 Estimate (proposal)— immediate on Send Estimate click
4 UpdateMeeting (Pre-Closing) Prospect has the estimate. They want time to think / have questions. You schedule a follow-up conversation. Open the lead → click "Schedule" on the Follow-up Meeting stage → pick date/time → paste Google Meet link → "Send Invite". All 3 emails fire.
5.0 Meeting Confirmation— immediate on scheduling
5.1 Reminder T-24h— 24h before the meeting
5.2 Hiring Checklist— immediate (piggybacks)
🤝 PRE-CLOSING MEETING
VIRTUAL · Google Meet
Follow-up conversation. Address remaining questions, talk through selections, financing, timeline. Determine outcome. Meeting concludes → pick one of 4 outcome buttons below. Human touchpoint — meeting happens here
5 Fork — 4 outcomes Pre-Closing meeting concludes. Based on how it went, pick one of four buttons: Click one of the 4 outcome buttons. Choice determines Step 5a–5d below. — depends on button ↓
5a Closing They're in. Schedule the closing meeting to sign contracts and take deposit. Click "📅 Schedule Closing" → closing-meeting modal opens → pick date/time → "Send Invite". 2 emails fire. Meeting Confirmation · Reminder T-24h (reuses templates)
🤝 CLOSING MEETING
ONSITE · Sign + Deposit
Sign contracts, collect deposit, kick off pre-construction. Handshake moment. Contracts signed → update status to Closed-Won. Human touchpoint — deal closes here
5b UpdateMeeting (again) They want one more conversation before committing. Loops back to Step 4. Click "🔁 Another Follow-up" → new Follow-up Meeting modal opens → schedule. Same 3 emails re-fire. 5.0 · 5.1 · 5.2 (re-fires)
5c Followup (Follow-up Cycle) They went quiet. System keeps pressure on them automatically over the next 60 days. Click "⏳ Start Follow-up Cycle". Lead moves to Follow-Up Cycle section. Nightly scheduler fires 6 cycle emails on Days 0 / 3 / 14 / 30 / 45 / 60.
6c.0 Day 0— immediate on cycle start
6c.1 Day 3— +3 days
6c.2 Day 14— +14 days (11d gap)
6c.3 Day 30— +30 days (16d gap)
6c.4 Day 45— +45 days (15d gap)
6c.5 Day 60— +60 days (breakup, 15d gap)
5d Lost They said no. Close the file. Click "✗ Mark Lost". Status flips to Lost. Lead drops to Lost section of Leads tab. —
6 Closed-Won Contracts signed. Lead drops out of the sales funnel. Update status to Closed-Won from the lead status dropdown. Lead moves to Pre-Construction section. —
Anytime: "Any" Note Notification fires whenever you post a message in the client portal — independent of the step above.
* The Transformation email's +2-day delay requires a scheduler wire-up that isn't in production yet — the email function exists but currently would fire alongside the Walkthru. Post-deploy task to space them out.
Touchpoint emails (1–10) 1. Welcome  ·  2. Meeting Confirmation — Estimate Review  ·  3. Meeting Confirmation — Follow-up Meeting  ·  4. Walkthru — 3D Tour Invite  ·  5. Transformation — Before & After  ·  6. Reminder — Estimate Review (T-24h)  ·  7. Reminder — Follow-up Meeting (T-24h)  ·  8. Hiring Checklist  ·  9. Estimate (Proposal Delivery)  ·  10. Note Notification
Follow-up Cycle (6 emails, 60 days) 11. 6c.0  ·  12. 6c.1  ·  13. 6c.2  ·  14. 6c.3  ·  15. 6c.4  ·  16. 6c.5
1.0 Welcome CRM Stage: New → Scheduled
Subject: BuildFlow Basements appointment confirmed
Preview: Consultation booked. Details inside.
Trigger: Auto — fires on any form submission (quote-request, free-design, reserve-spot) via submission-created.js
3.0 Meeting Confirmation — Estimate Review CRM Stage: CreateEstimate → PresentEstimate
Subject: Your BuildFlow estimate review is confirmed
Preview: See you soon.
Trigger: Admin — fires when stageKey === "estimateReview" via sendMeetingInvite()
5.0 Meeting Confirmation — Follow-up Meeting CRM Stage: UpdateMeeting
Subject: Your BuildFlow follow-up meeting is confirmed
Preview: See you soon.
Trigger: Admin — fires when stageKey === "updateMeeting" via sendMeetingInvite()
3.1 Walkthru — 3D Tour Invite CRM Stage: CreateEstimate
Subject: While we build your estimate, Sarah — explore real finished basements
Preview: Real projects, real finishes. Start here.
Trigger: Auto — piggybacks on sendMeetingInvite() when stageKey === "estimateReview"
3.2 Transformation — Before & After CRM Stage: CreateEstimate
Subject: What we start with. What we hand over.
Preview: Same scope as yours. Before, after, and everything in between.
Trigger: Auto — scheduled ~2 days after Walkthru email while estimate is being built
3.3 Reminder — Estimate Review (T-24h) CRM Stage: PresentEstimate
Subject: Reminder: estimate review tomorrow, Sarah
Preview: Quick prep note for tomorrow.
Trigger: Auto — admin-side scanner fires 2–25h before meeting, once per meeting
5.1 Reminder — Follow-up Meeting (T-24h) CRM Stage: UpdateMeeting
Subject: Reminder: follow-up meeting tomorrow, Sarah
Preview: Quick prep note for tomorrow.
Trigger: Auto — same scanner, update meeting variant
5.2 Hiring Checklist CRM Stage: UpdateMeeting
Subject: Sarah, a checklist for every basement bid you look at
Preview: Vet every contractor the same way — including us.
Trigger: Auto — piggybacks on sendMeetingInvite() when stageKey === "updateMeeting"
4.0 Estimate (Proposal Delivery) CRM Stage: Quoted
Subject: Your BuildFlow proposal is ready, Sarah
Preview: Full scope, pricing, and portal link.
Trigger: Admin — "Send Estimate" button in estimator workspace
Any Note Notification CRM Stage: Any stage (portal active)
Subject: You have a new message from BuildFlow
Preview: Click to view in your portal.
Trigger: Portal-driven — sends when Eric posts a message in the client portal
6c.0 Cycle Day 0 — no-pressure send-off CRM Stage: Followup
Subject: Your BuildFlow estimate — no rush, just a few things to think about
Preview: Three questions worth thinking through, and your proposal is right here when you're ready.
Trigger: Auto — nightly scheduler (schedule-cycle-emails.js) after "Start Follow-up Cycle" outcome
6c.1 Cycle Day 3 — recap + 3 FAQs CRM Stage: Followup
Subject: The 3 questions everyone asks after our estimate
Preview: Why labor costs what it does, what's fixed vs. flexible, and what "8-12 weeks" actually means.
Trigger: Auto — nightly scheduler (schedule-cycle-emails.js) after "Start Follow-up Cycle" outcome
6c.2 Cycle Day 14 — same-zone case study CRM Stage: Followup
Subject: A basement we just finished nearby
Preview: Same price range as yours. Before, after, and what the owner said when we handed him the keys.
Trigger: Auto — nightly scheduler (schedule-cycle-emails.js) after "Start Follow-up Cycle" outcome
6c.3 Cycle Day 30 — quality checklist CRM Stage: Followup
Subject: 5 things cheap basement jobs skip (that you'll regret in 5 years)
Preview: What separates a basement that lasts from one that starts falling apart.
Trigger: Auto — nightly scheduler (schedule-cycle-emails.js) after "Start Follow-up Cycle" outcome
6c.4 Cycle Day 45 — binary check CRM Stage: Followup
Subject: Still thinking, or should I close the file?
Preview: Either answer is fine. Just want to know where you're at.
Trigger: Auto — nightly scheduler (schedule-cycle-emails.js) after "Start Follow-up Cycle" outcome
6c.5 Cycle Day 60 — breakup CRM Stage: Followup
Subject: Closing out your file — good luck either way
Preview: If anything changes, you know where to find us.
Trigger: Auto — nightly scheduler (schedule-cycle-emails.js) after "Start Follow-up Cycle" outcome
— —
—