ClientsFlow · Studio ↔ Pipeline Integration · EBO

Extended EBO — Studio ↔ Pipeline Integration

A booked deal flows into Studio (sell with it) and back out (deliver with it) — without leaving the pipeline dashboard · Scenarios S1–S12 · 2026-06-25 · Decisions Q1–Q9 signed · owner comments applied

Phase ① — PRE-sales-call (sell with it)
At booking, Studio auto-generates a home-page design + SEO audit + suggested new site structure so the rep walks into the call with something that impresses.
Phase ② — POST-payment (deliver with it)
After the client pays, Studio finalizes the design and runs the client-feedback implementation loop (comment → section-edit → approve), fed by the auto-pushed sales-call transcript.
You do → click/action You should see → on-screen result Element changes → copy · look · where What changes underneath → data/state Must NOT happen → bug guard 🕓 Touchpoint history → what the card's history panel shows 💡 UX critique + suggestion → what's unclear + how to improve
Signed decisions folded in — Q1 booking trigger · Q2 dual-purpose Phase①/② · Q3 auto-kick the Lab · Q4 single status chip · Q5 pulsing-green approval overlay + 2 hover buttons · Q6 dual "Send to client" AI-draft modal · Q7 transcript auto-push · Q8 lost→auto-archive · Q9 website-URL invariant + red ❗.
Invariants that hold everywhere — human gate on BOTH sides (nothing reaches a client without an explicit human action); Studio stays CRM-agnostic (pipeline calls Studio's API, never the reverse); idempotent one-deal↔one-project; no new Modal crons (event-driven, 5-cron cap); lost-deal cleanup ARCHIVES, never deletes.
Owner comments applied (2026-06-25) — UX suggestions S41/S42/S93/S101 dropped per owner; S61 reworked (call transcript saved into the CRM + full transcript AND summary in collapsible toggles, in BOTH the touchpoint-history and the 'Details' panel — see S6); S11 reworked (no separate dev-handoff state — delivery via the Studio review tool + Cloudflare-API publish, ONE unified pipeline view shared with Dani); S12 added (manual Google-Calendar reschedule logged as a reschedule touchpoint, source=manual).

S1 — Enrichment guarantees a website URL; missing → red ❗ badge (guardrail / upstream)

Who: System (lead enrichment) + Mátyás  ·  When: A new lead is enriched; enrichment must save a website_url. This runs upstream of Studio and gates everything downstream.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 Enrichment runs on a new lead and finds + saves the prospect's website The card shows the website (favicon/domain) and NO red ❗ — Studio readiness is implicitly met Copy: domain shown on card (e.g. "beridoor.hu") · Look: normal card, optional 🌐 favicon · Where: card meta row deal.website_url persisted; Studio-readiness = true Lead must NOT exist long-term with an empty website silently; readiness must NOT be assumed without a saved URL SYSTEM ENTRY
Type: Adatdúsítás · icon: 🔎 · label: "Weboldal megtalálva" · description: "{domain} mentve" · timestamp: now · initiated_by: system (muted grey)
Critique: The website URL is the single most load-bearing input for the whole Studio flow, yet it sits as plain text with no indication of how confident enrichment is in it.
Suggestion: Show the URL as a clickable chip with a tiny confidence dot (green = scraped a real homepage, amber = guessed from email domain). Lets the rep sanity-check before a design is auto-built on a wrong URL.
2 Enrichment finds NO usable website at all A prominent red ❗ badge on the card face — the only thing that will later block the Studio auto-kick Copy: tooltip "Nincs weboldal — add meg a Studio dizájnhoz" · Look: RED ❗ badge, pinned top-right of card · Where: card corner ribbon deal.website_url empty → readiness = false; ❗ flag raised The ❗ must NOT be hidden in a panel; a no-URL deal must NOT pass as Studio-ready SYSTEM ENTRY
Type: Hiányzó adat · icon: ❗ · label: "Nincs weboldal" · description: "Az adatdúsítás nem talált weboldalt — kézi megadás szükséges a Studio dizájnhoz" · timestamp: now · initiated_by: system
Critique: A bare ❗ tells the rep something is wrong but not what to do about it — the fix (paste a URL) isn't reachable from the badge.
Suggestion: Make the ❗ badge itself click-to-act: clicking it opens a tiny inline "Weboldal megadása" field right on the card. One click from problem to fix, no panel diving.

S2 — Sales call booked + URL present → auto-create project + auto-kick the Lab (Phase ①) (happy path)

Who: System (triggered by booking) + Mátyás  ·  When: A deal with a saved website URL has its sales call booked. This is the Phase-① "sell with it" kickoff.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 The sales call is booked (lead self-books or operator logs a booking) on a URL-present deal A Studio project is auto-created, bound to this deal; the status chip appears reading "Studio: dizájn készül" Copy: status chip "🎨 Dizájn készül" · Look: indigo chip on the card · Where: card status-chip slot Studio POST /api/projects with {source_url, client_name, crm_ref=deal_id}; project id stored on the deal Must NOT create a second project for the same deal (idempotent); must NOT block the booking if Studio is slow/down (fail-open) NEW ENTRY
Type: Studio · icon: 🎨 · label: "Studio projekt létrehozva" · description: "Dizájn projekt összekötve ezzel a leaddel" · timestamp: now · initiated_by: system
Critique: The project is created silently — the rep may not realise a Studio design is now spinning up and tied to this lead.
Suggestion: Fire a one-time bottom-left toast on the board: "🎨 Studio dizájn elindult — {company}". Non-blocking, disappears in 4s, links to the project.
2 (Automatic) the Lab is kicked to generate the Phase-① draft Studio begins generating a home-page design + SEO audit + suggested new site structure from the saved URL Copy: chip stays "🎨 Dizájn készül" with a subtle progress shimmer · Look: animated chip · Where: card status chip Lab run started in Studio (scrape → SEO audit → structure → homepage generate); Gemini/DataForSEO spend incurred on this paying-intent lead Must NOT auto-send anything to the prospect; Lab kick is internal-only; no new Modal cron added NEW ENTRY
Type: Studio · icon: ⚙️ · label: "Dizájn generálás elindítva" · description: "Homepage dizájn + SEO audit + javasolt oldalstruktúra generálása folyamatban" · timestamp: now · initiated_by: system
Critique: Generation can take minutes; a single "készül" chip gives no sense of stage (scraping vs. SEO vs. generating) or ETA, so the rep can't tell if it'll be ready before the call.
Suggestion: Let the chip carry a sub-label that mirrors the Lab node ("SEO audit…", "Homepage generálás…") and a rough ETA. Pulled from Studio's existing run state — no new data needed.
3 (Automatic) generation finishes The chip flips to "Studio: kész — megnézhető" and the design becomes openable from the card Copy: chip "✅ Dizájn kész" · Look: sage/green chip + "Megnyitás Studióban" action · Where: card status chip + action row Studio run state → ready; status synced back to the pipeline (reflection, not copy) Must NOT mark ready before the homepage actually rendered; must NOT lose the SEO audit / structure artifacts NEW ENTRY
Type: Studio · icon: ✅ · label: "Dizájn elkészült" · description: "Homepage dizájn, SEO audit és oldalstruktúra elérhető a Studióban" · timestamp: now · initiated_by: system
Critique: "Kész" doesn't tell the rep WHAT is ready (just homepage? audit too?) right before they need it in a call.
Suggestion: Expand the ready chip on hover into a 3-item checklist ("✓ Homepage ✓ SEO audit ✓ Struktúra javaslat") so the rep knows exactly what they can show.

S3 — Booked on a red-❗ deal → NO auto-kick; saving a URL resumes the flow (failure / deferred)

Who: System + Mátyás  ·  When: A deal whose card carries the red ❗ (no website) gets its sales call booked. The Studio kickoff must be held back, not silently skipped or fake-run.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 The sales call is booked while the card still shows the red ❗ NO Studio project is created, NO Lab kick; instead the card prompts: "Add meg a weboldalt a Studio dizájnhoz" Copy: prompt "Weboldal szükséges a dizájnhoz" · Look: ❗ stays, plus an inline "Weboldal megadása" field · Where: card body Studio create/kick suppressed; deal flagged studio_deferred=true Must NOT auto-create a blank project; must NOT silently skip with no prompt; must NOT fake-run a design on a missing URL SYSTEM ENTRY
Type: Studio · icon: ⏸️ · label: "Studio dizájn elhalasztva" · description: "Foglalás megtörtént, de nincs weboldal — a dizájn generálás vár a weboldal megadására" · timestamp: now · initiated_by: system
Critique: The deferral is correct, but the rep might not connect "I have a booked call tomorrow" with "no design will be ready because of a missing URL" — the cost of the ❗ is now time-critical.
Suggestion: Escalate the ❗ to an amber "⏰ Dizájn nem készül el a hívásig — add meg a weboldalt" banner once a call is booked, so the urgency is explicit relative to the appointment date.
2 Mátyás pastes a valid website URL into the inline field and saves The ❗ clears and the normal S2 flow resumes automatically: project created + Lab kicked Copy: ❗ gone; chip flips to "🎨 Dizájn készül" · Look: red badge replaced by indigo chip · Where: card website_url saved; studio_deferred cleared; same create+kick as S2 fires Must NOT require re-booking; must NOT need the operator to manually create the project — the save alone resumes it NEW ENTRY
Type: Studio · icon: 🎨 · label: "Studio projekt létrehozva" · description: "Weboldal megadva — dizájn generálás elindítva" · timestamp: now · initiated_by: operator
Critique: After the rep pastes a URL there's a leap of faith that the deferred flow actually picked it up.
Suggestion: Confirm the resume explicitly: "✓ Weboldal mentve — dizájn generálás elindult" toast, so the rep sees the deferred state convert to an active run.

S4 — Phase-① draft openable from the card for the sales call (happy path)

Who: Mátyás  ·  When: The Phase-① design is ready and Mátyás is about to run / is running the sales call.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 Mátyás clicks "Megnyitás Studióban" / "Open in Studio" on the card Studio opens directly on this deal's project — homepage design, SEO audit, and suggested structure all there Copy: "Open in Studio" → opens project · Look: Studio project page in a new tab · Where: card action row Deep-link via stored project id; no re-auth dance for the rep Must NOT open a blank Studio home; must NOT 404 if the project exists No new touchpoint for viewing. The "Dizájn elkészült" entry from S2 remains the record. (Viewing is not a deal-state change, so it is intentionally not logged.) DROPPED (S41) per owner
UX suggestion (in-pipeline preview iframe drawer) dropped on owner instruction — not in scope.
2 Mátyás presents the homepage + SEO audit during the sales call A polished homepage design and a concrete SEO/structure story to impress the prospect Copy: SEO audit + structure suggestions · Look: Studio present view · Where: Studio (rep-controlled) No state change in the pipeline; Phase-① is a sales aid, not a client send Nothing is sent to the prospect automatically; the design is shown, not emailed, at this stage No touchpoint — presenting in a call is not a tracked pipeline event unless the rep logs the call (handled by the existing Log Call flow). DROPPED (S42) per owner
UX suggestion ("Dizájnt bemutattam a híváson" toggle) dropped on owner instruction — not in scope.

S5 — Status chip lifecycle (happy path)

Who: Mátyás  ·  When: Across the whole Studio life of a deal — the single chip is the rep's at-a-glance signal (Q4).

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 Mátyás glances at the card at any point in the Studio journey Exactly ONE Studio status chip reflecting the current state — never a cluster of Studio widgets Copy: one of: "🎨 Dizájn készül" / "📤 Elküldve" / "💬 Ügyfél véleményez" / "✅ Jóváhagyva" · Look: single chip, colour per state · Where: card status-chip slot Chip text derived from the synced Studio state (read-only reflection) Must NOT show two conflicting chips; chip must NOT be editable on the pipeline side (Studio owns the state) The chip mirrors history but is not itself a touchpoint. Each underlying transition (created / sent / commenting / approved) already logged its own entry in S2/S7/S8/S9. Critique: Four states in one chip means the colour alone must carry meaning; colour-blind reps or a crowded board could misread "sent" vs "approved".
Suggestion: Pair each state with a distinct icon AND colour (🎨 indigo / 📤 blue / 💬 amber / ✅ green) and keep the text label — never colour-only. Matches the touchpoint colour-coding so the board and history stay visually consistent.
2 Studio state changes on the Studio side (e.g. rep sends, client comments) The pipeline chip updates to match within a short delay — no manual refresh needed for the chip to be roughly current Copy: chip text follows the Studio state · Look: chip recolours · Where: card Studio → pipeline status sync (event/outbox or pull on board load); reflection only Must NOT require a Studio-side cron; must NOT let the chip go permanently stale No extra touchpoint for a chip refresh itself; the meaningful transitions are logged where they happen. Critique: If the sync is pull-on-load, a rep staring at the board won't see a client comment land until they refresh — the chip can silently lag reality.
Suggestion: Show a tiny "frissítve {n} perce" timestamp on hover, and refresh the chip on board focus, so the rep knows how trustworthy the chip currently is.

S6 — After the call: transcript saved into the CRM + auto-pushed into Studio (Phase ②) (happy path)

Who: System  ·  When: The sales call happened and a Fireflies transcript exists. The transcript is (a) saved into the CRM and (b) auto-pushed into Studio to feed Phase-② refinement (Q7). Owner requirement S61: both the full transcript AND the summary are stored inside collapsible toggles, in BOTH the touchpoint-history panel AND the 'Details' panel.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 (Automatic) the sales-call transcript becomes available after the call The transcript is saved into the CRM (this deal) AND pushed into the Studio project's intake; a summary is generated alongside the full transcript Copy: CRM-side "Hívás jegyzőkönyv" + "Összefoglaló"; Studio intake resource "Sales hívás jegyzőkönyv" · Look: classified resource card in Studio + saved transcript on the deal · Where: CRM deal (history + Details) AND Studio project intake panel Transcript + summary persisted on the deal (CRM); Pipeline → Studio POST /api/projects/{id}/resources {text, kind_hint:"transcript"}; classify chain runs in Studio Must NOT require the rep to copy-paste the transcript; must NOT push the warmup/no-show noise — only the real call transcript; must NOT push to Studio WITHOUT also saving it into the CRM NEW ENTRY
Type: Studio · icon: 📝 · label: "Hívás jegyzőkönyv mentve + átküldve" · description: "Sales-hívás jegyzőkönyv a CRM-be mentve és a Studio intake-be került (Phase ② finomításhoz)" · timestamp: now · initiated_by: system · Toggles in this entry: ▸ "Teljes jegyzőkönyv" (collapsible full transcript) · ▸ "Összefoglaló" (collapsible summary)
Owner requirement (S61): the call transcript MUST be saved into the CRM. BOTH the full transcript AND the summary are stored inside collapsible toggles (▸ expand/collapse), and they appear in BOTH the touchpoint-history panel AND the 'Details' panel — see row 2.
2 Mátyás opens the deal's touchpoint-history panel and/or the 'Details' panel In BOTH panels: two collapsible toggles — ▸ Teljes jegyzőkönyv (full transcript) and ▸ Összefoglaló (summary) — collapsed by default, expand on click Copy: toggle labels "Teljes jegyzőkönyv" / "Összefoglaló" · Look: disclosure-triangle toggles, body hidden until expanded · Where: (a) the call's entry in the touchpoint-history panel AND (b) the 'Details' panel of the deal Both panels read the SAME stored CRM transcript + summary (single source on the deal); no duplication of the underlying data Must NOT show the long transcript inline un-collapsed (it would flood the timeline); must NOT put the toggles in only one of the two panels; must NOT diverge the two copies — both render the same saved transcript/summary The history entry from row 1 IS where the history-panel toggles live (full transcript + summary). The 'Details' panel mirrors the same two toggles. No additional touchpoint is created for opening a toggle. Owner requirement (S61): both the full transcript AND the summary live inside toggles in BOTH the touchpoint-history panel AND the 'Details' panel — collapsible so the timeline/Details stay scannable while the full text is always one click away.

S7 — Dual "Send to client" button → AI-drafted modal, human reviews & sends (happy path)

Who: Mátyás  ·  When: The design is ready to go to the client; Mátyás sends the review link from EITHER the pipeline card OR inside Studio (Q6). Human gate is the whole point.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 Mátyás clicks "Küldés ügyfélnek" / "Send to client" — present on BOTH the pipeline card AND inside Studio A modal opens, pre-filled with an AI-drafted message + the client review link — NOT an immediate send Copy: AI-drafted Hungarian message + review URL · Look: editable modal, "Küldés" button at the bottom · Where: modal over the card / over Studio Studio GET /api/projects/{id}/links mints the review link; AI draft generated; nothing sent yet Must NOT auto-send on button click; the modal MUST appear first; AUTOSEND never flipped No touchpoint yet — opening the modal is not a send. The touchpoint is created only on the explicit "Küldés" in step 2. Critique: Two entry points (card + Studio) risk drift — the rep might send twice from two surfaces, or the two modals could differ in copy quality.
Suggestion: Both buttons must open the SAME modal/component with the same AI draft; once sent, both surfaces immediately reflect "📤 Elküldve" to prevent a double send.
2 Mátyás edits the draft if needed and clicks "Küldés" The message + review link is sent to the client; the chip flips to "📤 Elküldve"; Studio publishes the version + locks the client view Copy: chip "📤 Elküldve ügyfélnek" · Look: blue chip; modal closes with a success toast · Where: card status chip Send fires via the human-reviewed copy; Studio "Ügyfélnek küldés" publish runs (working → published, client view unlocks) Nothing sent without the explicit "Küldés" click; must NOT send a stale/empty draft; must NOT double-fire from the other surface NEW ENTRY
Type: Studio · icon: 📤 · label: "Elküldve ügyfélnek" · description: "Dizájn review link elküldve az ügyfélnek (jóváhagyott szöveggel)" · timestamp: now · initiated_by: operator
Critique: The send couples two big actions (email + Studio publish/lock) behind one button; if one half fails the rep may not know which.
Suggestion: Show a 2-line success state: "✓ Üzenet elküldve · ✓ Studio publikálva / ügyfél nézet feloldva". If either half fails, surface a precise "⚠️ Email ment, de a Studio publikálás nem" so the rep can recover the right half.

S8 — Client review loop stays in Studio (pipeline shows "client commenting" only) (happy path)

Who: Client + Mátyás  ·  When: The client opens the review link and comments; Studio runs its section-scoped edit loop. The pipeline only reflects the state — it never duplicates the comment UI.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 The client opens the review link and leaves comments in Studio On the pipeline, the chip flips to "💬 Ügyfél véleményez" — the comments themselves live only in Studio Copy: chip "💬 Ügyfél véleményez" · Look: amber chip · Where: card status chip Studio comment activity → status sync → pipeline chip; pipeline does NOT store the comments Must NOT reproduce Studio's comment overlay in the pipeline; must NOT lose the "commenting" signal NEW ENTRY
Type: Studio · icon: 💬 · label: "Ügyfél megjegyzést írt" · description: "Az ügyfél véleményezi a dizájnt a Studióban" · timestamp: now · initiated_by: client
Critique: "Ügyfél véleményez" doesn't convey volume or sentiment — 1 minor comment looks the same as 20 blocking ones, so the rep can't prioritise.
Suggestion: Let the chip carry a count badge ("💬 3") sourced from Studio's open-comment count, and on hover show the newest comment snippet. Still a reflection, not a duplicated UI.
2 Mátyás opens Studio to resolve comments + run section edits The full comment/revision loop in Studio (unchanged); the pipeline keeps showing "💬 Ügyfél véleményez" until approval Copy: Studio reviewer UI · Look: Studio (not pipeline) · Where: Studio project Studio section-scoped edits; client view locks "🔧 Feldolgozás alatt" during edits (existing Studio behavior) Must NOT advance the pipeline stage on its own while commenting/refining No pipeline touchpoint for each in-Studio edit — those belong to Studio's own history. The pipeline logs only the milestone transitions (sent / approved). Critique: The rep round-trips between two tools during the revision loop; the pipeline gives no nudge when the loop is taking too long (stalled deals).
Suggestion: If a deal sits in "💬 Ügyfél véleményez" beyond N days, surface a gentle "⏳ {n} napja véleményezés alatt" hint on the card so stalled reviews get a follow-up nudge.

S9 — Design approved → pulsing green card overlay + hover buttons (happy path)

Who: Client (approves in Studio) + Mátyás  ·  When: The client approves the design in Studio. The pipeline makes this VERY obvious but keeps stage advancement human-gated (Q5).

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 The client approves the design in Studio The deal card gains a glowing / pulsing GREEN overlay signalling "design approved" — impossible to miss on the board Copy: overlay label "✅ Dizájn jóváhagyva" · Look: pulsing green glow around the whole card · Where: card on the board Studio "approved" state → pipeline; overlay rendered; chip "✅ Jóváhagyva" Must NOT auto-advance the pipeline stage; the glow is a prompt for a human decision, not an action NEW ENTRY
Type: Studio · icon: ✅ · label: "Ügyfél jóváhagyta a dizájnt" · description: "Az ügyfél jóváhagyta a dizájnt a Studióban — készen áll a következő lépésre" · timestamp: now · initiated_by: client
Critique: A pulsing glow is great for grabbing attention but can become noise if several cards glow at once, and pure animation can be missed by reduced-motion users.
Suggestion: Respect prefers-reduced-motion (swap the pulse for a solid green ring + "✅ Jóváhagyva" badge), and cap simultaneous pulses so the board doesn't turn into a disco.
2 Mátyás hovers the glowing card Two buttons appear: "Move to next pipeline stage" and "Move to next pipeline stage + open in Studio" Copy: "Következő szakaszba" · "Következő szakaszba + Studio megnyitása" · Look: two buttons on hover over the green overlay · Where: card hover state Neither button has fired yet; advancement waits for the explicit click Buttons must NOT be hidden so deep they're undiscoverable; hover must reveal BOTH No touchpoint on hover. The advancement touchpoint is created only on the click (step 3). Critique: Hover-only actions are invisible on touch devices and easy to miss; a rep may not realise the glow is actionable.
Suggestion: Also expose the two actions in the card's normal action row (not hover-only) when approved, and keep the hover affordance as a fast path. Add a tooltip on first appearance explaining the two-option choice.
3 Mátyás clicks one of the two buttons The deal advances to the next pipeline stage (and, for option 2, Studio opens too); the green overlay clears Copy: card now in the next stage column · Look: glow removed, normal card · Where: board Stage advanced by the human click; Studio advance (presented→won) reflected if applicable Stage must NOT have moved before the click; option 2 must NOT advance twice or open the wrong project NEW ENTRY
Type: Státusz változás · icon: 🔀 · label: "Áthelyezve: {előző} → {következő}" · description: "Dizájn jóváhagyás után, kézi továbbléptetés" · timestamp: now · initiated_by: operator
DROPPED (S93) per owner
UX suggestion (persist non-glowing "✅ Jóváhagyva" chip after advancement) dropped on owner instruction — not in scope.

S10 — Lost deal → Studio project auto-archived (guardrail)

Who: Mátyás + System  ·  When: A deal that has a linked Studio project is marked lost in the pipeline (Q8). Cleanup must archive, never delete.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 Mátyás marks the deal as Lost The linked Studio project is automatically archived; the chip clears / shows "🗄️ Studio archiválva" Copy: chip "🗄️ Studio archiválva" · Look: muted grey chip · Where: card status chip Pipeline → Studio archive call on the linked project (non-destructive) Must NOT hard-delete the Studio project or its versions; must NOT leave an orphan active project SYSTEM ENTRY
Type: Studio · icon: 🗄️ · label: "Studio projekt archiválva" · description: "A lead elveszett — a kapcsolódó Studio dizájn projekt archiválva (nem törölve)" · timestamp: now · initiated_by: system
DROPPED (S101) per owner
UX suggestion (hover "Visszaállítás" un-archive action) dropped on owner instruction — not in scope.

S11 — Won deal → delivery in Studio + Cloudflare publish; ONE unified pipeline view (no separate handoff state) (happy path)

Who: Mátyás + System (Dani later)  ·  When: The deal is won (deposit/payment). There is NO separate "Dev handoff" pipeline state. The old dev process is REPLACED by the ClientsFlow Studio review tool: from Studio a project is published via the Cloudflare API (already built). Pipeline management is unified — one pipeline view. When Dani is later brought in, he sees the same pipeline view and simply knows which pipeline stage he must watch.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 The deal is won; delivery continues IN the same pipeline view — no separate handoff stage is created The won deal's card keeps its approved-design link; delivery happens through the Studio review tool (no new "Dev handoff" column/task spawns) Copy: "Megnyitás Studióban — jóváhagyott dizájn" stays on the card · Look: the SAME pipeline card, advanced to the won/delivery stage · Where: the single unified pipeline board No studio_handoff stage or separate handoff task; the approved Studio project id stays bound to the deal; delivery is driven from Studio Must NOT create a separate dev-handoff pipeline state or a parallel task list; must NOT split delivery out of the pipeline view; must NOT link to an unapproved/older version NEW ENTRY
Type: Studio · icon: 🎯 · label: "Megnyerve — szállítás a Studióban" · description: "A deal megnyerve; a szállítás a ClientsFlow Studio review eszközben folytatódik (nincs külön handoff szakasz)" · timestamp: now · initiated_by: system
Owner model (S11): the dev process is the Studio review tool — there is no separate handoff stage; pipeline management is unified into one view.
2 From Studio, the project is published live The approved design is published to the web via the Cloudflare API (already built); the live URL is reflected back on the deal Copy: chip/marker "🌐 Publikálva" + live URL · Look: published-state marker on the card · Where: card status + Details panel Studio → Cloudflare publish (existing capability); resulting live URL stored on the deal and reflected in the pipeline Must NOT require a manual out-of-band deploy; must NOT publish an unapproved version; must NOT lose the live URL on the deal record NEW ENTRY
Type: Studio · icon: 🌐 · label: "Publikálva (Cloudflare)" · description: "A jóváhagyott dizájn élesítve a Cloudflare API-n keresztül — {live_url}" · timestamp: now · initiated_by: operator
Owner model (S11): publishing happens from Studio via the already-built Cloudflare API — the pipeline only reflects the published state + live URL, it does not re-implement publishing.
3 (Later) Dani is brought in to help with delivery Dani opens the same pipeline view — no special handoff surface; he simply watches the pipeline stage he is responsible for Copy: same board, same cards · Look: identical unified pipeline view · Where: the single shared pipeline board Dani has access to the same pipeline (no separate handoff app/view); his focus is a known pipeline stage, not a bespoke handoff task Must NOT build a second, Dani-only view or a parallel handoff board; must NOT fragment the pipeline into separate sales/delivery tools No new touchpoint for Dani viewing the board. The won/published entries above remain the delivery record. Owner model (S11): Dani shares the same single pipeline view and just knows which stage to watch — unified pipeline management, one source of truth.

S12 — Manual reschedule in Google Calendar → logged as a reschedule touchpoint (source=manual) (owner task / guardrail)

Who: Mátyás (in Google Calendar) + System  ·  When: A meeting (sales call / booked appointment) is manually moved to a new time in Google Calendar (not via the lead's self-booking flow). Owner-added requirement (treated as signed): every such reschedule MUST appear in the deal's touchpoint history.

#You doYou should see Element that changes
copy · look · where
What changes underneathMust NOT happen 🕓 Touchpoint history💡 UX critique + suggestion
1 Mátyás drags / edits a booked meeting to a new date-time directly in Google Calendar The deal's touchpoint history gains a reschedule entry recording the old → new time; the card reflects the updated meeting time Copy: "Időpont áthelyezve: {régi} → {új}" · Look: 🔁 reschedule entry in the history panel; updated meeting time on the card · Where: deal touchpoint-history panel + card meeting-time field Google Calendar change detected (existing gcal_watch); a reschedule touchpoint written with source=manual, old_time + new_time captured; deal's stored meeting time updated Must NOT silently change the meeting time with no history entry; must NOT label a manual move as a lead self-reschedule; must NOT create a duplicate booking touchpoint instead of a reschedule NEW ENTRY
Type: reschedule · icon: 🔁 · label: "Időpont áthelyezve (kézi)" · description: "A találkozó kézzel áthelyezve a Google Naptárban: {régi időpont} → {új időpont}" · timestamp: now · initiated_by/source: manual
Owner requirement (added): a manual Google-Calendar reschedule MUST be logged as a reschedule touchpoint with source=manual in the touchpoint history — so the timeline never loses a manually-moved meeting and follow-up logic sees the real (new) time.
🕓 Touchpoint history — design principles for the Studio↔Pipeline integration:
Every cross-system milestone produces exactly one pipeline touchpoint: (1) a human-readable type label under a "Studio" family (never a raw API/state string), (2) an icon mapping to the milestone (🎨 created · ⚙️ generating · ✅ ready/approved · 📤 sent · 💬 commenting · 🗄️ archived · 🎯 won/delivery · 🌐 published · 🔁 reschedule), (3) a description with the key delta, (4) a Budapest-local timestamp, and (5) an initiated_by / source field (system / operator / client; reschedules use source=manual). In-Studio micro-events (each section edit, each comment) belong to Studio's OWN history — the pipeline logs only the milestones, so the card's timeline stays scannable. System/auto entries render muted grey. Long bodies (e.g. the S6 call transcript + summary) live inside collapsible toggles on the history entry AND in the deal's 'Details' panel.
💡 UX themes across all scenarios:
(1) One chip, never a widget cluster — the whole Studio life of a deal must read from a single, icon+colour status chip on the card face. (2) Silent cross-system steps are invisible — auto-create, auto-kick, transcript push, and archive each need a brief positive confirmation (toast or chip change) so the rep trusts the integration is working. (3) The human gate must be felt, not just enforced — the "Send to client" modal and the approval glow + explicit hover buttons exist so the rep always makes the send/advance decision deliberately. (4) The website URL is the load-bearing input — surface its presence/absence loudly (red ❗, click-to-fix) because the entire Phase-① auto-flow depends on it. (5) Reflect, don't duplicate — the pipeline mirrors Studio state (chip, glow, history milestones) but never re-implements Studio's comment/edit UI; Studio stays the single source of truth for the design.
Sign-off — acceptance oracle. By signing, Sarudi Mátyás locks scenarios S1–S12 and the invariants above as the acceptance answer key for the Studio ↔ Pipeline integration. No code is built or deployed before this signature.
Sarudi Mátyás  ✔ Signed · 2026-06-25