🧭 ClientsFlow — Lead Journeys & Branching Flowchart

Ground truth = the CURRENT DEPLOYED production state. The funnel-automation overhaul shipped to prod 2026-06-19 and was live-verified end-to-end by the vision-truthful golden-path E2E run on 2026-06-21 (cold email → … → contract_signed), with each step flagged live / dormant / retired / not in backend. English narrative · Hungarian subject lines quoted verbatim · verified against the deployed code 2026-06-21. Product/flow changes surfaced by the same Run #1 are kept separate as 🔧 proposed items (see Run #1 findings) — not deployed.

What the funnel-automation overhaul changed (vs the pre-overhaul prod v103) — now ALL DEPLOYED

  1. Human gate → preview-&-arm gate (Q13). live Outbound email runs as automated sequences, but a sequence can never start sending silently. The moment a lead enters a stage that arms a sequence, the dashboard raises a preview modal showing every email's exact copy + send schedule. Matt Approves & arms (then it sends on schedule), Edits, or Cancels. Only two sends skip the modal: transactional reminders and the first-touch clear-negative one-liner. A global AUTOSEND_ENABLED kill-switch defaults OFF in code but is currently ON in production (go-live 2026-06-19) — armed sequences send inside the 06:12–18:00 Mon–Fri window.
  2. GHL retired entirely. retired Booking widget + booking-confirmation workflow and Workflow #1/#2 (stage sync) are off (GHL_ENABLED defaults OFF). /ghl/event is a 200 inert stub. The dashboard is the sole pipeline source of truth.
  3. Own booking app. live Free/busy-aware over two calendars (work + personal), 07:00–18:00 (BOOKING_START_HOUR=7/END=18), 15-min grid, 30-min calls, 4h min lead. Signed, prefilled, slots-only token link. Booking success emails Matt + raises a "what changed" event. An off-screen anti-bot honeypot (a hidden company field) silently no-ops bot submissions.
  4. No-show rebook: a 6-step rotation. live noshow_rebook armed via the preview modal — 6 fixed-copy steps at NOSHOW_WAIT_HOURS=[0, 24, 72, 120, 168, 240] (now / +1d / +3d / +5d / +7d / +10d), reusing the 3 approved emails in rotation (subjects "Más időpont jobb lenne?" · "15 perc is elég" · "Még érdekel a díjmentes anyag?"), each embedding the signed booking link. Replaces the old 5-step AI loop. (A re-booked no-show lead now correctly auto-moves out of Booking FUP back to Booked — fixed 2026-06-21.)
  5. 3-way negative routing. live neg_kind ∈ {angry, negative, soft_objection}: angry → drop/log (existing client → task); clear negative at first touch only → auto one-liner → Lost; soft_objection → AI draft + Negative-Replies card (human). Classifier = Gemini 2.5 Flash (classify_email).
  6. Main inbox surfaced (R3-gated). live The blanket "ignore clientsflow.hu" rule is reversed: known deal/lead → card; everything else → Notion "Logged" (not a Kanban card). Warmup/Instantly stays invisible.
  7. UI. live A pipeline lead's new email jumps its card to the top with a red glowing pulse (.pulse-unread) + always-visible snippet; armed sequences show a marching-ants dashed border (.autoflow); a "what changed since last open" popup; a manual call scheduler; one unified status <select> per card for stage moves.

Run #1 findings → proposed product changes 🔧 proposed · not yet built

B1 — "Missing modal after manual booking" — RESOLVED: test artifact ✓ resolved · no code change · Scenario 1 (booking → reminders)

Verdict: no product change needed. Verified in code: a manual booking already moves the card, auto-schedules the reminders (REMINDER_OFFSETS_HOURS=[24,2]), creates the sales-prep task, and the card shows a 🔔 reminderbadge ("on an automatic reminder sequence"). There is no copy-editor modal in that path.

Why the run looked wrong: Run #1's step-6 sequence editor was a separate manual action (a rep opening the universal sequence editor at will), not something triggered by booking. The reminder copy is fixed and not editable at booking time, so nothing is missing — the report merely failed to document how step 6 was reached. That's a testing-framework gap (tracked for the vision-e2e skill), not a product fix.

