|
| 1 | +# Launch readiness (v1.0.0) |
| 2 | + |
| 3 | +The code is launch-ready as of **v0.9.8**. v1.0.0 is the public launch itself — mostly human-gated actions. This checklist organizes them. Bump the version to `1.0.0` only *after* the launch is live and stable (its exit criteria are about real traffic, not code). |
| 4 | + |
| 5 | +## 1. Pre-launch verification |
| 6 | + |
| 7 | +- [ ] **Legal review.** Have a professional review `/privacy` + `/terms` (`frontend/src/app/{privacy,terms}/page.tsx`). They're honest plain-language drafts, **not** legal advice. |
| 8 | +- [ ] **Load test.** Run the full warm-`/analyze` 100 RPS test per [`backend/loadtest/README.md`](../backend/loadtest/README.md) (local SRH + Docker). Record max sustainable RPS + p95 in `docs/PROGRESS_LOG.md`. |
| 9 | +- [ ] **Security config (verified 2026-05-29, re-confirm before launch):** |
| 10 | + - `COOKIE_SECURE=true` in prod — confirmed via the `si_oauth_state` cookie carrying `Secure`. |
| 11 | + - `CORS_ALLOW_ORIGIN_REGEX` scoped to our origins — confirmed (`evil.example.com` + arbitrary `*.vercel.app` rejected). |
| 12 | + - `INTERNAL_PROXY_SECRET` set on both Vercel services (turns on anonymous `/analyze` IP rate limiting). |
| 13 | + - Security headers live — confirmed via `curl -I` (`X-Frame-Options`, `nosniff`, `Referrer-Policy`, `Permissions-Policy`, CSP report-only). Consider promoting the CSP from report-only to enforcing after tuning against real violation reports. |
| 14 | +- [ ] **Smoke the live app:** `/health` is `up/up`, sign-in works, an analysis runs, `/me` history + delete work, a `/share/<slug>` link resolves. |
| 15 | + |
| 16 | +## 2. Production domain + SSL |
| 17 | + |
| 18 | +- [ ] Buy the domain. |
| 19 | +- [ ] Vercel → Project → **Settings → Domains** → add the domain; follow the DNS records Vercel shows. SSL is automatic. |
| 20 | +- [ ] Update env/config that hard-codes the host: `CORS_ALLOW_ORIGINS`, `OAUTH_REDIRECT_URL` (and the GitHub OAuth App's callback URL), `FRONTEND_BASE_URL`, `NEXT_PUBLIC_SITE_URL`, and the repo/footer links if needed. |
| 21 | +- [ ] Re-verify OAuth sign-in end-to-end on the new domain (the GitHub callback URL must match). |
| 22 | + |
| 23 | +## 3. Launch day |
| 24 | + |
| 25 | +- [ ] Final deploy on `main`; confirm `/health` version. |
| 26 | +- [ ] Launch posts: Hacker News (Show HN), X, Reddit (r/programming), LinkedIn. Lead with a real example report link (e.g. `/u/torvalds`). |
| 27 | +- [ ] Watch **Sentry** (errors) + **PostHog** (traffic, web vitals) dashboards. |
| 28 | +- [ ] Be available for the first few hours (informal on-call). |
| 29 | + |
| 30 | +## 4. Post-launch |
| 31 | + |
| 32 | +- [ ] Watch for 72 hours of stable traffic (error budget holds, no pool/rate-limit surprises — the v0.9.4 pool knob `DB_POOL_SIZE`/`DB_MAX_OVERFLOW` and Neon connection ceiling ~105 are the levers if needed). |
| 33 | +- [ ] Document the informal on-call rotation. |
| 34 | +- [ ] Write a launch retro in `docs/PROGRESS_LOG.md`. |
| 35 | +- [ ] Bump `CHANGELOG.md` + version literals to **1.0.0**, tag `v1.0.0`, release. |
| 36 | + |
| 37 | +## Beyond v1.0.0 |
| 38 | + |
| 39 | +Tracked in [`PLAN.md`](../PLAN.md) "Beyond v1.0": GitLab / LinkedIn / Resume checkers, same deterministic-scoring + narrative architecture. |
0 commit comments