---
name: product-hunt-launch-day-cockpit
description: "Every hour on launch day: Product Hunt rank and votes, Hacker News rank, Reddit score, GitHub stars, and the visits, sign-ups and payments each one sent. Use when the user asks for this, or when it runs on a schedule."
---

# Launch day cockpit: Product Hunt, Hacker News, Reddit, analytics and sales

Every hour on launch day: Product Hunt rank and votes, Hacker News rank, Reddit score, GitHub stars, and the visits, sign-ups and payments each one sent.

On launch day a founder has six tabs open: the Product Hunt page, the Hacker News thread, a Reddit post, GA4 Realtime, the GitHub repo and Stripe. Each one shows its own number, and none of them answers the question that decides where to spend the afternoon: which channel is sending people who sign up?

Every hour the agent reads all six, puts each channel's public signal (rank, votes, points, stars) on one clock with the visits, sign-ups and payments that came from it, and lists the Product Hunt comments still waiting for a maker reply. It runs for one day; remove the routine when the launch is over.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Product Hunt developer token in `PRODUCTHUNT_TOKEN` and the launch's slug; the HN item ID and Reddit post URLs once they exist (or the launch URL to search for).
- A GA4 `sign_up` event with Viewer on the property, a Stripe checkout that stores `utm_source` (or `ref`) in Checkout Session metadata, and `gh` signed in for the star count.
- A routine that runs every hour on launch day only. Delete it, or set its schedule to off, when the day ends.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Read the Product Hunt launch** (Product Hunt): POST to `https://api.producthunt.com/v2/api/graphql` with `post(slug: "<slug>") { votesCount commentsCount dailyRank makers { id } comments(first: 50, order: NEWEST) { edges { node { id body createdAt userId replies(first: 20) { edges { node { userId } } } } } } }`. A top-level comment not written by a maker waits for a reply when no reply's `userId` belongs to a maker. Cross-check the rank with `posts(postedAfter: <today 00:00 Pacific>, order: RANKING, first: 20)`.
2. **Read Hacker News and Reddit** (Hacker News): Find the HN story with `https://hn.algolia.com/api/v1/search_by_date?query=<domain>&restrictSearchableAttributes=url&tags=story`, then `GET /v0/item/<id>.json` for `score` and `descendants`; its rank is its position in `/v0/topstories.json` (1 to 30 is the front page). For Reddit, `GET /api/info?url=<launch URL>` or the post IDs you named, for `score` and `num_comments`.
3. **Get visits, sign-ups, stars and payments** (Google Analytics): GA4 `runReport` for today with `dimensions: ["dateHour", "sessionSource"]` and `sessions`, plus `eventCount` filtered to `eventName == "sign_up"` (the Realtime API has no source dimension). GitHub: `gh api repos/{owner}/{repo} --jq .stargazers_count`. Stripe: Checkout Sessions with `status=complete` created today, with `metadata.utm_source` and `created`.
4. **Put every channel on one clock**: Convert all timestamps to Pacific time (Product Hunt's day) and bucket by hour. Map sources to channels by domain: `producthunt` to Product Hunt, `ycombinator` to Hacker News, `reddit` to Reddit, `github.com` to GitHub; sign-ups and payments with no source go to "Direct / unknown" and are never split across channels. Mark when each channel's signal changed (HN rank first at 30 or better, PH rank change) and find the minute visits jumped with `dateHourMinute`.
5. **Compare with the last hour and post**: Read the previous card with `GET https://briefkin.dev/v1/cards/insight-product-hunt-launch-day-cockpit` and state what changed since it. GA4 fills earlier hours in late, so re-read the whole day each run rather than adding hours up. Never suggest asking anyone for upvotes; Product Hunt's rules forbid it.

## Route B: the browser

### What you need

- Signed in to Product Hunt as a maker of the launch, to GA4 with Viewer access, to GitHub, and to Stripe with a role that can view payments.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://www.producthunt.com/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Read Product Hunt**: On the homepage, find your launch in today's list and note its position and upvotes. Open its page, read the comment thread, and note each top-level comment with no reply from anyone marked as a maker.
2. **Read Hacker News and Reddit**: Open `https://news.ycombinator.com/` and look for your story on the first page (its number is the rank); if it is not there, open your story's page for points and comments. Open your Reddit post and note its score and comment count.
3. **Read visits and sign-ups by source**: In `https://analytics.google.com/`, open **Reports > Acquisition > Traffic acquisition**, set the date to **Today**, switch the primary dimension to **Session source**, and read Sessions and the `sign_up` event count per source. Glance at **Reports > Realtime** for the last 30 minutes.
4. **Read stars and payments**: Open the GitHub repo and note the star count against the morning's. In the Stripe Dashboard, open **Payments** filtered to today and read the source metadata your checkout sets on each one.
5. **Line them up**: Group sources by channel (Product Hunt, Hacker News, Reddit, GitHub, Direct / unknown), give each channel its rank or score beside visits, sign-ups and payments, and note what changed since the last check.

Note: The browser route is one snapshot per run, so the timeline is only as fine as how often you ask. GA4's Traffic acquisition for Today lags a few hours; Realtime is current but covers 30 minutes. Product Hunt's homepage order can differ slightly from the API's daily rank while votes are being counted.

## The report

- **Channel table**: visits, sign-ups and payments since launch per channel, beside its rank, votes or points.
- **Timeline**: when each channel's signal changed and when its visits jumped.
- **Waiting**: Product Hunt comments with no maker reply.
- **Since last hour**: rank, votes and sign-ups that moved.
- One thing to do now, for example "Reply to the 3 open Product Hunt comments; HN is doing the converting".

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "product-hunt-launch-day-cockpit/<date of this run, e.g. 2026-10-16>",
  "item_key": "product-hunt-launch-day-cockpit",
  "project": "Acme",
  "source": "Launch day cockpit: Product Hunt, Hacker News, Reddit, analytics and sales skill",
  "kind": "update",
  "title": "HN front page sent 19 sign-ups; Product Hunt 4",
  "summary": "HN front page at 09:40: **312 visits, 19 sign-ups, 2 paid**. Product Hunt rank 4, 280 upvotes: **268 visits, 4 sign-ups**. 3 Product Hunt comments wait for a maker reply.",
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Channel",
          "Now",
          "Visits",
          "Sign-ups",
          "Paid"
        ],
        "align": [
          "left",
          "left",
          "right",
          "right",
          "right"
        ],
        "rows": [
          [
            "Hacker News",
            "Rank 7, 146 points",
            312,
            19,
            2
          ],
          [
            "Product Hunt",
            "Rank 4, 280 upvotes",
            268,
            4,
            0
          ],
          [
            "Reddit r/SaaS",
            "41 points, 18 comments",
            74,
            3,
            0
          ],
          [
            "GitHub",
            "+58 stars today",
            41,
            0,
            0
          ],
          [
            "Direct / unknown",
            "",
            149,
            2,
            1
          ],
          [
            "All",
            "",
            844,
            28,
            3
          ]
        ]
      }
    },
    {
      "type": "Log",
      "props": {
        "lines": [
          {
            "time": "00:01",
            "text": "Product Hunt launch live",
            "level": "info"
          },
          {
            "time": "07:15",
            "text": "Show HN posted",
            "level": "info"
          },
          {
            "time": "09:40",
            "text": "HN front page (rank 22); HN visits jump from 4 to 61 in ten minutes",
            "level": "ok"
          },
          {
            "time": "11:20",
            "text": "Reddit post in r/SaaS",
            "level": "info"
          },
          {
            "time": "12:00",
            "text": "Product Hunt rank 5 to 4; 3 comments still without a maker reply",
            "level": "warn"
          }
        ]
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Every hour on launch day (`0 * * * *`). From cron, with the agent signed in on that machine:

```bash
0 * * * * claude -p "Run the product-hunt-launch-day-cockpit skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/product-hunt-launch-day-cockpit#schedule

Source: https://briefkin.dev/skills/product-hunt-launch-day-cockpit