B2 — Delete-email-from-sequence “X” control 🔧 proposed · touches the armed-sequence editor (Scenario 1 step 10 page-3 editor; Scenarios 4 / 7 / 12)

Change: each email card in a sequence gets an X icon in the top-right to delete that email from the cadence, inline.

Why: reps need to drop individual emails from a sequence directly, without rebuilding it.

B3 — Booking-confirmation: bigger / highlighted appointment date 🔧 proposed · touches Scenario 1 step 5 (own-booking confirmation)

Change: on the booking-confirmation page, the appointment-date text must be bigger / highlighted.

Why: the confirmed call date is the single most important fact on that screen and currently doesn’t stand out.

B4 — Proposal copy: price basis, validity date & crossed-out anchor + discount window 🔧 proposed · touches Scenario 1 step 11 / Scenario 12 (proposal email)

Change (bundle), all driven from the post-call form data:

  • Label the price explicitly net / gross (nettó).
  • Show validity as an exact date and explain what happens after it.
  • Present a ~20%-higher anchor price crossed out next to the discounted price.
  • State the discount is available for ~15 days or until a written date set in the post-call form.

Why: sharper, unambiguous offer — clear price basis, real date-anchored urgency, and visible savings.

B5 — Add a THIRD document element: a legal appendix restating the proposal 🔧 proposed · touches Scenario 1 step 11 + Copy index “Contract” row

Change: add an appendix to the legal part that restates the proposal in legal terms, also filled from the post-call form, so the combined document carries the commercial proposal, the contract, AND a legally-phrased restatement.

Why: makes the offer itself legally binding / aligned with the contract.

Overlap to verify: the deployed DocuSeal doc is already a 3-part combined doc (AI proposal + szerződés + melléklet). Confirm whether the existing melléklet already covers this restatement or B5 is a distinct legal-restatement appendix on top of it.

B6 — Contract / proposal pre-filled from scraped lead data (stage-1 enrichment pipeline) 🔧 proposed · new upstream step; touches Scenario 1 step 1 (lead enters stage 1) → step 11 (doc generation)

Change / pipeline: on stage-1 entry → a Gemini agent finds the lead’s website (search if needed) → a scraper pulls text + image URLs → Gemini 2.5 Flash extracts location / services / socials → another Gemini instance looks up legal data → all saved to the CRM → used to auto-fill the contract / proposal.

Why: eliminates manual data entry and makes documents accurate from first contact.

B7 — DocuSeal signing chrome shown in English (locale, not code) 🔧 proposed minor · touches Scenario 1 steps 11–12 (DocuSeal signing) + Copy index “Contract” row

Change: the DocuSeal UI surrounding the Hungarian document renders in English; it should be Hungarian.

Why: consistent Hungarian experience for the prospect. A locale/config issue, not a code bug.

Legend

Two orthogonal things are marked on every message: who/what triggers the send and its build status.

Who sends / approves

🟢 AUTO-SENT system sends, no human — only transactional reminders + the first-touch goodbye one-liner ✍️→🟡 DRAFT→APPROVE AI drafts, a human clicks Jóváhagy / Ready to send per email (hand-authored: first reply, proposal email) 🤖⚡ ARMED SEQUENCE multi-email auto sequence — Matt previews all copy + schedule in a modal & clicks Approve & arm once; it then sends on schedule 🟡 MANUAL a human action (call, stage move, set date) — no message

The preview-&-arm invariant: no multi-email sequence ever leaves before Matt has seen its full copy + schedule in a stage-entry modal. The 10-no-edit streak only pre-fills the modal as a one-click "Approve & arm" — it never removes the modal or sends silently. A global AUTOSEND_ENABLED (default OFF) gates every auto-send.

Build status

