Pipes Demo — rebuild prompt (rough scaffold)

Komu je tento prompt určen: Cowork agent, který dostane tenhle dokument jako self-contained zadání. Zadání popisuje, jak přestavět stávající demo stránku /pipes/demo na novou 9-krokovou tour podle screen recordingu

Cíl: rough scaffold, ne pixel-perfect finál. Nejprve hrubá stavba všech 9 kroků a 6 nových obrazovek, pak budeme iterovat. Nesnaž se ladit jednotlivé pixely v této iteraci — dostat všechny kroky průchodné je důležitější.


0. Kontext (přečíst před prací)


1. Persona & framing tour

Tour je vedená z pohledu data engineera. Persona statement (přebíráme doslovně z audio narace videa) drží celou tour pohromadě:

„As a data engineer, I need to collect events from my website, identify user profiles if possible, and send enriched data to Meta Conversion API.“

Tahle věta je první welcome tooltip (Step 1) a všech zbývajících 8 kroků je odpověď na ni.


2. Stávající scénář vs. nový scénář (klíčové rozdíly)

Stávající (step-1, step-2)Nový (step-1step-9)
Výchozí stav workspaceprázdný (Piper vytvoří source)už nastavený workspace (1 source + 3 pipes + 3 destinations)
Source názevwebsite.com (vytvořený Piperem)website.com (existující)
Piper aktivitacelé demojen Step 5 (transform function)
HotspotySend → Accept → CopyUX click-through diagramem + Piper jen v 5b–5d
Outrononekonzultační formulář (HubSpot embed)

Důležité: zachovat website.com jako jediné jméno sourcu. Ve videu se objevuje SSE Website a Bank Websiteignoruj to, je to artefakt bankovní instance, ve které kolega točil.


3. Výchozí stav workspace (toto je úvodní obrazovka tour)

Main panel — Dashboard (data-screen="dashboard")

  1. Pipes diagram — 3 sloupce (SOURCES / PIPES / EVENT DESTINATIONS).
  2. Last hour at a glance — Updated HH:MM pill (živý čas), 4 stat tiles: Events Received 0, Events Sent 0, Routing Rate 0%, Errors 0 (Errors ikona destructive red — stávající).
  3. Events by event type chart — empty state, jedna 0 Y-axis label, 10 dynamických timestamps.
  4. Routed events by destination chart — totéž.
  5. NOVÁ SEKCE: Latest events — pod grafy. Nadpis Latest events + subtitle Showing 10 of the most recent 100 events. + search input vpravo. Pod tím 10 řádků, každý: timestamp 20 May at 13:24 + source pill website.com (purple) + event type pill (např. scroll_depth, page_view) + event ID monospace + caret šipka. První řádek expandovaný s JSON payloadem v monospace bloku (context, user_id, page_url, device_id, client_ids, page_title, session_id, page_referrer, custom_payload depth_percent: 90, browser_metrics). Mock data — nemusí být konzistentní s reálným SDK.

Right panel — Piper


4. Tour mechanika (rozšíření stávající state machine)

Phases

Současné phases (typing → ready → sent → awaiting-approval → approved → source-detail → awaiting-copy → step-2-complete) odstraň a nahraď novým modelem:

let currentStep = 1;  // 1..9
let subPhase = null;  // for Step 5: 'enter' | 'piper-ready' | 'piper-sent' |
                       // 'piper-awaiting-approval' | 'piper-approved' | 'done'

Spotlight

Stav po Prev

Important: Step 5 jednou dokončený zůstává dokončený. Pokud uživatel dá Prev zpět na Step 5, transform funkce se neresetuje — editor zůstává naplněný. Piper se znovu neotevírá. Tooltip držený nad Transform editorem je verze 5d („One event can be routed to multiple destinations…“).

Stejně pro všechny ostatní kroky: jednou expandované sekce, otevřené taby atd. zůstávají v posledním stavu.


5. Krok po kroku — kompletní spec

Step 1 — Intro (skippable welcome tooltip)

Hotspot: žádný. Vizuál: maketa pod overlay s filter: blur(4px) + rgba(12,12,24,0.45) dim. Centrovaný card s tooltip copy. Tooltip copy:

Meet Meiro Pipes.

"As a data engineer, I need to collect events from my website,
identify user profiles if possible, and send enriched data to
Meta Conversion API."

This tour walks through exactly that — in 8 steps.

[Start tour]   [✕ skip]

Akce:


Step 2 — Source: prepared data source + SDK

Banner: Step 2 of 9 — Source Hotspot: karta website.com v sloupci SOURCES. Tooltip (kotva napravo od karty):

