diff --git a/README.md b/README.md index 503e82f..e4b2810 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ Meta-repo for the `leeworks-apis` recursive build loop. This repo holds cross-cu - `MASTER_BUILD_PROMPT.md` — the prime directive driving the build loop - `ROADMAP.md` — cross-repo milestones (Phase 0–6) - `STATUS.md` — living revenue + infra scorecard +- `docs/pre-launch-checklist.md` — go-live gate checklist (run the day before public launch) - `SESSION_LOG.md` — append-only log of agent work sessions - `research/RESEARCH_LOG.md` — market research findings, candidate API ideas - `flux/` — cluster-level Flux manifests (registry, runner, monitoring, docs-site) diff --git a/docs/pre-launch-checklist.md b/docs/pre-launch-checklist.md new file mode 100644 index 0000000..272f8ec --- /dev/null +++ b/docs/pre-launch-checklist.md @@ -0,0 +1,98 @@ +# Pre-Launch Checklist + +Use this checklist as the final go-live gate — run through every item the day before flipping the public switch. All items must be ✅ before announcing public availability. + +--- + +## Infrastructure + +- [ ] All Flux components `READY=True` (`flux get all`) +- [ ] All three API pods Running and READY + - [ ] `zip-enrichment` pod `READY=1/1` (`kubectl get pods -n zip-enrichment`) + - [ ] `holidays` pod `READY=1/1` (`kubectl get pods -n holidays`) + - [ ] `air-quality` pod `READY=1/1` (`kubectl get pods -n air-quality`) +- [ ] `docs-site` pod Running and READY (`kubectl get pods -n docs-site`) +- [ ] Prometheus scraping all three API services (check Prometheus Targets UI) +- [ ] Grafana dashboard accessible at `grafana.leeworks.dev` + +--- + +## DNS & TLS + +- [ ] `zip.leeworks.dev` → cluster ingress IP (`dig zip.leeworks.dev +short` + `curl -I https://zip.leeworks.dev`) +- [ ] `holidays.leeworks.dev` → cluster ingress IP +- [ ] `aqi.leeworks.dev` → cluster ingress IP +- [ ] `docs.leeworks.dev` → cluster ingress IP +- [ ] `status.leeworks.dev` → cluster ingress IP +- [ ] `registry.leeworks.dev` → cluster ingress IP +- [ ] `grafana.leeworks.dev` → cluster ingress IP +- [ ] TLS certificates issued for all 7 subdomains (`kubectl get certificates -A`) + +--- + +## Functional Verification + +- [ ] `GET /health` returns HTTP 200 on **zip-enrichment** (`curl https://zip.leeworks.dev/health`) +- [ ] `GET /health` returns HTTP 200 on **holidays** (`curl https://holidays.leeworks.dev/health`) +- [ ] `GET /health` returns HTTP 200 on **air-quality** (`curl https://aqi.leeworks.dev/health`) +- [ ] `GET /zip/{zip}` returns correct data for a sample ZIP code (e.g. `curl https://zip.leeworks.dev/zip/10001`) +- [ ] `GET /holidays/{year}` returns correct data (e.g. `curl https://holidays.leeworks.dev/holidays/2026`) +- [ ] `GET /aqi/{city}` returns correct data (e.g. `curl https://aqi.leeworks.dev/aqi/New%20York`) +- [ ] Request **without** `X-RapidAPI-Proxy-Secret` returns HTTP 403 on all three APIs +- [ ] `docs.leeworks.dev/pricing` loads correctly +- [ ] `status.leeworks.dev` shows all three APIs as **UP** + +--- + +## Legal & Monetisation + +- [ ] `docs/legal/terms-of-service.md` committed and reachable at `docs.leeworks.dev/legal/terms-of-service` +- [ ] `docs/legal/privacy-policy.md` committed and reachable at `docs.leeworks.dev/legal/privacy-policy` +- [ ] `docs/legal/acceptable-use-policy.md` committed and reachable at `docs.leeworks.dev/legal/acceptable-use-policy` +- [ ] All three APIs listed on RapidAPI with **Free + 3 paid tiers** (leeworks-agents/api-company#44) +- [ ] PayPal linked to RapidAPI (leeworks-agents/api-company#19) +- [ ] `rapidapi-proxy-secret` updated with **real** RapidAPI values in all 3 namespaces (leeworks-agents/api-company#81) + +--- + +## Post-Launch + +- [ ] Alert channel confirmed — Slack webhook active (leeworks-agents/api-company#73) +- [ ] Grafana alert rules firing correctly on synthetic test downtime +- [ ] First STATUS.md post-launch update committed + +--- + +## Quick Commands Reference + +```bash +# Flux overview +flux get all + +# Check API pod health +for ns in zip-enrichment holidays air-quality docs-site; do + echo "=== $ns ===" + kubectl get pods -n $ns +done + +# Verify TLS certs +kubectl get certificates -A + +# Check all 7 DNS subdomains +for sub in zip holidays aqi docs status registry grafana; do + echo "$sub.leeworks.dev -> $(dig $sub.leeworks.dev +short)" +done + +# Smoke test health endpoints +for svc in "zip.leeworks.dev/health" "holidays.leeworks.dev/health" "aqi.leeworks.dev/health"; do + echo "$svc: $(curl -s -o /dev/null -w '%{http_code}' https://$svc)" +done + +# Verify 403 on missing proxy secret +curl -s -o /dev/null -w "%{http_code}" https://zip.leeworks.dev/zip/10001 +# Expected: 403 +``` + +--- + +_References: ROADMAP.md §Phase 6; leeworks-agents/api-company#33, #44, #19, #81, #73, #7, #8, #18_