live shipped, deployed & running in production (the funnel-automation overhaul is fully deployed) retired deliberately removed (the GHL booking + stage-sync layer) [[dormant]] code exists but gated off / authored but not auto-sent [[not in backend]] spec-only, not built [[copy caveat]] wired, but the live subject/body differs from the .md spec 🔧 proposed surfaced by the 2026-06-21 vision-truthful run; a product/flow change, not yet built (see Run #1 findings)

The whole deployed overhaul is live as of 2026-06-21 — the only non-live items in §1–§7 are a handful of deliberately dormant emails (handover/review) and two spec-only forms (client-portal RFI, the "we'll reach out" auto-confirmation). Separately, the vision-truthful Run #1 surfaced seven 🔧 proposed product changes (B1–B7), collected in Run #1 findings — those are not deployed.

How any inbound reply is handled (the stem every scenario shares)

  1. 🟢 Ingest gate (handle_missive_incoming): drop warm-up/DMARC/Instantly, calendar RSVPs, out-of-office, internal senders, and Layer-0 automated/bulk mail before any AI call. Our own sent mail (_is_ours) still drops. Wise transfer → payment touchpoint.
  2. live Main inbox surfaced (R3 gate): mail to the main clientsflow.hu inbox runs the full gate, then routes — known deal / genuine new lead (is_lead, conf ≥ 0.55) → card; everything else → Notion "Logged" (a log view, not a Kanban card). Warmup/Instantly stays invisible. (Reverses the 2026-06-18 "ignore main inbox" rule.)
  3. 🟢 AI classifier (Gemini 2.5 Flash) sets email_type, neg_kind ∈ {angry, negative, soft_objection}, is_lead, is_automated, booking_ok, confidence. Parser defaults neg_kind=soft_objection (safe → human) if absent.
  4. 🟢 Route → Notion Activity row + one reply-review task + Slack card. A reply on a deal with a live sequence clears the sequence (seq_*) immediately.
  5. ✍️→🟡 The rep works the card on 🌅 Ma / the board: Jóváhagy, Elvet (AI learns), Olvasva, Halaszt, Átadás Daninak — and, when a stage arms a sequence, the Approve & arm preview modal.

Everything below begins at step 3's branch on email_type / neg_kind.

Scenarios — every distinct leaf path

Grouped into families A–H by what the lead's reply was. Shared sub-paths (booking → call → proposal) are abbreviated after the first full listing.

A — Positive first reply interested / neutral · new_lead_reply

Scenario 1 — The clean win (full prepayment)
  1. 🟢 Gets the cold email — "Beszéljünk a weboldaladról, {keresztnév}?" 🔧 B6 stage-1 entry would trigger the scraping → CRM prefill pipeline (proposed)
  2. Replies positively (classifier: new_lead_reply, interested)
  3. ✍️→🟡 AI drafts a short personalised opener + the fixed own-booking link block (signed, prefilled, slots-only); rep approves → sent in-thread. live
    *Summary*: hand-authored — always per-email approval. On send an urgent "📞 Hívd fel" call task is created.
  4. 🟡 Lead books a slot via the own-booking app (07–18, freebusy over both calendars).
  5. 🟢 Own-booking confirmation: thank-you page to the lead + concise booking email to matyas@clientsflow.hu + a "what changed" popup event. GHL conf retired 🔧 B3 ✓ B1 proposed: bigger/highlighted appointment date (B3). B1 resolved as a no-op — reminders already auto-schedule and the card shows the reminder badge; no editor modal in this path.
  6. 🟢 Google Meet invite created — "Weboldal Bemutató — {név}"
  7. 🟢 Pre-call reminders auto-send (modal-exempt, REMINDERS_ENABLED ON): 24h "Holnapi megbeszélés", then 2h "Megbeszélés" (body "2 óra múlva"). live — REMINDER_OFFSETS_HOURS=[24,2]
  8. 🟡 Rep preps, runs the Google Meet call (Fireflies records).
  9. 🟢 Transcript → AI extracts the post-call form fields → pre-filled form emailed to Mátyás.
  10. 🟡 Rep confirms post-call form page 1 (Payment = Full); page 3 = the sequence editor for proposal-chase. Submit → DocuSeal proposal+contract generated, Stripe link created, stage → Proposal Sent. 🔧 B2 proposed: per-email X delete control on each sequence card
  11. ✍️→🟡 AI drafts the proposal email — "Az ajánlatod — {cég} weboldal"; rep checks link/account → sends. 🔧 B4 🔧 B5 🔧 B7
    *Summary*: hand-authored; DocuSeal proposal/contract link + Stripe link. Shows the R4 three-number framing (Teljes ár · Most egy héten belül · {due} után). Proposed: net/gross label + exact validity date + crossed-out anchor price & 15-day discount window (B4); a legal appendix restating the proposal in the DocuSeal doc (B5); Hungarian DocuSeal signing chrome (B7).
  12. Lead signs the DocuSeal doc and pays in full (within 2h) → stage → Prepayment. The proposal-chase sequence (if armed) auto-stops.
  13. ✍️→🟡 Onboarding/welcome-kit email — "Üdv a fedélzeten, {keresztnév}! 🎉 Indulunk"; rep approves.
    *Summary*: Drive folder + client-portal credential form link.
  14. Lead fills the Notion Client Portal RFI / Credentials. [[not in backend]]
  15. 🟡 Rep → Waiting for Dev → 🟢 Slack ping to Dani + Main-Task due today.
  16. 🟡 Dev finishes → Rep → Website Built.
  17. [[dormant]] Handover invite — "Foglaljunk egy átadási hívást, {keresztnév}!" — authored, not auto-sent.
  18. 🟡 Rep runs handover → Handed Over.
  19. [[dormant]] +3 days: review request — "Hogy tetszik az új weboldalad, {keresztnév}?"mark WON.
Scenario 2 — Win on a 50/50 deposit + balance (partial payment)
  1. … same path as Scenario 1 through the proposal …
  2. 🟡 Rep confirms form page 1 (Payment = Partial) → DocuSeal + Stripe deposit link, stage → Proposal Sent. live: deposit = 50% (DEFAULT_DEPOSIT_PCT=50); PAYMENT_PLANS=[50,100] (70% dropped)
  3. Lead signs + pays the 50% deposit → stage → Prepayment.
  4. ✍️→🟡 Onboarding/welcome-kit email; rep approves.
  5. 🟡 Waiting for Dev → Website Built.
  6. ✍️→🟡 Balance-due email — "Elkészült a weboldalad 🎉 A fennmaradó {balance}…". [[no live copy]]
  7. Balance paid → Fully Paid → Handover → WON.
Scenario 3 — Positive reply, lead doesn't book → nudge ladder → books
  1. 🟢 Cold email → replies positively → ✍️→🟡 first-reply with booking link (hand-authored).
  2. Lead does not book.
  3. ✍️→🟡 followup_nudge stays as today — AI-drafted, human-gated, Day 2 / Day 5 / Day 9 (decision 7: "alright", kept as-is). Distinct trigger from new_lead_unreachable; the one-active-sequence guard keeps them mutually exclusive.
  4. 🟡 Lead books → own-booking confirmation → Meet invite → 24h/2h reminders → call → Proposal (Scenario 1).
Scenario 4 — Positive reply, rep tried to call, no answer → "couldn't reach" sequence
  1. 🟢 Cold email → replies positively → urgent "📞 Hívd fel" task.
  2. 🟡 Rep calls, no answer; clicks "Couldn't reach".
  3. 🤖⚡ Entering this state arms the new_lead_unreachable sequence → preview modal shows every email + schedule. live
  4. 🟡 Rep clicks Approve & arm (or Edit / Cancel). Card moves to Booking FUP and shows a marching-ants dashed border.
  5. Sequence sends on schedule (absolute-time waits, workday 06:12–18:00 send window) until the lead replies / books / Matt clicks "Stop automatic emails" / deadline.
  6. Lead books → confirmation → call → Proposal.
Scenario 5 — Positive reply, rep phones, agrees a time on the call
  1. 🟢 Cold email → replies positively → "Hívd fel" task.
  2. 🟡 Rep calls, agrees a time, opens the manual call scheduler popup (invitees, event name, duration, description, and a separate confirmation email subject + body). live
  3. 🟢 "Create Event" → Meet event created + confirmation email sent → 24h/2h reminders → call → Proposal.
Scenario 6 — Positive reply, all nudges sent → ages out (Lost)
  1. 🟢 Cold email → positive → first-reply → no booking → nudge ladder (Day 2/5/9) sent, no action.
  2. 🟡 Rep marks Lezár — nem érdekli or it ages out → Stage: OFF (Lost) → 60-day nurture.

B — Booked but didn't attend no-show

Scenario 7 — No-show → 6-step rebook sequence → books
  1. … booked, Meet invite + reminders sent …
  2. 🟡 Lead does not attend. After "Mark Prepped" the card shows the outcome menu; rep clicks "No show + no answer → rebook seq."
  3. 🤖⚡ Entering the no-show state arms the noshow_rebook sequence — a 6-step rotation (NOSHOW_WAIT_HOURS=[0,24,72,120,168,240] = now / +1d / +3d / +5d / +7d / +10d, reusing the 3 approved emails NOSHOW_EMAIL_1/2/3_HU in rotation — subjects "Más időpont jobb lenne?" / "15 perc is elég" / "Még érdekel a díjmentes anyag?" — each embedding the signed booking link). Preview/editor shows all steps + schedule. live — replaced the old 5-step AI loop
  4. 🟡 Rep Approve & arm (or Save & close to define-but-not-arm) → card → Booking FUP (booking_fup), dashed border.
  5. Lead books (own booking widget or rebook link) → sequence stops → the card auto-moves out of Booking FUP back to Booked (the handle_own_booking force-stage + no-show-recovery stop, fixed 2026-06-21) → call → Proposal.
Scenario 8 — No-show → rep reschedules manually
  1. 🟡 No-show. Rep clicks "No show + reschedule" → the manual call scheduler popup (Scenario 5) → new Meet event + confirmation email → reminders → 2nd attempt.
Scenario 9 — No-show → 6-step rebook sequence, no response → Lost
  1. No-show → noshow_rebook armed & sent across the 6-step rotation (0 / +1d / +3d / +5d / +7d / +10d), no action.
  2. Sequence reaches its last step with no reply/book → 🟡 Rep → OFF (Lost).

C — Attended the call

Scenario 10 — Attended, timing objection (still interested → parked)
  1. … call happens, post-call form … Rep sets a follow-up date, parks with Halaszt — X nap.
  2. [[not in backend]] Auto "we'll reach out again" confirmation.
Scenario 11 — Attended, a 2nd discovery call is needed
  1. Post-call form → 🟡 Rep opens the manual scheduler (Scenario 5) → 2nd Meet event + confirmation + reminders → 2nd call → Proposal.

D — Proposal sent (chase & payment)

Scenario 12 — Proposal sent, unsigned → proposal-chase sequence → signs & pays
  1. … proposal email sent (hand-authored, approved) …
  2. Lead doesn't sign within the window.
  3. 🤖⚡ The proposal-chase sequence (authored on post-call form page 3: subject + body + wait-hours per step, "Save for this lead only" / "Save as template" / version dropdown) is armed via the "Send & schedule emails" button. The proposal email itself is step 0 of this chase (sent first, window-gated 06:12–18:00). Stops on sign / reply / proposal_due_date. live
  4. Lead signs → Stripe pays → Prepayment (sequence stops).
Scenario 13 — Signed, not paid (abandoned cart) → pays
  1. Lead signs DocuSeal but doesn't pay → ✍️→🟡 AI abandoned-cart draft (flows.draft_abandoned_cartdraft_reply, internal note ABANDONED_CART_INSTR) → human approves → Lead pays via Stripe → onboarding. NOT an armed sequenceabandoned_cart ∉ SEQUENCE_ARMABLE_TYPES; it is a single human-gated AI draft (corrected vs the prior doc).
Scenario 14 — Proposal never signs → Lost
  1. Chase sequence runs to deadline, no sign → 🟡 Rep → OFF (Lost) → 60-day nurture.
Scenario 15 — Question on the sent proposal
  1. Lead replies on the proposal thread with a question → ✍️→🟡 AI draft answers + re-offers link (hand-authored, approved; the chase sequence is auto-stopped by the reply) → Lead signs → pays.

E — Negative reply neg_kind ∈ {angry, negative, soft_objection}

Scenario 16 — Angry reply → dropped (existing client → task)
  1. Replies (classifier: neg_kind = angry).
  2. 🟢 Dropped — no draft, no card, log only. live
  3. 🟡 Exception: an angry known/paid contact still surfaces as a "Client message" task (never silently dropped).
Scenario 17 — Clear "nem érdekel" at first touch → auto goodbye → Lost
  1. Replies (neg_kind = negative)brand-new lead, no prior exchange, confidence ≥ 0.80.
  2. 🟢 Auto one-liner "Köszönöm a visszajelzést, minden jót a továbbiakban!" → Stage: Lost. live — modal-exempt (R1); any prior back-and-forth → human card instead
Scenario 18 — Soft objection → AI objection draft → human card
  1. Replies (neg_kind = soft_objection — e.g. "nem most", "drága", "küldj infót").
  2. ✍️→🟡 AI objection-handling draft → Negative-Replies card (human). column + reactivation preserved
  3. Rep approves → Lead re-engages → rejoins Family A. OR
  4. 🤖⚡ Rep arms the optional negative-followup sequence (soft-objection only) via the preview modal → +2-day nudge "Érdekes lehet a lehetőség?" → books / 1-week silence → Ghosted.

F — Ghosted / Lost lead writes back

Scenario 19 — Reactivation
  1. Lead in Ghosted/Lost replies interested → 🟢 auto-cleared of negative markers → new_lead → ✍️→🟡 personalised opener + booking link → books. preserved

G — Existing paid client writes in

Scenario 20 — Ongoing-client message
  1. Paid client emails (main inbox now surfaced, R3) → matched to the deal → "Client message" task / ongoing card. live: main inbox surfaced (R3); no longer blanket-ignored

H — Non-lead / vendor / system mail

Scenarios 21–23 — Other
  1. 🟢 Other + CRM contact: Activity row, no draft.
  2. 🟢 Other + cold inbox: Review row + "⚠️ Borderline" flag (kept, never dropped).
  3. 🟢 Other + main inbox, no deal match: → Notion "Logged" (log view, not a card). Warmup/Instantly → invisible.

Branching flowchart — from the lead's reply onward

Conditions on the arrows; each box shows the subject line (or "in-thread" / transactional) + a short summary. Colours follow the send-mode legend; cyan = armed auto-sequence (preview-&-armed first), dashed purple = dormant.

flowchart TD
  subgraph Legend ["ℹ️ LEGEND (Send mode)"]
    direction LR
    L1["🟢 AUTO-SENT 
reminders + first-touch goodbye only"]:::auto L2["✍️→🟡 DRAFT→APPROVE
hand-authored, per-email"]:::gate L3["🤖⚡ ARMED SEQUENCE
preview-&-arm modal, then auto"]:::seq L4["🟡 MANUAL ACTION
no message"]:::man L5["[DORMANT / RETIRED]"]:::dorm end subgraph Triage ["1. Inbound Ingest & Triage"] START(["📨 Inbound Reply"]):::start MAIN{"Main inbox?
R3 routing"}:::ai CLS{"🤖 AI Classifier
(Gemini 2.5 Flash)
neg_kind 3-way"}:::ai LOG["📝 Notion 'Logged'
(no card)"]:::man START --> MAIN MAIN -->|"no deal match"| LOG MAIN -->|"known deal / new lead"| CLS end subgraph Booking ["2. Booking & Nudges (own booking app)"] FR["✍️→🟡 First Reply
own-booking link"]:::gate NUDGE["✍️→🟡 Nudge Ladder
Day 2 / 5 / 9 (kept)"]:::gate UNREACH["🤖⚡ new_lead_unreachable
(armed sequence)"]:::seq CALLSET["🟡 Manual Scheduler
event + conf email"]:::man CLS -->|"interested / neutral"| FR FR -->|"no booking"| NUDGE FR -->|"rep called, no answer"| UNREACH FR -->|"rep phoned, agreed time"| CALLSET end subgraph Meeting ["3. Meeting & Reminders"] BOOKED["🟢 Own-booking Conf
page + email to Matt"]:::auto MEET(["🟢 Meet Invite
'Weboldal Bemutató'"]):::auto REMIND["🟢 Reminders 24h & 2h
(modal-exempt)"]:::auto NOSHOW["🤖⚡ No-show Rebook
6-step rotation (0/+1d/+3d/+5d/+7d/+10d)"]:::seq FR -->|"books"| BOOKED NUDGE -->|"books"| BOOKED UNREACH -->|"books"| BOOKED CALLSET --> BOOKED BOOKED --> MEET --> REMIND REMIND -->|"attends"| CALL{"🟡 Sales Call"}:::man REMIND -->|"no-show"| NOSHOW NOSHOW -->|"rebooks"| BOOKED end subgraph Proposal ["4. Proposal & Chasing"] PROP["🤖⚡ Proposal Email (chase step 0)
in-thread + DocuSeal/Stripe"]:::seq CHASE["🤖⚡ Proposal Chase
(page-3 authored, armed)"]:::seq ABANDON["✍️→🟡 Abandoned-cart AI draft
signed, unpaid (NOT armed)"]:::gate CALL -->|"ready to buy"| PROP PROP -->|"signs + pays ≤2h"| PREPAY["Stripe Payment"]:::sys PROP -->|"signed, unpaid"| ABANDON PROP -->|"sent, unsigned"| CHASE CHASE -->|"signs"| PREPAY ABANDON -->|"pays"| PREPAY end subgraph Delivery ["5. Onboarding & Delivery"] ONB["✍️→🟡 Welcome Kit
'Üdv a fedélzeten!'"]:::gate DEV["🟡 Waiting for Dev
(Dani Slack ping)"]:::man BAL["✍️→🟡 Balance Due
[NO LIVE COPY]"]:::gate HANDOVER["Handover Invite
[DORMANT]"]:::dorm WON([🏆 WON]):::won PREPAY --> ONB --> DEV DEV -->|"full prepaid"| HANDOVER DEV -->|"50% deposit"| BAL BAL -->|"pays balance"| HANDOVER HANDOVER --> WON end subgraph Negatives ["Negative replies (3-way)"] ANGRY["🟢 Angry → drop/log
(client → task)"]:::auto GOODBYE["🟢 First-touch goodbye
one-liner (modal-exempt)"]:::auto SOFT["✍️→🟡 Soft objection draft
Negative-Replies card"]:::gate NEGFUP["🤖⚡ Negative-followup
+2-day nudge (armed)"]:::seq GHOST([👻 Ghosted]):::term LOST([🪦 Lost — 60d nurture]):::term REACT["🟢 Reactivation"]:::auto CLS -->|"angry"| ANGRY CLS -->|"negative + first touch + conf≥0.80"| GOODBYE CLS -->|"soft_objection"| SOFT GOODBYE --> LOST SOFT -->|"arm follow-up"| NEGFUP SOFT -->|"reply & mark lost"| LOST NEGFUP -->|"books"| BOOKED NEGFUP -->|"1 week silence"| GHOST GHOST -->|"writes back"| REACT LOST -->|"writes back"| REACT REACT --> FR end CLS -->|"proposal_followup"| PF["✍️→🟡 Proposal Reply
Q&A, no book link"]:::gate PF --> PROP CLS -->|"ongoing client"| ONG["Client Message Task"]:::man %% GHL retired GHLX["🔵 GHL booking/stage sync
RETIRED — /ghl/event = inert 200"]:::dorm classDef start fill:#e8f0fe,stroke:#2563eb,stroke-width:2px,color:#1c2230; classDef ai fill:#ffffff,stroke:#5c6675,stroke-width:1.5px,color:#1c2230; classDef auto fill:#e9f7ef,stroke:#1f9d55,color:#13502c; classDef gate fill:#fdf6e3,stroke:#b7791f,color:#6b4a10; classDef seq fill:#e0f7fb,stroke:#0e7490,color:#0b4250; classDef man fill:#eef1f5,stroke:#64748b,color:#33414f; classDef neg fill:#fdecea,stroke:#c0392b,color:#7d1f15; classDef term fill:#eef1f5,stroke:#64748b,stroke-dasharray:4 3,color:#33414f; classDef won fill:#e9f7ef,stroke:#1f9d55,stroke-width:2px,color:#13502c; classDef dorm fill:#f3ecfa,stroke:#8a4baf,stroke-dasharray:5 3,color:#4d2a66; classDef sys fill:#e8f0fe,stroke:#2563eb,color:#15336e;

Copy index — subject · source · send mode · status

MessageSubject line (HU)SourceSend modeStatus
Cold email (first touch)Beszéljünk a weboldaladról, {keresztnév}?Instantly (read-only)🟢 campaignlive
First replyin-threadAI + FIRST_REPLY_BLOCK_HU (own-booking link)✍️→🟡live
Booking confirmationpage + email to Mattown booking app (handle_own_booking)🟢live (own app; GHL conf retired)
Meet inviteWeboldal Bemutató — {név}_create_booking_meet_event🟢live (GCAL-driven, real Meet link)
Reminder 24hHolnapi megbeszélésREMINDER_24H_*🟢 auto (modal-exempt)live
Reminder 2hMegbeszélésREMINDER_1H_* (body "2 óra múlva")🟢 auto (modal-exempt)live — REMINDER_OFFSETS_HOURS=[24,2]
Proposal email (step 0 of chase)in-thread (threads under the cold subject; editable)post-call step 3 → proposal_chase step 0 (with the client DocuSeal sign link)🤖⚡ armed (window-gated)live
Nudge 1/2/3in-threadNUDGE_INSTR_1/2/3 (Day 2/5/9); also armable as the nudge sequence✍️→🟡 / 🤖⚡live
New-lead "couldn't reach"in-threadnew_lead_unreachable sequence engine🤖⚡ armedlive
Proposal chasein-threadpost-call page-3 editor / templates (proposal_chase)🤖⚡ armedlive (replaced the cron soft/firm)
Abandoned cartin-thread AI draftflows.draft_abandoned_cartdraft_reply (ABANDONED_CART_INSTR)✍️→🟡 AI draftlive — NOT armed (∉ ARMABLE_TYPES)
No-show rebook (6-step rotation)in-thread "Más időpont jobb lenne?" / "15 perc is elég" / "Még érdekel a díjmentes anyag?"NOSHOW_EMAIL_1/2/3_HU in rotation across NOSHOW_WAIT_HOURS=[0,24,72,120,168,240]🤖⚡ armedlive — replaced the 5-step AI loop
First-touch goodbyein-thread "Köszönöm a visszajelzést, minden jót…"NEGATIVE_REPLY_DEFAULT_HU🟢 auto (modal-exempt)live (first touch only, conf≥0.80)
Soft-objection draftin-threadAI objection-handling (neg_kind=soft_objection)✍️→🟡live
Negative +2-day FUPin-thread "Érdekes lehet a lehetőség?"NEG_FUP_BODY_HU (negative_followup)🤖⚡ armedlive (armed, soft only)
Welcome kit / onboardingÜdv a fedélzeten, {keresztnév}! 🎉 Indulunkcopy:email_welcome_kit✍️→🟡live
Balance due (50/50)in-thread "Elkészült a weboldalad 🎉…"BALANCE_DUE_BODY_HU✍️→🟡live, .md subject differs
Contract (megbízási szerződés)DocuSeal doc — combined AI proposal + szerződés + mellékletcontract-copy.mdbuild_contract_html— both parties signlive (50/50 fee; both-party signing verified 2026-06-21 → contract_signed) 🔧 B5 🔧 B7
Handover / review requestFoglaljunk… / Hogy tetszik…copy:email_handover_invite / _review_requestauthored, not auto-sent
GHL booking confirmation + stage syncGHL template / Workflow #1+#2GoHighLevel🔵retired (inert 200 stub)

Regenerated from the parallel session's plan change-the-incoming-recursive-map.md (WS1–WS12 + Q1–Q13 conflict review) and LEAD_JOURNEYS.html. Rendering: Mermaid flowchart syntax.