We start with collecting events from the website.
For this we have a prepared data source connected to the Meiro
SDK — it comes with prepared event types like page_view,
form_start, form_submit, and many more.

Mikrointerakce: spotlight kolem website.com karty, ostatní pipes a destinations dimovat na opacity: 0.4. Propojené pipes (všechny 3 tady)

Akce uživatele: klick na website.com → přechod na Source detail page.


Step 3 — Event Types

Banner: Step 3 of 9 — Event Types

Nová obrazovka: Source detail (data-screen="source-detail")

Recykluj stávající source detail obrazovku, uprav source name na website.com a doplň novou sekci Event Types:

Layout shora dolů:

  1. ← Back to Sources link (top-left)
  2. Hlavička: website.com title (24px/700), URL pill https://sse-demo.eu1.pipes.meiro.io/collect/website-com (mono font, purple/5% bg), chips row (Enabled zelená + Template web-sdk v2026-05-15 šedá), 58×28 dot-grid SVG + 0 events in the last hour, vpravo Docs / Disable / Delete buttons.
  3. Connected Pipes card: 3 řádky (website.com to Meta CAPI to Meta CAPI chip, Enabled / website.com to Google Ads to Google Ads chip, Enabled / website.com to Sklik API to Sklik API chip, Enabled).
  4. Pipes Tag (mpt.js) card: nadpis + popis (s inline code chips event a set) + Show SDK Docs button vpravo. Subline „SDK snippets and command reference are hidden. Expand to view.“
  5. NOVÁ SEKCE: tabs row Event Types (active) | Data Mapping | Tracking Setup | History + caption Define the types of events this source can receive. vlevo, Managed by template. chip vpravo.
  6. Event list (6 řádků, každý jako card): page_view, click, form_start, form_submit, scroll, file_download. Každý event card má:

Hotspot: tlačítko View Rules u eventu form_submit. Tooltip (kotva nad form_submit kartou):

These event types are important.
They define not just what data is collected, but also the
rules for identity resolution and how profiles get built.
Open form_submit to see.

Akce uživatele: klick View Rules u form_submit → otevře se modal.


Step 4 — Form submit & identity stitching

Banner: Step 4 of 9 — Identity Resolution

Nový komponent: Validation Rules modal

Hotspot: sekce Identity Resolution Rules (spotlight kolem tabulky). Tooltip (kotva napravo od tabulky):

Look at form_submit.
Besides other attributes, we collect user_id, email, phone, and
device_id — and we actively use all of them in the identity
resolution process to build the user profile.

Akce uživatele:


Step 5 — Pipe & Transform Function (s Piperem)

Banner: Step 5 of 9 — Transform

Tenhle krok je nejsložitější — má 4 sub-fáze. Každá sub-fáze má svůj tooltip + případně hotspot.

5a — Click na pipe v diagramu

(Předpoklad: tour je teď zpět na dashboard, modal je zavřený.)

Hotspot: karta website.com to Meta CAPI v sloupci PIPES. Mikrointerakce: hover/spotlight nad pipe dimuje ostatní 2 pipes + 2 destinations (Sklik, Google Ads), source website.com a destination Meta CAPI zůstávají plné. Tooltip:

While we collect events, the next step is to transform them.
Each pipe converts events to the shape the destination expects —
Meta CAPI, Google Ads, anywhere else. Let's open one.

Akce uživatele: klick → přechod na Pipe configuration page.

5b — Piper sub-step (Piper se aktivuje)

Nová obrazovka: Pipe configuration (data-screen="pipe-config")

Layout:

  1. Hlavička: website.com → Meta CAPI (dva chips se šipkou mezi: website.com purple chip + arrow-right icon + Meta CAPI orange-ish chip).
  2. Enabled chip + Docs / Disable / Delete buttons vpravo.
  3. Tabs row: Configuration (active) | History.
  4. Secrets card (collapsed): nadpis Secrets + caption Select which secrets to make available via the secrets object. Manage secrets in Operations > Secrets. + collapse chevron.
  5. Transform Function card. V 5b je editor PRÁZDNÝ — placeholder:
    No transform function defined yet.
    Ask Piper to write one for you, or write it manually.

Piper panel: v okamžiku přechodu na tuhle obrazovku se Piper panel automaticky rozbalí z idle stripu (animace ~250ms). Rainbow glow zesílí.

V Piper input boxu se automaticky natypuje (typing animation, ~40 ms per character) prompt:

Write a transform function for Meta Conversion API. Map our event
names (page_view, add_to_cart, begin_checkout, purchase, view_item,
generate_lead, sign_up) to Meta's names, and hash email and phone
with SHA-256.

