# ProductHunt launch-day checklist — IronMail

> **Single source of truth for launch-day activity.** Cross-channel posts and notifications all live here — the launch page itself, the leads endpoint, and the cron infrastructure stay untouched. One human runs this checklist end to end on launch day.

## Owner

- **Run-of-show**: the user / product owner (notifiable via the same DM channel used for hunter outreach)
- **Backup**: anyone with `@polsia` social-access and IndieHackers / Dev.to posting credentials

## Goal of launch day

Drive **qualified traffic to `https://ironmail.polsia.app/launch`**, capture **leads with `source='launch_page'`** in the database, and **bookmark IronMail as a launch-day reference** so future launch campaigns can reference this one in postmortems.

The success metrics (queried at T+24h):

- PH upvotes (target: top-5 of day in AI category)
- Leads with `source='launch_page'`: `psql $DATABASE_URL -c "SELECT COUNT(*) FROM leads WHERE source='launch_page' AND created_at > NOW() - INTERVAL '24 hours'"`
- Lessons-learned note appended at the bottom of this file within 48 hours.

---

## T-24h — preparation

- [ ] **Slot confirmed with the hunter.** PH submission must be in queue for the agreed date.
- [ ] **Launch tweet copy locked.** Schedule tweet from `@polsia` for T-0 with `https://ironmail.polsia.app/launch` and the PH listing URL (placeholder until submission is finalised).
- [ ] **IndieHackers thread draft pre-loaded.** Title: "Launching IronMail today — free AI cold email generator on ProductHunt". Body: 80-word pitch + the launch page link + the generator link + the PH listing link.
- [ ] **Dev.to cross-post draft pre-loaded.** Title mirrors the IH thread. Body: longer-form — same pitch + a 3-bullet feature breakdown + screenshots embedded + launch page link + PH link.
- [ ] **BetaList entry pre-loaded.** Name, tagline, hero image (`/launch/assets/screenshot-1.png`), category (Sales), description (the one-liner value prop), launch date matches PH slot.
- [ ] **Launch page render check.** Open `https://ironmail.polsia.app/launch` in three browsers. Screenshots, GIF, form submit (verify row appears in `leads` table with `source='launch_page'`), all three asset links (`/launch/outreach`, `/launch/checklist`, `/launch/assets/`) resolve.
- [ ] **Sitemap check.** `curl -s https://ironmail.polsia.app/sitemap.xml | grep /launch` returns the entry.
- [ ] **Screenshots + GIF committed.** `public/launch/assets/screenshot-1.png`, `…-2.png`, `…-3.png`, and `demo.gif` are pushed to deploy. Static asset URL is serveable.

## T-0 — launch day (the 4-minute window)

> Trigger a single "GO" message in the team DM and execute these in parallel.

- [ ] **Scheduled tweet post goes live** via `@polsia` at the agreed slot. Copy: "Live on @ProductHunt today — IronMail is the AI SDR that writes, sends, and books meetings 24/7. Try the free cold email generator ➜ https://ironmail.polsia.app/launch #ProductHunt #AI"
- [ ] **Submit the PH listing** if not already queued by the hunter. Final tagging, headline (the drafted one-liner), first paragraph (the drafted paragraph above), primary asset screenshot, maker comment drafted and ready to post-comment at launch.
- [ ] **IndieHackers post published.** Same thread draft as T-24h.
- [ ] **Dev.to cross-post published.** Same article draft as T-24h.
- [ ] **BetaList entry submitted.** Use the pre-loaded draft; confirm launch date.
- [ ] **Owner notified.** DM the user in the same channel used for hunter outreach: "We're live on PH — `https://ironmail.polsia.app/launch` and the PH listing [URL] are both up. BetaList, IH, Dev.to cross-posts are out. Tweet scheduled and posted."

## T+2h — engage the listing

- [ ] **Maker comment posted on the PH listing.** First comment from the maker account shares the launch page + the three screenshots + the 60-second demo GIF.
- [ ] **Reply to every comment on the PH listing within 30 minutes** during the first 6 hours. Comments are the highest-leverage ranking signal on PH day-one.
- [ ] **Drop the screenshots in the first comment thread** as standalone images so they surface in PH's image previews.

## T+24h — measure + learn

- [ ] **PH upvote tally.** Note the day's rank and total upvotes. Visible from the PH listing page.
- [ ] **Lead count from launch page.** `psql $DATABASE_URL -c "SELECT COUNT(*), MIN(created_at), MAX(created_at) FROM leads WHERE source='launch_page' AND created_at > NOW() - INTERVAL '24 hours'"` — this is the verified launch-day conversion number.
- [ ] **Cross-channel post reach.** Roughly tally: IH thread views, Dev.to article reads, BetaList upvoters, tweet impressions.
- [ ] **Lessons-learned note appended.** Add 3-5 lines to the bottom of this file: what worked, what didn't, what the next launch should do differently.

## Post-launch cleanup

- [ ] **Remove the launch banner from `public/index.html`** once PH day ends. (The grad-CTA pattern in `nav-links-landing` already only links to `/launch` during the launch window, so revert any persistent nav changes.)
- [ ] **Keep `/launch` page live** — turn it into the post-launch reference page (the Wayback link for the launch, the screenshot gallery, the one-liner for press).
- [ ] **Add a `launch_kit_postmortem` line to `CLAUDE.md`** recent-changes section summarising the launch — top of file, so the team has it cold in the next task.

---

## Recovery contacts

- **Polsia platform issues** (broken tool / missing env var / Render outage blocking launch): file via the runner's platform-bug tooling.
- **IronMail app issues** (the lead form not capturing, the launch page 500ing): debug from the deploy / health endpoint.

## Lessons learned (append at T+48h)

<!-- Append only — do not overwrite. Each launch adds 3-5 lines summarising what worked, what didn't, what the next one should do differently. -->
