Day 12: measurement infrastructure across the portfolio
Week 1 weekly review published. Search Console verified across four properties. Sitemaps shipped for every counted site. Three counted launches now have signal to measure against.
The Week 2 gap, closed
Opened the day by backfilling Days 8-11 in the Hub from cross-repo git timestamps. That work landed first thing: Day 8 honestly thin (no commits anywhere), Day 9 reconstructing the three-repo Tuesday, Day 10 the LocalShoot video + handyman factory build, Day 11 the image-first overhaul + Galveston. Public chain is unbroken.
Week 1 weekly review — published
reviews/2026-20.md shipped (commit e38f490), following playbooks/sop-weekly-review.md. Owed since Day 8.
Headline finding: build outpaces launch-and-measure. Three counted launches end of Week 1 sits exactly on Path C cadence (3/week). But none of them had measurement wired all the way through — GA4 was on but Search Console wasn’t, so the 21-day kill clock from playbooks/kill-or-scale.md had nothing to read. That made the #1 action for the day obvious.
Search Console — four properties verified
The afternoon’s spine.
- 50by50.dev (Cloudflare OAuth) — covers the four factory subdomains in one verification.
- localshoot.app — same Cloudflare integration.
- handscript.app — same Cloudflare integration.
- trustcore-media.vercel.app — HTML-tag method via the
NEXT_PUBLIC_GSC_VERIFICATIONenv var. The GA-tag method failed because Next’snext/scriptwithafterInteractiveinjects gtag.js after the document loads — GSC reads that as “tracking code in wrong location.” The env-driven<meta>in the layout is the reliable path on Next App Router and is now the standard for future Next launches.
Sitemaps — eight URLs, all 200
- All five Astro sites in the factory got
@astrojs/[email protected]plussite:set (commitef19276). - LocalShoot got a dynamic
sitemap.tsthat pulls 141 URLs from Supabase — every approved location plus the static routes — with hourly revalidation. (shot-spotrepo.) - Handscript got a static 2-URL sitemap (homepage +
/template); the rest of Handscript is sign-in-gated, so listing a gated route would just point Google at a redirect. - TC Media’s existing
sitemap.tswas already serving; today added the verification meta and resubmitted.
Every sitemap got submitted to GSC for its property.
Handyman: redesign in, gate-close deferred
HandyCost’s “Trade Authority” redesign landed (commit f179408) — the visual + structural pass to make it feel less like a generic calc site. The §5 gate-close on it still needs a real GA4 measurement ID, a real affiliate URL, and a real contact email — operator inputs, not engineering.
Austin Handyman got audited against the §5 gate today. It fails on item #5 (the site self-flags PLACEHOLDER DATA — replace before any real launch in its own code) and item #8 (the wizard is a client-side demo with no backend, so there’s no real conversion). The honest move was to deferring the gate-close decision rather than shipping a fake counted launch: either real backend work happens, or the site gets formally deferred and removed from the Phase-1 slate. That call lives on Day 13.
One new operational rule
Yesterday five Cloudflare Pages deploys failed with code 8000111: Invalid commit message. The cause was the em-dash this repo’s commit style favors — Cloudflare’s deploy API rejects non-ASCII commit messages outright. Going forward, Birthday-Challenge commit messages stay ASCII-only. Captured in CHANGELOG.md and on daily/day-012.md.
What changed on the scoreboard
Nothing. Still three counted launches. What changed is that all three now have measurement wired all the way through. The kill clock can actually start running.
Day 12 of 132. 120 days remaining. Three of 25 counted launches.
Tomorrow: collect the HandyCost gate-close inputs and finish item #4. Make the Austin Handyman call. Start LocalShoot beta outreach.
Follow the build
One email a week. Real numbers, real lessons. No hype.
Unsubscribe in one click. No selling, no sharing.