Funnel analytics operations
The public funnel uses two complementary sources. Vercel Web Analytics provides consented traffic and page behaviour. The Cloudflare Worker stores consented, first-party funnel events in D1 and joins them to a verified Paddle purchase through an anonymous session identifier. Neither system receives form email addresses or buyer names as analytics properties.
Event meanings
page_view_starter_landing: a consented visit to the main product landing.lite_request_accepted: Resend accepted the requested Lite delivery email. This does not mean marketing consent was confirmed.marketing_subscription_confirmed: the visitor completed the double opt-in confirmation.validation_choice: a consented response for backend, frontend or complete package research.checkout_created: the server created a pending order before Paddle checkout.purchase_verified: a signed Paddle webhook verified a completed transaction.
Clicks and page views are directional. purchase_verified is the only revenue conversion. A thank-you URL, browser redirect or checkout creation never counts as a sale.
Attribution and privacy
The browser retains an anonymous session ID and the allowed source/campaign only after optional measurement consent. Allowed source values are chatgpt, google, linkedin, organic and other. Arbitrary query parameters, advertising click IDs, email addresses and names are excluded. Revoking consent stops later collection and removes the local session identifier. D1 analytics events are deleted after 90 days by the scheduled Worker cleanup.
Reporting
From the repository root run:
./scripts/funnel-report.ps1
The report returns aggregate events and distinct sessions by source/campaign, validation choices, and the funnel from landing to verified purchase. Keep raw database access restricted. Do not export individual session rows for marketing outreach.
Interpret small samples cautiously. A high click-through rate can coexist with zero qualified leads. Do not choose a product direction from a handful of responses; use the survey to decide which interview or prototype to test next.