Po dotypování: subPhase = 'piper-ready'. Send button glow.

Hotspot: Send button v Piper input boxu. Tooltip (kotva nad Piperem):

You don't have to write transforms by hand.
Piper drafts them from a short description. Hit Send.

Akce uživatele: klick Send → user message přibude do threadu, glow z Send button zmizí, subPhase = 'piper-sent'.

5c — Piper response + proposal card

Po subPhase = 'piper-sent' (~600 ms delay simulující „thinking“), Piper postupně vyplivne response v threadu:

Here's a draft. Maps your event names to Meta's standard ones,
hashes email and phone with SHA-256, and enriches each event with
profile attributes (all_email_addresses, primary email & phone)
from Meiro profiles.

Pod tím proposal card (recykluj styly approval cardu, který v demo.astro máš pro Step 2 původního demo):

subPhase = 'piper-awaiting-approval'. Accept button glow.

Hotspot: Accept button.

Akce uživatele: klick AcceptsubPhase = 'piper-approved'.

5d — Transform funkce se objeví, Piper se schová

Po Accept:

  1. Pill v proposal cardu se přepne na APPROVED (jako stávající).
  2. Krátká delay (~300 ms).
  3. Transform Function editor se naplní JS kódem (read-only). Použij JS, který už máme v původním demo (recykluj eventMapping, hash helper, plný transform({ events, profiles, secrets })). Syntax highlighting tokens (.tok-t, .tok-s, .tok-p, .tok-b) už jsou v demo.astro.
  4. Piper panel se sbalí zpět do idle stripu (animace).
  5. subPhase = 'done'.

Tooltip (kotva na Transform Function editor):

One event can be routed to multiple destinations.
The transform function can also enrich events — here Piper added
hashed profile data (SHA-256 email + phone) before the event
leaves Pipes.

Akce uživatele: klick Next → návrat na dashboard, currentStep = 6.


Step 6 — Destination & Send Function

Banner: Step 6 of 9 — Destination

6a — Click na destination v diagramu

(Předpoklad: dashboard.)

Hotspot: karta Meta CAPI v sloupci EVENT DESTINATIONS. Mikrointerakce: hover dimuje ostatní 2 destinations + 2 nesouvisející pipes. Tooltip:

Destinations close the loop.
Let's see how the outbound side of Meta CAPI is wired.

Akce uživatele: klick → přechod na Destination page.

6b — Destination page

Nová obrazovka: Destination detail (data-screen="destination-detail")

Layout:

  1. Hlavička: Meta CAPI title + Docs / Disable / Delete buttons.
  2. Connected Pipes card: 1 řádek website.com to Meta CAPI from website.com chip, Enabled zelená chip vpravo.
  3. Tabs row: Configuration (active) | History.
  4. Secrets card (collapsed).
  5. Authorization card: nadpis + caption Attach an OAuth authorization to expose a fresh access token via the secrets object. Manage authorizations in OAuth. + sub-line No OAuth authorizations yet. Create one from Authorizations to attach it here.
  6. Send Function card. Editor vyplněný mock JS kódem pro Meta CAPI send function. Použij toto jako mock content (syntax highlighted):
    /**
     * Meta Conversions API (CAPI) send function.
     * Expectations: pixel_id and meta_access_token must be stored in Secrets.
     */
    async function send({ events, params, secrets }) {
      const pixelId = secrets.meta_pixel_id;
      const accessToken = secrets.meta_access_token;
      const url = `https://graph.facebook.com/v19.0/${pixelId}/events?access_token=${accessToken}`;
    
      const payload = {
        data: events.map(event => ({
          event_name: event.event_type,
          event_time: Math.floor(new Date(event.event_time).getTime() / 1000),
          action_source: "website",
          user_data: event.user_data,
          custom_data: event.event_payload,
          event_source_url: event.url,
          event_id: event.event_id
        }))
      };
    
      const response = await fetch(url, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(payload)
      });
    
      return { ok: response.ok, status: response.status };
    }

Hotspot: Send Function editor card. Tooltip:

The destination definition lets us write a send function fully
customised to whatever sits on the other side — REST, webhook,
Graph API. Credentials come from Secrets, never from the code.

Akce uživatele: klick Next → návrat na dashboard.


Step 7 — Latest events

Banner: Step 7 of 9 — Monitor events

Kontext: dashboard, scroll dolů na Latest events sekci (auto-scroll).

Hotspot: první (rozbalený) řádek Latest events listu. Tooltip (kotva nad expandovanou JSON sekcí):

