We don't measure you until you say yes
Most analytics fire before the cookie banner finishes rendering. Ours don't fire at all until you opt in. Here's how that constraint shaped the build.
Open the network tab on most agency sites and you'll see the analytics beacons go out before you've read a word — certainly before the consent banner means anything. The banner is theater. The data already left.
We took the opposite position, and we wired it into the code rather than the policy page. Our Core Web Vitals reporter is a client component that does nothing on mount. It checks for stored analytics consent first, and only if that consent is explicitly `accepted` does it lazy-import the measurement library and start sending LCP, INP, CLS, FCP, and TTFB to our own endpoint. No consent, no import, no beacon. The same gate governs the personalization layer: automatic audience detection only runs when analytics consent is granted. Decline, and you get the neutral, default experience — fully functional, just unmeasured.
This is harder than the alternative, and that's the point. It means we operate with less data about visitors who chose privacy. It means our dashboards undercount real traffic, because a meaningful slice of people never opt in. We treat that gap as honesty, not loss. Numbers gathered without permission aren't more accurate — they're just taken.
What we refuse to do: fire a single tracking call before consent, treat 'reject' as 'ask again on every page,' or quietly reclassify analytics as 'essential' to dodge the prompt. We also don't ship third-party tag managers that load opaque scripts we can't audit. Telemetry on this site goes to an endpoint we own, so there's no second party deciding what to do with it.
The principle is one line: consent is a switch in the code path, not a label on a banner. If the switch is off, nothing measures you — and the site still works exactly as well. Privacy you can verify in the network tab beats privacy you have to trust in a paragraph.