# Weekly funnel snapshot Window: **2026-10-22 16:00:00 → 2026-10-29 16:00:00 UTC** (7 days). Previous: 2026-10-15 16:00:00 → 2026-10-22 16:00:00 UTC. Generated by `bun --env-file=.env scripts/weekly-metrics.ts`; regenerated weekly, never hand-edited. The analysis is the CMO's. ## Funnel | Stage | This week | Last week | Change | |---|---:|---:|---:| | visit (page views) | 61 | 56 | +5 | | download click → DMG served (one label) † | 156 | 0 | +156 | | trial started | 2 | 0 | +2 | | checkout page visit † | 0 | 0 | 0 | | purchase (licence issued) | 0 | 0 | 0 | | activation | 0 | 0 | 0 | ## Campaigns Top 10 by volume, untagged excluded — the same grouping `getAnalyticsSummary.topCampaigns` returns. | Source | Medium | Campaign | Rows | |---|---|---|---:| | hn | post | launch | 2 | | direct | — | deploycheck-direct | 1 | | hn | — | flushproof | 1 | | hn | post | deploycheck-ref | 1 | | r_macapps | — | week2 | 1 | | x | — | — | 1 | 7 of 356 rows in the window carry campaign tags; the rest are untagged and therefore unattributed. ## The one thing that moved **download click → DMG served (one label): 0 → 156 (+156).** ## Before acting on these numbers - **356 of 356 rows in the window came from a loopback address** (127.0.0.1 / ::1); every one of the 12035 addressed rows the table has ever held is loopback (13 carry no address). Either this host is the only audience, or the app sits behind a local proxy and `getRequestIP` records the proxy, not the visitor. Either way the address identifies nobody — "unique visitors" collapses to one host and per-channel reach cannot be read from it. - **The download stage is one label, not two.** The landing-door route and the file route that serves the DMG both write `/api/downloads/thenook`, so "download click → DMG served" cannot be split: one served click writes two rows, a click that fails to resolve writes one, and a Sparkle update writes one. Of this window's 156 download rows, 156 are loopback and 117 are not browser user agents (curl, Sparkle, link-preview crawlers). - **Checkout start is not recorded.** `POST /api/the-nook/checkout` — the call that actually creates the Stripe session — writes nothing to analytics; the only trace is the /checkout page view reported above, which is a page, not a started checkout. - **There is no host dimension.** `VisitorAnalytics` records a path, not the site, so the Nook's landing page (`/` on nook.freno.me) is the same row as freno.me's root. "visit" above is site-wide page views, not Nook visits. - **No conversion rate before the cohort matures.** Trial→paid belongs to the mature Day 28–35 read (FRE-197); a ratio from a partial cohort is not a metric. † Proxy or merged label — see *Before acting on these numbers* above. ## Sources - `VisitorAnalytics` (freno.me Turso DB) — visits, downloads, campaigns. - `trials`, `licenses`, `activations` (the-nook Turso DB) — the paid funnel. - Generated 2026-10-29T16:00:00Z.