Meiro Pipes give full transparency to event ingestion.
We immediately monitor what events are coming in — every payload,
every identity, in real time.

Akce uživatele: klick Next → tour pokračuje.

(Note: Latest events sekce už existuje od Step 0 jako součást dashboardu. V tomto kroku se na ni jen scrolluje a zvýrazňuje.)


Step 8 — Errors

Banner: Step 8 of 9 — Monitor errors

Mikrointerakce: v sidebaru se automaticky rozbalí skupina Monitoring (Health / Errors).

Hotspot: položka Errors v sidebaru. Tooltip (kotva napravo od sidebaru):

And the same transparency for failures.
Validation errors, OAuth failures, deploy errors in send functions
— they all surface here, by source, by category, on a timeline.

Akce uživatele: klick Errors → přechod na Monitoring > Errors obrazovku.

Nová obrazovka: Monitoring Errors (data-screen="errors")

Layout:

  1. Hlavička: Errors.
  2. Top chart — sloupcový graf, X osa: 10 timestamps (14:06 → 15:04, 3min interval). Kategorie pod grafem v legendě:
  3. Filter Errors card: search input + dropdown All + 2 datetime input Since / Until (placeholder values 20 / 05 / 2026, 12:30).
  4. Error list — 3 řádky každý jako card:

(Po Step 8 zůstáváme na Errors obrazovce — Step 9 outro nepřesouvá uživatele zpět.)


Step 9 — Outro: consultation form

Banner: Step 9 of 9 — Want to try it on your data?

Vizuál: maketa (Monitoring > Errors stránka) zůstává v pozadí pod filter: blur(4px) + rgba(12,12,24,0.45) dim overlay. Centrovaný card s formulářem.

Form embed: recykluj HubSpot embed ze stránky /live-demo. Najdeš ho v src/layouts/InteractiveDemoLayout.astro:

<script src="https://js-eu1.hsforms.net/forms/embed/144634033.js" defer is:inline></script>
<div class="hs-form-frame" data-region="eu1" data-form-id="072e1e0d-7d71-4cf4-8124-d73a94a3b4a4" data-portal-id="144634033"></div>

Wrapuj do cardu se stejným stylingem (form-card třída v InteractiveDemoLayout.astro má kompletní CSS — recykluj selektory).

Card copy:

That's Meiro Pipes in 8 steps.

Want to see it on your own data? Tell us about your stack and
we'll set up a working pipeline together.

[ Form embed ]

[✕ close]

Akce:


6. Vizuální & technické konvence

Tokens & CSS

Astro parser gotchas

Resizer & Piper shell

Zachovat stávající strukturu:

Auto-scroll v Piperu

Stávající MutationObserver v demo.astro zachovat. Aplikuje se i na nový Step 5b–5c thread.


7. Co odstranit ze stávajícího kódu

Zachovat:


8. Implementační pořadí (doporučené)

  1. Cleanup: odstraň stávající Step 1/Step 2 flow z demo.astro. Nahraď nový currentStep machine s 9 kroky a stubs goToStep(n).
  2. Banner: uprav popisek na Step N of 9 — <name>. Prev/Next funkční s mapping na goToStep.
  3. Workspace state: rename SSE Website / Bank Websitewebsite.com všude. Doplň 3 pipes + 3 destinations v diagramu.
  4. Hover highlight v diagramu (Step 2 / 5a / 6a).
  5. Step 1 intro overlay (blur backdrop, centrovaný card, Skip).
  6. Step 3: doplň Event Types sekci na Source detail.
  7. Step 4: Validation Rules modal.
  8. Step 5 (full): Pipe configuration obrazovka + Piper sub-flow + Transform Function naplnění + Piper collapse.
  9. Step 6: Destination detail obrazovka + Send Function editor.
  10. Step 7: Latest events sekce na dashboardu + auto-scroll + spotlight.
  11. Step 8: Monitoring > Errors obrazovka (graf placeholder + filter card + error list).
  12. Step 9: Outro overlay + HubSpot form embed.
  13. State persistence: Step 5 transform fill nereset při Prev. Otevřené sidebar groupy nereset.
  14. Validace: bun run typecheck && bun run lint.

Cíl této iterace je proklikatelnost end-to-end. Pixel-perfect polish dodělám potom.


9. Acceptance criteria (rough scaffold)

Hotová rough stavba = splňuje toto:


10. Co NEDĚLAT


11. Reference materials


Konec promptu. Pokud něco není jasné, zeptej se před implementací — radši jedna otázka teď než 9 kroků hotových špatně.