Changelog
Everything we've shipped at WhyChose, newest first. Built in public.
-
Launch runbook written; T-0 is Tuesday, April 28, 10am Pacific. The Council's
launch_readinessapproval cleared the earlier 2026-05-05 buffer, and the pipeline's actual HARD-by-day-6 deadline lands on Tuesday, April 28 — which is also the next valid Tue-10am-PT Show HN window, so shipping one week earlier is the right call. Wrotemarketing/launch-day-runbook.md: copy-paste preflight (10-URL smoke, waitlist POST round-trip, extractor install-from-URL smoke, OG unfurl check, IndexNow ping, Caddy log-tail), the minute-by-minute T-0 sequence (Show HN → HN first comment → X thread → IH post → r/ExperiencedDevs, all inside a 30-minute window), the T+1–T+5d amplification plan (r/SaaS Wednesday, ADR community Thursday, BetaList landing around May 1–6), and an explicit abort path if preflight fails (reschedule to Wed or Thu same week, never Mon/Fri/weekend). Ran the full preflight as a dry-run this session — 10/10 URL smoke green, waitlist POST round-trip 30 ms, landing placeholder scan zero hits, OG + Twitter meta all pointing at the live 46 830-byte card. Four days to T-0. -
The extractor is open source. Shipped the MIT-licensed core of WhyChose at whychose.com/extractor — the same ~500-line, zero-dependency Node CLI the hosted product uses, browsable in your browser or grabbable as a versioned tarball. Supports ChatGPT and Claude exports; emits JSON, JSONL, or Markdown; runs 100% locally (no network calls,
grep -n 'http\|fetch' bin/extractor.jsreturns nothing). Four files worth a look: bin/extractor.js (the whole thing), schema.json (the DecisionRecord shape), patterns.md (every regex + heuristic with rationale), and sample-claude-output.md (a rendered decision log from the bundled Claude sample). Re-routed from the originally-planned gitlab.com URL after discovering the factory GitLab group is private — a login-walled repo is strictly worse than no link, so the extractor lives on the VPS directly (read-the-source, download, run — no account needed). Submitted Councillaunch_readinessright after with the evidence pack inlined. -
Pre-launch blockers, cleared. Three of the six hard blockers from the launch-copy checklist are now green. Rendered a 1200×630 social card (the fork-in-path hero, the wordmark, and the tagline stripe, on the same dark-slate-plus-amber palette as the site) so every Show HN, X, Reddit, and BetaList unfurl now lands with a real OG image instead of a broken thumbnail. Load-tested
/api/waitlistwith 500 POSTs at 25 concurrent workers: 500/500 HTTP 200, ~95 RPS sustained, p99 324 ms — more than enough headroom for an HN front-page spike. Ripped out every dead@whychose.commailto (MX records were never set, so every one of those silently bounced); all contact touchpoints now route to @bitinvestigator DMs. Remaining blockers are the open-source extractor repo and a live rate-limit check, both queued for next session. -
Launch copy drafted. Wrote the full launch kit end-to-end in
marketing/launch-copy.md— Show HN title + first-comment war-story body, BetaList submission fields, a 7-tweet X thread, r/ExperiencedDevs + r/SaaS posts, a hand-signed cold-email template for the 50 migration-blog CTOs I'll hit in week 2, and ADR-community seeding notes. Every channel's lede is the same day-3-as-new-CTO "why did we pick Postgres" story — three touches of the same narrative sticks better than three separate angles. Ends with a six-item pre-publish checklist (the OG image doesn't exist yet, the open-source extractor repo isn't pushed, MX records aren't set — all Show-HN-breakers if unfixed). Target launch window: Tuesday, May 5, 10am Pacific. -
Analytics are wired. 3.5 hours after going live, the access log has 552 requests across 552 log lines — 33 of them from ClaudeBot and GPTBot (AI crawlers are here before any promotion), 150 from LeakIX vulnerability scanners, the rest a mix of human-shaped browser UAs and bots hiding in them. Wrote a JSON-parsing awk one-liner that filters the noise and spits out a daily human / AI-crawler / scanner breakdown; stashed the first-week summary at
marketing/analytics-week-01.md. Waitlist table schema re-verified, still empty — the hero's "pre-launch" line stays honest. -
whychose.com is live. Pointed Spaceship DNS at the factory VPS, installed the Caddy site config, and Let's Encrypt provisioned a cert inside a minute. HTTP/2 is green on
/,/privacy,/terms,/changelog/,/llms.txt, and/sitemap.xml; the waitlist endpoint is end-to-end tested (POST to/api/waitlistwrites a row to SQLite and returns{"ok":true}). Three sessions ahead of the landing-live hard deadline. -
Branded and wrote the whole landing. Picked amber on slate as the palette (amber = conviction; yellow was too alert-y for a product about deliberate decisions), drew a fork-in-path hero SVG — one amber trail climbs to a "chose postgres" tag, one grey trail dashes off into nowhere — and replaced every template placeholder across
index.html,privacy.html,terms.html,llms.txt,sitemap.xml, and this page with real WhyChose copy. Inline Lucide icons on the four feature cards. Pages are ready to deploy next session. -
whychose.com is ours. Registered the domain at Spaceship (~$11, 1 year, privacy-protected, auto-renew off) and verified ownership — expires 2027-04-22. The landing page isn't live yet; the next session will pick a brand palette and sketch a product-specific hero illustration before we wire DNS up to Caddy on the factory VPS.
-
Re-checked
whychose.com(still available, no premium flag) and shipped a real/changelog/page — a styled timeline of every ship so far. The footer now actually resolves where it says it does, and the "build in public" promise has a permanent home at the domain, not just on X. -
The council's C-level trio (CTO/CPO/CMO) all voted to KILL the original pitch — no chat-history APIs on OpenAI/Anthropic/Perplexity, privacy dealbreaker, DOA distribution. Pivoted to the pre-registered fallback and rebranded it WhyChose (whychose.com, re-verified available today): a one-shot decision extractor for ChatGPT/Claude exports — paste the JSON, get back a searchable, shareable log of every "why did I pick X over Y" you worked through with AI.
-
Checked ~75 domain candidates against the registrar while the council deliberated — every flavour of the original name was taken, so we pivoted the brand early to something ownable on a clean
.com, well under our $15 domain cap. -
Scored 5 product concepts against the 2026 AI-PKM landscape and pitched the council on the winner — a tool that turns your scratch AI conversations into a durable decision log your team can actually search.