Next: Wait. Day 9 of at least 14. 2 full weeks before any call. (CRO Engine)
claude "/cro-onboard Prairie Diesel Repair" runs the whole playbook.The learning report fills in day by day. Nothing to do unless a check turns red; the inbox will say.
consent.catchdigital.io/v1/consent.js in <head> on 5 of 5 pages
CRO Engine · May 23, 1:12 PM
phc_prairie… on 5 of 5 sampled pages
CRO Engine · May 23, 1:12 PM
pageviews in the last 24 hours
CRO Engine · May 23, 1:12 PM
7.3.0 on the live page, matches the manifest
Generated for this site, so the pastes are always the current versions with this site's token. A person lands them: a PR on the repo, or custom code in Webflow.
Where: Project settings > Custom code > Head code
<script src="https://consent.catchdigital.io/v1/consent.js" defer></script>
First on any site that will get session replay or ad signals. The banner gates PostHog and tracking.js through the tg-tier contract. Run /consent-setup if the site has no catch-consent yet.
Where: Project settings > Custom code > Head code
<script>
// PostHog for Catch Website OS. Waits for the consent tier (catch-consent sets window.TG_TIER and
// TG_TIER_RESOLVED, then fires tg-tier-resolved on document with the tier string as detail). Strict
// tier: no cookies, no replay. Every input is masked in replay.
(function () {
var TOKEN = "phc_prairie41217", HOST = "https://us.i.posthog.com";
function start(tier) {
if (window.__cdPosthogStarted) return; window.__cdPosthogStarted = true;
var strict = tier === "strict", startMs = Math.round(window.performance ? performance.now() : 0);
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once unregister opt_out_capturing opt_in_capturing get_distinct_id get_session_id identify alias reset group onFeatureFlags getFeatureFlag".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init(TOKEN, {
api_host: HOST,
persistence: strict ? "memory" : "localStorage+cookie",
disable_session_recording: strict,
session_recording: { maskAllInputs: true, maskTextSelector: "[data-ph-mask]" },
capture_pageview: true,
autocapture: false,
// The capture check: the tier this page ran under and how long after page load PostHog started.
before_send: function (e) { if (e && e.properties) { e.properties.cd_tier = tier; e.properties.cd_start_ms = startMs; } return e; }
});
}
// A "strict" set before the tier resolves is the fail-safe, not an answer (the legacy inline tier
// snippet sets it first): wait for the event unless consent.js says it already resolved.
if (window.TG_TIER_RESOLVED || (window.TG_TIER && window.TG_TIER !== "strict")) start(window.TG_TIER);
else document.addEventListener("tg-tier-resolved", function (e) { start((e && typeof e.detail === "string" ? e.detail : null) || window.TG_TIER || "strict"); });
setTimeout(function () { if (!window.__cdPosthogStarted) start(window.TG_TIER || "strict"); }, 4000); // no consent banner on the page: strict mode
})();
</script>Day 9 since Sep 28, 2026. Day 9 of at least 14. 2 full weeks before any call.
For data that cannot be trusted, like an install bug. Drops the days so far and the report; counting starts again at the next UTC midnight.
Time machine (sample data only)
CRO Engine · May 23, 1:12 PM
input masking on; replay sampled at 10%
CRO Engine · May 23, 1:12 PM
quote_submitted fired on a test submit from 2 of 2 forms
CRO Engine · May 23, 1:12 PM
test lead received with ph_distinct_id and event_id
CRO Engine · May 23, 1:12 PM
distinct id resolves to a PostHog person with 1 session
CRO Engine · May 23, 1:12 PM
anti-flicker snippet not found in the head
Fix: Add the anti-flicker snippet from the install plan to Webflow head code. Needed before the first test, not for learning.
CRO Engine · Sep 28, 1:12 PM
1 project per site. The snippet waits for the consent tier, runs cookieless with no replay on strict, masks every input, and never changes project settings. Replay sampling and billing limits are set on the project by hand (hard rule 5).
Where: Project settings > Custom code > Footer code
<script>window.CatchDigitalConfig = { eventName: "quote_submitted" };</script>
<script src="https://consent.catchdigital.io/tracking/v7.3.0.js" defer></script>Webflow's site custom code cannot hold the 7.3.0 paste (over 20,000 characters), so Webflow sites load the version-pinned copy the consent service hosts. 7.3.0 adds ph_distinct_id, ph_session_id and event_id as hidden fields and captures the conversion in PostHog with the same event_id. When a new version ships, check C4 flags every site that is behind and this plan carries the new pinned URL.
Where: Basin: the form's Webhooks setting
https://demo.os.catchdigital.io/api/ingest/cro_live_2z2pebt56tfsdb4v
Pasted by a person. Add a webhook with this URL, format JSON (original, not wrapped). Turn off the duplicate-email spam rule on forms that submit more than once per session. The same URL accepts Basin, Webflow, Typeform, HubSpot and flat JSON; the shape is detected per submission.
Where: Webflow: project settings
<style id="catch-af">body{opacity:0!important}</style>
<script>(function(){var s=document.getElementById("catch-af");function go(){if(s&&s.parentNode)s.parentNode.removeChild(s);s=null}var t=setTimeout(go,2000);function arm(){if(window.posthog&&posthog.onFeatureFlags){posthog.onFeatureFlags(function(){clearTimeout(t);go()})}else{setTimeout(arm,50)}}arm()})();</script>Paste the anti-flicker snippet into the head, after the PostHog snippet (C9 looks for it), and allow no-code experiments on the PostHog project (Experiments, New, No-code: a person turns this on once). Not needed for learning.
Installed May 23, 2026 via Webflow (Webflow custom code), tracking.js 7.3.0.