SKILL.md
<EXTREMELY-IMPORTANT> This skill instruments a launch for attribution. Non-negotiable rules:
- NO PII IN LINKS OR EVENTS. Never put emails, names, or identifiers in UTM parameters or event params.
Honor the project's consent/cookie/GDPR setup; if consent gating exists, don't bypass it.
- ONE CONSISTENT SCHEME. Define the UTM convention once (lowercase, documented), and use it for every
launch link across listing, outreach, and social — inconsistent tags fragment the report.
- DON'T BREAK EXISTING ANALYTICS. Detect the project's current stack first; extend it, never duplicate a
tag manager or double-fire page_view. If GA4 isn't present, propose adding it — don't assume it.
- MEASURE DURABLE OUTCOMES. Track the funnel to signup and activation, not just visits/upvotes — the
launch's value is the emails and activated users it produces, not the vanity spike.
- VERIFY THE SNIPPET AGAINST CURRENT DOCS. GA4/gtag specifics change; confirm event syntax against the
current Google docs (use a docs/find-docs skill) before pasting code, and adapt to the real stack.
- NEVER FABRICATE NUMBERS. Set up the measurement; report only what the tools actually show.
- WRITE THE KIT TO DISK at
.ulpi/launch/<channel>/analytics.md(create the directory if needed) — a
durable, paste-ready artifact, not advice that scrolls away. </EXTREMELY-IMPORTANT>
launch-analytics
Inputs
$request: the launch source and the site/stack. When invoked by a launch skill, the caller passes the
channel (the hyphenated on-disk launch slug, e.g. product-hunt — this is the output dir), the utm_source GA value (e.g. producthunt, no hyphen), and the target links. Standalone, ask for the source, the site URL, and the current analytics stack (default the channel slug from the source).
Goal
A launch attribution kit written to .ulpi/launch/<channel>/analytics.md: a consistent UTM scheme, a per-link UTM map, the GA4 (or existing-stack) event plan for the conversion funnel, the wiring snippets, and a validation + read-out plan.
Step 0: Resolve source & stack
Determine the channel (output dir slug, e.g. product-hunt) and the utmsource GA value (e.g. producthunt) — keep them distinct — and detect the current analytics: look for GA4/gtag.js, Google Tag Manager, Plausible/Fathom/PostHog, or none. Success criteria: the channel, the utmsource, and the real analytics stack are known.
Step 1: Define the UTM scheme & link map
Load references/utm-and-events.md. Set a single convention (lowercase, hyphenated) and produce the UTM map — every launch link tagged by where it appears:
utm_source= the platform (e.g.producthunt)utm_medium= the placement (e.g.launch,maker-comment,email,social)utm_campaign= the launch (e.g.ph-launch-2026-06)utm_content= the specific link (e.g.x-thread,wave1-email,gallery-cta)
When invoked by a launch skill, hand the tagged links back to the caller (listing/outreach) so every link is attributable; standalone, the tagged-link map in the written artifact is the deliverable for the user to apply. Success criteria: one scheme, and a tagged link for every place a link appears.
Step 2: Map the funnel & events
Define the conversion funnel and the events that mark each step — typically pageview (automatic) → signup → a key activation event (the first real value moment). Mark sign_up and activation as conversions/key events in GA4. Success criteria: each funnel step has a named event and the key ones are flagged as conversions.
Step 3: Wire it
Provide the tracking snippets for the real stack (GA4 gtag('event', …) or the equivalent), verified against current docs, plus where to add them. Keep it minimal and consent-aware. Success criteria: copy-paste wiring that fits the stack and doesn't double-fire.
Step 4: Validate & read out
Give a validation step (GA4 DebugView / Realtime to confirm events fire with the right params) and a simple read-out plan: where to see launch-day traffic by utm_source, signups by source, and the funnel conversion. Success criteria: the user can confirm tracking works before launch and read the result after.
Step 5: Persist the kit
Write everything above to .ulpi/launch/<channel>/analytics.md (creating the directory if needed): the UTM scheme + tagged-link map, the funnel/events plan, the wiring snippets, and the validate/read-out steps. The <channel> is the hyphenated launch slug the caller passes (e.g. product-hunt), distinct from utm_source. Success criteria: a durable, paste-ready analytics.md exists on disk.
Guardrails
- No PII in UTMs or event params; honor consent/GDPR.
- One documented scheme; lowercase; reused across every link.
- Extend the existing stack; don't double-instrument or break consent gating.
- Track signups/activation, not just visits; durable outcomes over vanity.
- Verify GA4/gtag syntax against current docs; adapt to the real stack.
- Report only real numbers; never fabricate.
When To Load References
references/utm-and-events.md— the UTM convention + per-link map, the GA4 event taxonomy and
conversion setup, the wiring snippet pattern, and validation (Steps 1–4).
Output Contract
Write / return .ulpi/launch/<channel>/analytics.md:
- the UTM scheme + a tagged-link map for every launch link
- the funnel and its events, with
sign_up/activation flagged as conversions - the wiring snippet(s) for the real stack (verified against current docs)
- a validation step (DebugView/Realtime) and a read-out plan (traffic/signups by source)