The measurement stack
What one person built, solo, to instrument a niche delivery app — verifiable in the repo and by running the tools:
- Two GA4 properties (web 486642492, app 493986654) with the discipline to keep their claims apart.
- Over 70 typed analytics events in the Flutter app (
analytics_service.dart) — onboarding, auth, route, camera-permission ladder, OCR sub-steps, delivery outcomes, referral hooks (invite_driver,join_community) — instrumented before there were users to measure. - A failure-side layer (2026-07 → 09): the AUTO gate is declared once and instrumented by a decorator (gate-spec-and-telemetry-decorator); its timeout event carries the detector's own verdict and what ML Kit saw (gate-events-carry-the-verdict); every parameter the app sends is registered as a GA4 dimension in the same change (ga4-schema-completion). Reading it has its own rule: subtract the developer's phone and the store's test robots first (subtract-your-own-phone-and-the-robots).
- A consolidated analytics CLI (
tools/ga4.mjs): one tool, thirteen subcommands (dashboard / funnel / churn / ocr / gate / firstrun / activation / versions / paths / attribution / retention / cta / who), simulator traffic excluded by default — refactored from a pile of one-off scripts into an instrument. Ran first-try on 2026-07-10;gatesplits by app version because the gate's conditions themselves changed between releases. - Competitor intelligence scrapers (LinkedIn/X, config-driven, multi-company) over Circuit, Route4Me, OptimoRoute, Routerra et al.
- Analysis with teeth (
funnel-analysis-2026-07-07.txt): a full acquisition-to-activation decomposition whose section 8 overturns its own section 7 — version-slicing revealed that "users open the camera and don't scan" was largely an old-iOS camera bug, not user behavior, and the document says so and rewrites its conclusion. It closes with the methodology as a rule: slice by appVersion before attributing anything to behavior. Self-correcting analysis, in writing, is the rarest artifact in the folder.
The point for the record: whatever the growth question's answer turns out to be (growth), measurement was never the gap — the instrumentation here is beyond what most funded teams run.