# Public tracking snapshot

This is a manually published, read-only dashboard. It has no analytics feed, login, tracking pixel, automation, or comment collection. The daily metric source is a transcription of the App Store Connect Metrics view as observed, retrieved 2026-09-28 17:43 UTC; it is **not** an Apple CSV export. The territory, device, and source filter state was not captured, so these figures are not labeled worldwide totals. Apple defines days in UTC. Its visible Jun 30–Sep 27, 2026 table reports 229 first-time downloads and 689 product page views. The copied numeric cells sum to those totals, with 75/90 and 87/90 numeric days respectively. Apple's “-” cells remain `null`, never zero. Sep 28 was absent; recent dates may be revised.

## Safe daily update

1. Pull the two App Store Connect daily tables from the authenticated account, recording the exact UTC pull time, displayed date range, UI totals, and any “-” cells. Keep raw account reports and notes outside this public repository.
2. Update `metrics.json` with aggregate daily rows only. Each row has `date` (ISO UTC day), `downloads` and `views` (nonnegative integer or `null`), and `downloadsDisplay`/`viewsDisplay` (the original integer string or `-`). Extend the contiguous window when Apple provides new days; revise older rows when Apple's delayed data changes. Update `period`, `source.retrievedAtUtc`, and each metric's `reportedTotal`, `numericSum`, `knownDays`, and `totalDays`. Investigate a mismatch between the UI total and numeric sum; the validator intentionally rejects it. Do not guess suppressed daily values.
3. Update the dated source and channel/issue/feedback statements in `index.html` using only verified aggregate observations. Label every observation's date and source type. Keep all five channels visible even when metrics remain unknown. Remove stale claims, record resolved issues as resolved or remove them with a dated note, and do not invent comments, product bugs, or spend rows.
4. Run `node tracking/validate-data.mjs` and `node --test tracking/metrics.test.mjs` from the site root. Review the exact diff for private data, the latest date, source coverage, and HTML statements. Preview locally at desktop and 360px before authorized publication.
5. Publish only after the site owner reviews the exact files. The next visitor sees the new static snapshot; no automatic refresh is installed.

The 7/30/90 controls are rolling calendar days ending at the latest available date. Custom dates must be within the source window. The chart and CSV use the same selected rows. A full-source-window total is labeled Apple's **reported total**; smaller windows show the sum of numeric days and the coverage. A prior equal-length window is comparable only if both periods have every calendar date and every selected metric cell numeric, and the prior total is nonzero. No forecast is produced. Download divided by page views is not represented as Apple's conversion metric.

## Other measurement

Keep a campaign spend ledger empty until a dated, directly attributable source exists. A later row should identify reporting date/timezone, channel, campaign ID, approval/cap, actual spend and currency, platform impressions/taps/clicks, source-reported first-time downloads, activation, trial starts, paid conversions, revenue, refunds, attribution window, report pull time, and source reference. Use `null` for unavailable values, including likes, shares, reach, and link clicks. Cost per acquired customer and ROAS require spend and directly attributable outcomes from the same campaign and window, with a nonzero denominator. Do not allocate global downloads to campaign spend. The managed launch campaign has spent $0 and has an active cap of $0; the $500 cap is a proposal. Historical business spend is unknown.

Social actions are event annotations with unmeasured impact. Treat a reply queue as empty until comments are actually collected and privately triaged. Do not publish commenter identities, child names, schedules, inbox text, or private notes. First replies and moderation decisions go to Rob for review. See the dashboard for draft reply language and moderation principles.
