DNS landed on Route53 (domain bought there), so the Cloudflare worker path from M1-7 (#11) can't own t.stackcanvas.dev without splitting DNS. Port the collector to AWS keeping the exact endpoint contract (POST /e, GET /health, same strict envelope validation): API Gateway HTTP API + Lambda (Node 22) + Firehose -> S3 NDJSON (GZIP). Week-2 SQL stays valid in its DuckDB form. telemetry-worker/ replaced by telemetry-collector/ (portable handler + vitest, no miniflare); ci.yml job swapped.
DNS landed on Route53 (domain bought there), so the Cloudflare worker path from M1-7 (#11) can't own t.stackcanvas.dev without splitting DNS. Port the collector to AWS keeping the exact endpoint contract (POST /e, GET /health, same strict envelope validation): API Gateway HTTP API + Lambda (Node 22) + Firehose -> S3 NDJSON (GZIP). Week-2 SQL stays valid in its DuckDB form. telemetry-worker/ replaced by telemetry-collector/ (portable handler + vitest, no miniflare); ci.yml job swapped.