0 inputs

State export — paste into thread

Self-describing JSON envelope with every decision, completed step, and comment. Paste the full block (including triple-backticks) into the Claude thread — Claude parses it, banks decisions, and responds to comments.

v1-firstsync · PageFly → Native OS 2.0

Brainzyme Shopify Build Plan

Replicate existing landing pages as native Liquid sections, then iterate variants under Shopify's native A/B testing. Closed-loop optimisation: daily cron evaluates 3/7-day data, weekly Clarity heatmap batch generates new hypotheses, winning variants get cut over via theme push under CEP protocol.

Current Phase
0
Environment & Tooling
Progress
0%
0 / 0 steps
Calum Action
2 open
Home v2 review · ADHD videos
Last Cron Run
not yet scheduled
What’s New SHIPPED
2026-05-02 SEO equity recovery (UK Tier-1 + 9 sister URLs) · 4-store localised quiz framework · honeypot data assets shipped · strategy consolidated
SEO recovery: UK /pages/quiz-are-you-suffering-from-brain-fog (page-1 ranking, 579 clicks/16mo, position 9.8) was unpublished + 301'd to homepage — kill chain restored. Activated existing page id 138908369179, deleted blocking redirect, bound to bz-quiz template. Mirrored across US (page id 80385933504 + 79409545408 + 80385114304), DE (101741494536 + 101873320200 + 101873942792), FR (86109257833 + 81715134569 + 86103162985). Plus FR /pages/test junk redirect cleared.
4-store quiz framework: US (Optimisation lens, FDA, US English), DE (Precision lens, HWG "kein Arzneimittel"), FR (Balance lens, ANSM "ce produit n'est pas un médicament") localised quiz data snippets shipped via Sonnet sub-agents. Renderer updated cross-store to switch on request.locale.iso_code.
Honeypot E-E-A-T assets: 25-FAQ section + FAQPage JSON-LD · "What's actually behind UK brain fog? — 2026 data overview" Cause Breakdown table (6 verified UK stats + Dataset JSON-LD + 6 medical experts as named reviewers) · UK Brain Fog Index v1.0 (preliminary) methodology section + scoring spec. All shipped as Liquid sections — fully crawlable by AI bots (robots.txt verified clean across 4 stores).
Strategy consolidation: memory/CANONICAL_strategy.md created (369 lines, 11 sections). Three-Layer Operating Model now Strategy: Consolidated. protected_seo_tier field added to pages_registry. Protected SEO Assets tier table added to onpage-audit SOP. 17 source strategy files marked _superseded_by.
Schedule: Windows Task Scheduler entry (forthcoming) for 30d + 60d GSC re-pull to measure recovery delta.
2026-04-26 QC sweep + 3 research-backed pre-emptions + new Theme Hardening SOP
Multi-agent stress test: Browser QC (Playwright) + Embla 8.6.0 research + Shopify theme arch research, all parallel.
Pre-emptions shipped: CSR carousel loop:false (2-slide bug fix), media-features watchResize:false (perf), backwards-compat bz-carousel.liquid alias snippet.
Hard-won lessons banked: LiquidDoc {%- doc -%} is Theme Check ONLY (NOT runtime); snippet renames need backwards-compat alias to survive cache rotation (days/weeks).
New SOP: v4.0/shopify-build/v1-firstsync/THEME_HARDENING_SOP.md — canonical 4-phase methodology for stress-testing pages before user test.
2026-04-26 home-v2 final 4 carousels migrated Splide → Embla · Splide library deleted (-44KB)
home-v2-community-photos / home-v2-judge-me-reviews / home-v2-media-features / home-v2-social-responsibility — all 4 now run on Embla. Splide 4.1.4 library files removed from theme. Drift hook tightened (G20) to prevent false-positives on commit messages mentioning script filenames.
2026-04-25 Theme Component SOP shipped · Phase 1: bz-component-carousel extracted as single source of truth
New canonical architecture — every reusable theme block now follows bz-{component}.liquid (renderer) + bz-{component}-data-{variant}.liquid (data) + BEM CSS + JSON registry. SoT at v4.0/shopify-build/v1-firstsync/THEME_COMPONENT_SOP.md.
First component extracted: customer + medical carousels deduplicated across F2 article + home-v2 page. Edit a video URL or customer name in ONE file — ripples to both pages.
Mandatory rule: on every Shopify theme touch, ask “should this be a snippet?” (SOP §2). New gotchas G19 (article-cache stickiness) + G21 (rename needs alias) + G22 (LiquidDoc is tooling-only) added to publish SOP.
2026-04-25 F2 ADHD article = canonical · variants A–F retired (404) + archived
F2 won creative review. 6 dev variants (A–F) unpublished + 12 theme assets deleted + 6 publish configs archived to _archive/2026-04-25-adhd-variants-a-to-f/. F2 production URL: /blogs/neurodiversity-tips/adhd-supplements-guide-f2.
Bug fixes shipped this round: sound toggle (double-bound click handler), iOS Splide snap-back → Embla migration, mobile carousel -20%, image-vs-video height parity in mixed carousels.
2026-04-25 CLAUDE.md §3 — Karpathy Principle #5: never bundle preventative fixes with confirmed fixes
New core engineering rule. Confirmed fix = known bug + known cause + verified resolution. Preventative fix = hypothesis. If you bundle them and the next test shows a regression, you can’t tell which one caused it without rolling back both. Sequence: ship confirmed fix → user verifies on actual device → next change. Banked from the iOS video bug session where 3 research-recommended preventative fixes silently broke video playback.
2026-04-25 illustration_run.py shipped · Page Review tab in Creative Review
illustration_run.py — single config-driven entry script for FLUX illustration jobs. Replaces 8 bespoke gen_adhd_illustrations*.py scripts (archived). OCR-first QC via qc_illustration_v1.py (claude-haiku-4.5 vision). 3 ADHD configs converted to JSON. Tomorrow: install Tesseract binary to activate OCR gate.
Page Review tab — new section in Creative Review dashboard. Section-by-section card review with screenshot, key elements, decision dropdown, note + JSON export. First instance: F2 ADHD page fine-tune.
Calum Action Centre

Decisions Pending

Two open decisions on the Phase 0 path. Recommendations included — tap "Confirm" to lock in or use the secondary action to override.

Decision 1 — A/B Testing Mechanism

Pro plan, not Plus. Three valid paths. The mechanism dictates how Phase 3 launches and what data the daily cron pulls.

B
Shopify native A/B (free app) Server-side template switching, randomised. The free "Shopify A/B Testing" app (2024+) brings this to most plans below Plus — needs verification in your admin. Adds value if/when we want to test organic traffic too.
C
GA4 alone Two URLs, GA4 measures who converted on each. Doesn't randomise — users self-select via the ad they clicked. Fine as the metric layer for option A; not a split mechanism on its own.

Decision 2 — Pilot Page (revised 2026-04-19)

Locked: ADHD Supplements Guide (UK). Existing campaign is expensive in SERP; LP already exists and is editorially correct. Pilot scope is port-only into a Liquid blog template — inherit Shopify chrome (header / nav / footer / Judge.me), no copy or structure changes. Pilot does one new thing (blog template) instead of two. GABA Precursor moves to Phase 1 #2 to harden the product-page section schema.

B
Revert to GABA Precursor (UK) If "fix" needs to include copy/structure changes, the pilot should not bundle a content pivot with platform R&D — revert to GABA-first.
2 decisions on this tab

Generate Shopify Custom App Access Token

One-time setup, ~5 minutes. Required for the Shopify Admin MCP (Layer 2). Without this token, Claude can't push themes, manage products, or run programmatic admin tasks. Do this in your Shopify admin (UK store first; we'll add others later if needed).

Safety: The token only shows ONCE when revealed. Copy immediately. Never commit to git — it goes in .env.
1
Enable custom app development (one-time, if not already) Shopify admin → Settings (bottom-left) → Apps and sales channelsDevelop apps (top-right). If it shows "Allow custom app development", click and confirm.
2
Create the app Click Create an app. Name: Claude Build MCP. Confirm with Create app.
3
Configure Admin API scopes On the app page, click Configuration → under Admin API integration click Configure. Tick:
  • read_themes, write_themes — essential for theme push
  • read_products, write_products
  • read_orders (no write)
  • read_customers (no write)
  • read_content, write_content (blog/page content)
  • read_metafields, write_metafields
Skip the Storefront API integration entirely. Click Save.
4
Install the app + reveal the token Click Install app (top-right) and confirm. On the API credentials tab, you'll see Admin API access token. Click Reveal token once — copy immediately (starts shpat_).
5
Find your .myshopify.com domain Shopify admin → SettingsDomains. The myshopify.com URL (not the public-facing one) — looks like brainzyme-uk-store.myshopify.com.
6
Hand it to Claude Either paste in chat or save to F:\Claude Root\v4.0\shopify-build\v1-firstsync\.env:
SHOPIFY_ADMIN_TOKEN=shpat_xxxxx
SHOPIFY_DOMAIN=brainzyme-uk-store.myshopify.com
Claude will verify .env is gitignored before any commit.
0 / 6 done

Set Up Microsoft Clarity (Baseline Heatmap Data)

Clarity is not yet deployed on the storefront. Install now — it needs ~2 weeks of data on the existing PageFly pages BEFORE we replace them, otherwise the optimisation loop has no before/after comparison.

Why this is urgent: Without baseline heatmap data on the current pages, we can't measure whether the native Liquid replicas are improving anything. Every day of delay = a day less baseline. Free tool, 5 minute install.
1
Sign up for Clarity (if not already) Go to clarity.microsoft.com. Sign in with a Microsoft account (or create free). Free, unlimited sessions, no credit card.
2
Create a Brainzyme project New project → name: Brainzyme UK Storefront. Website: brainzyme.com. Category: Health/Wellness. Save.
3
Hand the project ID to Claude On the project dashboard, look for Setup or Tracking code. The project ID is a short alphanumeric string (e.g. abc1234xyz). Paste it in chat. Claude will deploy the tracking snippet to theme.liquid <head> on the LIVE theme under CEP protocol.
Optional but useful: generate a Clarity API token (Settings → Data export → Generate token) so the Clarity MCP can pull data programmatically. We don't strictly need it for the install — only for Phase 5's weekly batch.
0 / 3 done

A/B Testing Method — Decision Detail

This is Decision 1 from the Decisions tab, with the full reasoning so you can review before confirming. Same comparison — just expanded.

Method How it works Pros Cons
A — Google Ads ad-level split Recommended Duplicate the ad in Google Ads → each ad points to a different LP URL (control vs variant). Google Ads rotates 50/50. No Shopify dependency. Attribution lives in Google Ads where you already work. Cleanest conversion data per variant. Works even if Shopify A/B is unavailable. Only randomises paid traffic (irrelevant for Brainzyme — paid is dominant). Need GA4 for secondary metrics like scroll depth.
B — Shopify native A/B (free app) The "Shopify A/B Testing" free app (2024+) does server-side template swapping with randomised assignment. Splits all traffic including organic. No client flicker (server-side). Standard within Shopify reporting. Needs verification it's available on Pro plan (was Plus-only historically). One more app installed. App-based reliability risk.
C — GA4 alone Two LP URLs, GA4 events tagged by URL, comparison in GA4 Explorations. Zero install overhead. Familiar tool. NOT a split mechanism — users self-select by the ad/link they click. Useful as the measurement layer for Option A, not standalone.
Cron impact: Option A → daily cron pulls Google Ads API + GA4 API. Option B → cron pulls Shopify A/B Testing app data + GA4. Option C → cron pulls GA4 only and does fuzzy attribution (less reliable).
No choice yet

Shopify A/B Testing Plan Availability Check

Quick lookup task. Even if we go with Option A (Google Ads split) as primary, knowing whether Shopify A/B is available is useful for testing organic traffic later.

1
Check Shopify admin for the A/B testing app Shopify admin → Apps → search "A/B Testing". If you see "Shopify A/B Testing" as installable (free, by Shopify), your plan supports it. Some Shopify admins surface it under Marketing → Experiments.
2
Report back One word: available or not available. If available — we'll keep it as a backup mechanism for organic-traffic tests later. If not — Option A (Google Ads split) is doubly the right call.
0 / 2 done

Published Pages & Master SOP

Living tracker of every page/article we've published to Brainzyme Shopify stores. Each row links to its config (audit trail) + live URL. The SOP at the top is the canonical workflow — read before any new publish.

📋 Master SOP — Shopify Page Publish v1.5

Every publish job follows this SOP. Multi-agent build pattern, Path B default cutover, gotchas catalog, rollback playbook. Update with every new pattern learned.

Doc: F:/Claude Root/v4.0/shopify-build/v1-firstsync/SHOPIFY_PAGE_PUBLISH_SOP.md Generic script: tools/shopify_publish_page.py Bespoke orchestrators: tools/publish_home_v2.py (Home v2 ghost — phases create/publish/smoke/unpublish/status/delete) Per-job configs: config/shopify_publish/<slug>.json Memory pointer: feedback_shopify_publish_sop.md
🔒 v1.2 lock — Browserbase QC mandate
All live-page verification must use Browserbase MCP (cookieless fresh session). Chrome MCP is banned for post-cutover QC — staff cookies serve stale HTML and mask drift. Chrome MCP still allowed for authenticated admin tasks (Shopify admin UI, Drive uploads). See SOP §3.1, §4, §9 G13, §13.5.
📚 Vocabulary gate (§2 pre-flight)
Run tools/product_matrix.py --validate-copy <page> before every publish. PRO = motivation (Class 1). ELITE = stress relief (Class 1). Cross-class compounds (e.g. "calm focus", "drive formula") banned as SKU labels.
🚫 v1.3 lock — G15: never call video.load() after mount
In Splide video carousels, never call v.load() inside first-frame init. On cache-miss the loadedmetadata listener fires after the user clicks play — load() then aborts the in-flight fetch and kills playback 2–5s in. Use currentTime + loadedmetadata listener only. Fix shipped 2026-04-21 to assets/adhd-supplements-guide.js:771. See SOP §9 G15 + §13.2.
🛡️ v1.4 lock — Runtime gate + 6-agent hardening audit
2026-04-21 hardening audit dispatched 6 parallel Sonnet agents (JS runtime / Liquid+schema / Performance / A11y / Mobile/iOS / Deploy pipeline) against the live ADHD article + Home v2 ghost. 56 findings, distilled into 6 convergence items:
  1. Splide CDN version mismatch (floating @4 vs pinned @4.1.4)
  2. No JS runtime check in smoke test → runtime gate added
  3. Duplicate Splide class selectors cause double-bind on Home v2
  4. video.play() in BZ.toggleVideo lacks .catch() fallback (G15 cousin)
  5. keyboard: 'global' fires both carousels simultaneously
  6. Clone-slide listener gap — mobile users landing on cloned slide get dead play button
New tool: tools/shopify_runtime_gate.py — Playwright pageerror + console.error capture + readyState probe + G15 regression test.
Path forward: Path B shipped (runtime gate + SOP v1.4). Path A next (ship the 6 convergence fixes).
🧪 Path A shipped — Post-hardening verification (2026-04-22)
All 11 Path A fixes shipped to live ADHD article in one publish (shopify_publish_page.py --force, 7 files uploaded 200 OK, all 5 smoke markers PASS):
  • Splide CDN (@4 / @4.1.4) → vendored assets/splide-4.1.4.min.{js,css} via snippets/splide-assets.liquid (media=print async CSS + defer JS)
  • BZ.toggleVideo.catch() muted fallback added (G15 cousin closed)
  • Splide keyboard: 'global''focused' (dual-fire stopped)
  • is-initialized guard + attachVideoControls moved into splide.on('mounted', …) (clone-slide dead-button fixed)
  • Symptom checker 6× role="checkbox" tabindex="0" aria-checked + Space/Enter keydown (a11y)
  • Hardcoded brainzyme.myshopify.com/cart/…{{ routes.cart_url }}/add?id=…&discount=WELCOME10 (liquid:495, 973)
  • iOS auto-zoom fix: .pp-nhs-form select 14.5px → 16px
  • preload="metadata""none" across 20 videos in ADHD section + 34 in Home v2 section
  • Shelf-grid <noscript> 3-product fallback
Runtime gate verification (tmp/runtime_gate_adhd_post_path_a.json, desktop viewport, 2026-04-22 10:35 BST):
[PASS] zero pageerrors · [PASS] zero console.error · [PASS] all 44 videos preload=none (Path A change) · [PASS] G15 regression: video playing at t=6s (currentTime=5.708s, paused=False)
Path A → LIVE & VERIFIED. 6 lower-priority findings (captions, prefers-reduced-motion, srcset, etc.) deferred to next sprint per audit.
🔑 v1.5 lock — Modern 2026 admin-API token flow (G17)
Shopify removed the legacy shpat_ reveal on Develop-apps Custom Apps post-2026-01-01. The Admin UI now exposes only Client ID + Client Secret (shpss_…). Tokens must be minted via OAuth client_credentials grant.
python tools/shopify_get_token.py --store {uk|us|de|fr}
  • Run before any publish if .env lacks {PREFIX}_SHOPIFY_ADMIN_TOKEN, after any app reinstall (uninstall kills every shpat_ ever issued), or on any 401 Invalid API key.
  • Never ask Calum for an admin token — he doesn't have one to give. Ask only for Client ID + Client Secret if missing.
  • Never treat 401 as transient. The token is stale, not throttled. Sleep/retry will not fix it.
  • tools/shopify_publish_page.py hardened 2026-04-22 with fail-fast auth probe + the same hint in its error message.
Auth health check (all 4 stores, 2026-04-22 12:55 BST):
[PASS] UK → brainzyme.myshopify.com /shop.json → 200 OK (Brainzyme, GBP, unlimited)
[PASS] US → brainzyme-us.myshopify.com /shop.json → 200 OK (Brainzyme.US, USD, professional)
[PASS] DE → brainzyme-de.myshopify.com /shop.json → 200 OK (Brainzyme.DE, EUR, professional)
[PASS] FR → brainzyme-fr.myshopify.com /shop.json → 200 OK (Brainzyme.FR, EUR, professional)
Banked to memory/feedback_shopify_2026_admin_api_auth.md + memory/project_backend_access_registry.md §5b · SOP §1.5 + G17 + §10 change-history row.
🔗 4-store GitHub Integration — LIVE 2026-04-22
All 4 Shopify stores now back up to GitHub and auto-sync new commits to a linked unpublished theme. Future git push origin main on any F:/brainzyme-themes/{uk,us,de,fr}/ repo deploys to that store's ghost theme — live themes never touched until Calum manually publishes in each admin.
UK → HappyUser89/brainzyme-theme-uk → theme id=185834471805 (live since 2026-04-19)
US → HappyUser89/brainzyme-theme-us → theme id=152635375808 (live since 2026-04-22 11:24)
DE → HappyUser89/brainzyme-theme-de → theme id=196135518472 (live since 2026-04-22 12:51)
FR → HappyUser89/brainzyme-theme-fr → theme id=199165313366 (live since 2026-04-22 12:52)
Full mapping (credentials → consumers → repos → theme IDs → live theme IDs to never push to): memory/project_backend_access_registry.md §5b.

🤖 Multi-Agent Build Pattern SOP §3

For any port >500 lines, dispatch 6 Sonnet sub-agents in series. Main session orchestrates only — never reads transcripts or large files into its own context. Proven on ADHD article (round 1 + 2) and Home v2 ghost.

1 · Inventory
Source asset/copy/CDN audit
2 · Theme Inspect
Selectors, hooks, conflicts
3 · Liquid Build
Section + template + assets
4 · Browserbase QC
Cookieless smoke + render
5 · Fix
Targeted diff agents
6 · Live QC
Post-publish verify + log

Each agent gets a self-contained brief with IDs, file paths, and explicit success criteria. Phase B reviewer agent (Opus or Sonnet) gates Phase C. Home v2 ghost added a 7th phase: publish → QC → unpublish via bespoke orchestrator.

✅ Live (1)

Slug Type Store First published Live URL QC Config
adhd-supplements-guide article UK 2026-04-20 13:06 BST brainzyme.com/…/adhd… ✅ PASS + Round-2 LIVE + G15 fix (17:20 BST round-2 fixes: Zinc & Choline card replaces false iron claim, Starter Bundle packshot fixed, accordion padding corrected, shelf Option B dual-CTA live, Splide dual-carousel live. Original 13:30 QC: 9 evidence + 6 FAQ accordions, 3 planner tabs, 3 cart permalinks via Chrome MCP) 🔧 2026-04-21 G15 fix shipped: deleted v.load() at adhd-supplements-guide.js:771 — resolves click-to-play stopping after 2–5s on cache-miss visits. Shared asset, so Home v2 ghost is covered too. ⚠️ Pre-v1.2 Chrome MCP run — future re-QC must use Browserbase per SOP §13.5. 🛡️ 2026-04-21 hardening audit flagged 6 convergence items + 50 lower-priority findings — fixes in Path A batch. ✅ 2026-04-22 Path A shipped — all 11 fixes live, runtime gate PASS (zero errors, G15 regression video playing at t=6s). 6 lower-pri items deferred. config/shopify_publish/adhd-supplements-guide.json

✅ Round-2 feedback shipped 2026-04-20 17:20 BST via 4-agent consolidation (α content+lexicon, β bundle+padding, γ shelf UX, δ Splide carousels). Published via shopify_publish_page.py --force. Live server-side content confirmed via credentials: 'omit' fetch. SOP bumped v1.0 → v1.1 with content-audit gate (§2), G11–G14 gotchas (§9), §13 reusable patterns (accordion padding, Splide dual-carousel, shelf dual-CTA, credentials-omit QC). Subsequently bumped v1.1 → v1.2 (2026-04-20) hardwiring the Browserbase QC mandate (§3.1, §4, §9 G13 update, §13.5 cookieless live-page QC pattern). Then bumped v1.2 → v1.3 (2026-04-21) adding G15 (video.load() kills in-flight playback on cache-miss) after Calum bug report — one-line fix deployed to adhd-supplements-guide.js via --force, covers ADHD article + Home v2 ghost via shared asset.

⚠️ Pending content: Splide carousel slots hold placeholder slides — Calum to supply 3 customer videos + 3 medical-professional videos before declaring complete.

👻 Ghost / Unpublished (1)

Pages that exist in Shopify but are intentionally unpublished — built for review, comparison, or staged promotion. Each ghost page returns 404 publicly until toggled live via its orchestrator script.

Slug Type Store Built URL (when published) QC Briefing / Config
home-v2 GHOST page UK 2026-04-20 22:35 BST brainzyme.com/pages/home-v2 (404 while unpublished) ✅ PASS Browserbase smoke 200, all 5 markers present, noindex confirmed, 49 cards in DOM, customer-video click-to-play OK. Page ID 696813158781. briefing ↗
config/shopify_publish/home-v2.json

⚠️ Awaiting Calum decision: keep new Splide carousels appended below old PageFly ones (current state) · hide old via CSS · promote ghost to live homepage · or delete. Toggle live for review with python tools/publish_home_v2.py publish; revert with unpublish.

⏳ Pending (0)

No pages currently in build queue. Add a row when a new port/build kicks off.

📋 Backlog (planned, not yet started)

Slug Type Markets Why Source
gaba-precursor-education page (product-adjacent) UK + US Phase 1 #2 — harden product-page section schema. Unblocks 4 paused Wave 2 campaigns (~£50/day). F:\brainzyme-git\landing-pages\precursor-education.html
dopamine-guide article UK Pairs with GABA Precursor for the dopamine/GABA dual-mechanism story. to be drafted
brain-fog article UK + US Total gap — no draft, no spec. UK + US PMax need this. none
gut-brain article DE + US 4 campaigns ~£50/day. Unblocks DE Gut-Hirn (currently policy-blocked). drafted spec, not built
perimenopause article UK Brain fog × menopause cluster. 9 proven headlines already in copy_headline_bank.md. copy approved, no LP yet

⚠️ Drift watch

Live theme 178073469309 diverges from git-backed unpublished theme 185834471805 on the following Path B paths. Future edits MUST go through local repo + re-run publish script — never via Shopify theme editor.

  • assets/adhd-supplements-guide.css
  • assets/adhd-supplements-guide.js
  • sections/adhd-supplements-guide.liquid
  • templates/article.adhd-supplements-guide.json

Open work: extend tools/shopify_theme_drift_check.py to flag live-theme divergence on paths listed in config/shopify_publish/*.json.

SOP version v1.5 · 1 published · 1 ghost · 5 backlog

SEO & Schema Audit

The full on-page audit workstream (headings · meta · schema) has its own dashboard and its own SOP — this tab is just a pointer. Entity graph, FAQ content, gap queue, and live findings all live there.

🔍
On-Page Audit Dashboard
v1.0 · scaffold · session 46 · 2026-04-23
Open dashboard →
Folder created SOP v1.0 locked Entity graph v1.0 19 FAQ Q&As banked Extractor not yet built Schema snippet not yet deployed

Canonical paths

Workstream folder F:/Claude Root/marketing/seo/onpage-audit/
Master SOP marketing/seo/onpage-audit/SOP.md
Entity graph SSoT marketing/seo/onpage-audit/config/entity_graph.json
FAQ content SSoT marketing/seo/onpage-audit/config/faqs/*-faq.json
Change log marketing/seo/onpage-audit/CHANGELOG.md
Session memory/working-context/session-46-seo-schema-audit.md
Phases 0–5 documented in the standalone dashboard → open it
Analysis Archive
🎯
Pilot decision — GABA Precursor Education (UK)
Why this page first · 18 Apr

Three reasons this is the right pilot:

  • Zero copy/design uncertainty — already built, hardened with 26 passing browser tests. Live at F:\brainzyme-git\landing-pages\precursor-education.html (26KB). Full markdown spec at F:\Claude Root\v4.0\landing-pages\precursor-education-en.md (12KB).
  • Reusable template — modular component system (header / proof strip / product table / CTA / footer) maps cleanly onto Shopify section schema. Every section we build for this pilot becomes the foundation for Dopamine, ADHD-rebuild, Perimenopause, Brain Fog, Gut-Brain.
  • Unblocks paused spend — 4 Wave 2 campaigns (UK + US GABA Search + PMax) are PAUSED with audience signals already wired. Cutover frees them.

Full strategy doc: F:\Claude Root\v4.0\shopify-build\v1-firstsync\BUILD_STRATEGY.md

📊
Landing page priority queue (post-pilot)
8-rank queue with state, source files, unlocked spend · 18 Apr
#PageStateUnlocks
1 (PILOT)GABA Precursor (UK)Built + hardened4 GABA campaigns
2Dopamine Guide (UK)Built + AMBER cleared4 Dopamine campaigns
3Perimenopause (UK + US)COPY GAP — headlines only4 campaigns ≈ £83/day. Highest-scoring gap (#1: 82.8). 8,220 searches/mo.
4Brain Fog (UK)TOTAL GAP — no draft, no specUK + US PMax. You explicitly flagged this.
5Gut-Brain (DE/US)Drafted spec, not built4 campaigns ≈ £50/day. Unblocks DE Gut-Hirn (policy-blocked)
6ADHD rebuild (UK)Live but not Shopify-nativeRecovers 76% ROAS Wave 8.2c
7DE/FR localisations of GABA + DopamineStubs only8 Wave 5 campaigns
8DE/FR Ritalin ComparisonStubs · RED compliance2 deployed campaigns · gated on legal
🔮
ADHD page verdict — rebuild as Liquid blog
Why your "doesn't look part of the website" instinct is right · 18 Apr

The published adhd-supplements-guide.html (59KB) uses the right editorial structure (stat cards, myth/fact toggles, interactive symptom checker, NHC claims only) — that's deliberate to win Quality Score on ADHD keywords by reading as a buyer's guide, not a product page. Don't restyle the editorial content.

The actual problem is hosting context. It currently lives on GitHub Pages with its own minimal chrome — no Shopify theme header, no announcement bar, no Judge.me widget, no full footer.

Fix: rebuild as a Liquid blog page in the Shopify theme so it inherits the global chrome (header / nav / footer / Judge.me) and lives at brainzyme.com/blogs/.... Same editorial content, but visually part of the site. This becomes the template for every blog-style LP after this (Brain Fog spec, Perimenopause editorial framing).

🔥
Why Clarity baseline data matters now
The 2-week clock starts the moment we install · 18 Apr

Originally I had Clarity install as a Phase 5 prerequisite. That was wrong. The whole optimisation loop depends on a before/after comparison — if we don't have heatmap data on the existing PageFly pages BEFORE we replace them, we can't measure whether the native Liquid replicas are improving things.

Two reasons to install today:

  • Clarity needs ~2 weeks of session data to surface meaningful patterns (rage clicks, scroll cliffs, dead clicks)
  • If we install on the day we ship the replica, we have zero baseline — we're measuring noise against noise

It's a 3-line snippet in theme.liquid <head>. Free tool. The Setup tab has the install path.

🚫
Compliance & copy blockers
What's open · what blocks which page
  • Perimenopause LP spec — AMBER. Needs ASA/FTC review before copy is written.
  • Brain Fog LP spec — no copy exists at all. Needs outline + draft.
  • Calum Q1–Q6 still open in v4.0/landing-page-build-plan.md lines 477–482.
  • Wave 1.5 Q1–Q4 open in v4.0/go-live-rundown.md lines 127–131. Q5 = video testimonials (0/67 pages have video — largest LP gap per audit).
  • Judge.me public API token — becomes irrelevant once we're native Liquid (one more reason to be native).
  • DNS for shop.brainzyme.com/de/fr/us — secondary, doesn't block pilot.
📁
Folder relocation — v1-firstsync moved under v4.0
Why co-location with v4.0 was the right call · 18 Apr

Was at F:\Claude Root\marketing\shopify\v1-firstsync\. Now at F:\Claude Root\v4.0\shopify-build\v1-firstsync\.

Reason: every strategic decision sources from v4.0 — landing-page-build-plan.md, go-live-rundown.md, landing-page-audit.md, landing-pages/*.md drafts. The Sonnet agent that produced the priority queue read 1,800+ lines from v4.0. Splitting "strategy" (v4.0) from "implementation" (marketing/shopify) put friction on every decision cycle. Co-location removes that.

Updated: session-38 working folder pointer, marketing/CLAUDE.md, v4.0/landing-page-build-plan.md now points to BUILD_STRATEGY.md.

Build Phases
00
Environment & Tooling Setup
One-time: MCPs, skill packs, theme baseline, folder skeleton
0/0
One-time setup. Pin model, install all MCP layers + skill packs, pull live theme baseline, scaffold the project folder structure. Almost entirely mechanical — delegate the bulk to a single Sonnet env-prep agent.
Pin Opus 4.7 globally ~/.claude/settings.json"model": "claude-opus-4-7". Already done in session 37.
Main
Install Shopify Dev MCP (Layer 1) — ✅ 19 Apr night claude mcp add --transport stdio shopify-dev-mcp -- npx -y @shopify/dev-mcp@latest · Registered in .claude.json. Activates on next Claude Code restart; /mcp post-restart confirms connection.
Main
Install Shopify Admin MCP (Layer 2) — ✅ 19 Apr (replaced with Python tools) Replaced the GeLi2001 community MCP with our own Python toolchain (tools/shopify_*.py) hitting the Shopify Admin API directly. UK + US tokens live in .env. Refresh via tools/shopify_get_token.py.
Main
Install Liquid + Theme skill packs (Layer 3) — ✅ 19 Apr night (3a only) Layer 3a benjaminsehl/liquid-skills ENABLED — 3 skills: shopify-liquid-themes, liquid-theme-standards, liquid-theme-a11y. Install: claude plugin marketplace add benjaminsehl/liquid-skillsclaude plugin install shopify-theme-skills@shopify-liquid-theme-skills. Layer 3b dylanreed/shopify-theme-design SKIPPED — repo lacks .claude-plugin/marketplace.json so not installable as a Claude Code plugin (manifest.json is for a different format). Layer 3c davila7/shopify-development not yet installed.
Main
Install Frontend Design skill (Layer 4) — ✅ 19 Apr night Anthropic official. Installed via anthropics/skills marketplace, plugin example-skills (16 skills bundled: frontend-design, theme-factory, brand-guidelines, canvas-design, algorithmic-art, web-artifacts-builder, webapp-testing, mcp-builder, skill-creator, slack-gif-creator, internal-comms, doc-coauthoring, claude-api, plus xlsx/docx/pptx/pdf). Two more plugins available in same marketplace if needed: document-skills, claude-api. Pushes design output away from generic AI aesthetics.
Main
Install Microsoft Clarity MCP (Layer 5) npx @microsoft/clarity-mcp-server --clarity_api_token=... · Hard limit: 10 req/day, 3-day window, 3 dimensions/request
Main
Deploy Clarity tracking script to LIVE theme (baseline data collection) Priority — do this first. Clarity is not yet deployed (confirmed 18 Apr). Add the tracking snippet to theme.liquid <head> on the live theme so heatmap data accumulates on the existing PageFly pages. Without ~2 weeks of baseline, the optimisation loop has no before/after comparison. Needs: Calum's Clarity project ID, then theme push under CEP protocol.
Main
Install GA4 MCP (Layer 6) GCP service account with read access to Brainzyme GA4 property.
Main
Synthesise inherited briefs into one INHERITED_BRIEF.md Read all 5 docs in marketing/shopify/ (homepage briefs v1+v2, elite-page changes, carousel analysis, compare-formulas JSX) → one canonical brief in v1-firstsync/
Sonnet Agent
Scaffold v1-firstsync project folder Create themes/, migration/{audits,previews,screenshots,source-html}/, clarity-insights/, variants/, cron-decisions/, DECISIONS.md, BRAND_SYSTEM.md, HYPOTHESIS_REGISTER.md
Sonnet Agent
Pull live Brainzyme theme to baseline shopify theme listshopify theme pull --live into themes/brainzyme-current/ → init git, commit baseline
Sonnet Agent
Verify .env gitignored, no tokens committed Hard safety check before any push. Grep history for token leak.
Main
Confirm Shopify A/B testing availability on plan Native theme A/B requires specific plan tiers. If unavailable, fall back to Intelligems or equivalent.
Calum
01
Pilot — ADHD Blog Port
Port the existing ADHD Supplements Guide into a Liquid blog template. Inherit Shopify chrome.
0/0
Pilot scope — frozen: port the editorial content as-is into a Shopify Liquid blog template so the page inherits header / announcement bar / nav / footer / Judge.me chrome. No copy rewrites, no funnel restructure, no editorial changes. The win is that it stops looking like a stranded GitHub Pages page and lives inside the Shopify site. The Liquid blog template built here becomes the foundation for every blog-style LP after (Brain Fog editorial, Perimenopause editorial, etc.).
✅ LIVE — 2026-04-20 13:06 BST. Live URL: brainzyme.com/blogs/neurodiversity-tips/adhd-supplements-guide. Path B (file-copy to live theme) chosen over Path A (publish unpublished theme) to minimise drift with humans editing via Shopify theme editor — 4 files net-additive on live theme 178073469309, zero overwrites. Article id 1000965407101 published. Smoke test 200 OK, 546KB, all 5 custom markers present. Wave 8.2c-v2 (campaign 11666978147 URL swap + £12 → £60+/day) unblocked. Reusable script: tools/shopify_copy_adhd_to_live.py.

Build history below (2026-04-19 night): Multi-agent build via 5 Sonnet sub-agents (Source Inventory → Theme Inspection → Liquid Build → Browser QC → Fix). Article id 1000965407101 on blog neurodiversity-tips (116589232509) with template_suffix adhd-supplements-guide, published=false. 4 files live on unpublished theme brainzyme-theme-uk/main (id 185834471805): template JSON, section Liquid (45.5KB), CSS (49.3KB post-fix), JS (59.8KB). Agent 4 QC PASSED on chrome inheritance, daily timeline, NHS lookup planner (3 regions tested), formula recommender (ELITE quiz path → £47 cart link with WELCOME10), all 6 sampled cart permalinks, no console errors, no Liquid leakage. One blocker fixed by Agent 5 (commit 14cc06f): toggleAccordion never added .open class + 200px max-height clipped 236px content. Be Yours uses BEM .accordion__content so no theme cascade conflict. Cutover decision pending: (A) publish theme, (B) file-copy to live, (C) preview-test-first. Wave 8.2c-v2 (campaign 11666978147 URL swap + £12 → £60+/day) gated on this. Steps 1-1 through 1-11 below were the original plan; actual execution compressed Recon/Replica/Visual-Diff steps into one direct port (source HTML → Liquid section, no static replica intermediate). See v4.0/deployment-log.md 2026-04-19 night (late).
Source page locked: ADHD Supplements Guide (UK) Source: F:\brainzyme-git\landing-pages\adhd-supplements-guide.html (59KB). Compliance + structural notes: memory/project_adhd_blog_landing_page.md. Decided 2026-04-19 (see Action Centre Decision 2).
Main
Page Recon Agent: fetch + extract Read the source HTML directly (no fetch needed — it's already in our git tree). Extract: editorial structure, custom JS (interactive symptom checker, myth/fact toggles), CSS that needs to survive port, image URLs. Output: migration/audits/adhd-supplements-guide.md.
Sonnet Agent
Screenshot Agent: 3-width visual baseline Playwright headless: 375px / 768px / 1280px full-page PNGs. Save to migration/screenshots/[slug]/baseline-{w}.png
Sonnet Agent
GA4 Agent: pull 30-day metrics for the pilot page Sessions, conversions, bounce, LCP, mobile/desktop split. Sets the baseline for all future tests.
Sonnet Agent
Static HTML/CSS replica build Build pixel-match static preview in migration/previews/[slug]/. No Liquid yet — pure HTML/CSS/JS.
Sonnet Agent
Visual diff vs original (3 widths) Side-by-side screenshots. Flag any pixel-level divergence >5%. Iterate until match.
Sonnet Agent
Calum approves replica preview Walk through the static preview in browser at all 3 widths. Approve before Liquid conversion.
Calum
Liquid conversion: HTML → OS 2.0 section Convert to sections/[slug].liquid + templates/page.[slug].json. Every editable value through {% schema %}. BEM CSS, Web Components for interactive bits, no jQuery.
Sonnet Agent
Compliance scan Grep for "neurodivergent", banned health verbs (treats/cures/prevents), named conditions (ADHD/autism/dementia). Any hit = halt + escalate.
Main
Push to dev theme (CEP protocol) shopify theme push --theme-id [dev] — NEVER --live. Confirm preview URL works.
Main
Lighthouse + a11y + responsive audit Targets: LCP <2.5s, CLS <0.1, INP <200ms. WCAG 2.2 AA. Test at 320/375/768/1024/1440px.
Sonnet Agent
02
Variant Generation
Hypothesis-driven variants of the replica for A/B testing
0/0
Now we test. Each variant = one hypothesis, one named element change, one predicted metric movement. Variants are full sibling sections (not flag-toggled in one section) so Shopify A/B testing can swap cleanly.
Open the hypothesis register Maintain v1-firstsync/HYPOTHESIS_REGISTER.md. Each row: page, element, current state, proposed change, predicted KPI movement, source (Clarity/intuition/copy test).
Main
Pick first 1–2 hypotheses to ship Rank by (predicted impact × ease). Ship the top, queue the rest.
Calum
Variant Builder Agent: clone & modify Per hypothesis: clone sections/[slug].liquidsections/[slug]-v2.liquid, apply targeted change, regenerate schema.
Sonnet Agent
Compliance gate per variant Same scan as 1-9. Variants drift, copy gets bolder — never skip.
Main
Push variant to dev theme Variant lives alongside control. CEP protocol again. Smoke-test the variant template URL.
Main
03
Shopify Native A/B Test Launch
Real-time variant switching, traffic split, KPI capture
0/0
Shopify's native A/B switches templates server-side at request time — no client flicker. Configure traffic split, define KPIs, set min sample, launch.
Create A/B test in Shopify admin Pick the page, attach control + variant template(s). Default 50/50 split unless we deliberately weight.
Main
Set primary & secondary KPIs Primary: ATC rate or purchase rate (page-dependent). Secondary: scroll depth, time on page, LCP. Document in HYPOTHESIS_REGISTER.md next to the hypothesis.
Main
Set minimum sample / duration 14 days OR 10,000 sessions per variant, whichever is longer. Don't call early.
Main
Verify Clarity is capturing both variants separately Confirm session recordings tag the variant. Otherwise heatmap data is muddied.
Main
Launch test & log to register Test goes live. Log start date, traffic source, expected end date in HYPOTHESIS_REGISTER.md.
Calum
04
Daily Cron — Decision Loop
Once a day, evaluate 3-day + 7-day data, recommend HOLD/EXTEND/DECIDE/KILL
0/0
The autonomous loop. Once-daily Claude run pulls A/B + GA4 data, evaluates each active test, writes a JSON decision file. Decisions show up in the panel below. Human approval still required for cutover, but Claude does the analytical heavy-lifting unattended.
Build cron decision script tools/shopify_ab_decision_cron.py: pulls Shopify A/B test results + GA4 deltas, computes significance, writes v1-firstsync/cron-decisions/YYYY-MM-DD.json
Sonnet Agent
Define decision rules CONTINUE (sample <min), DECIDE-WIN (p<0.05, +ve effect), DECIDE-LOSE (p<0.05, -ve effect), EXTEND (close to sig, trending), INVESTIGATE (anomaly, traffic drop, error spike). Document in v1-firstsync/CRON_RULES.md.
Main
Schedule via Windows Task Scheduler Daily at e.g. 06:00 local. Per feedback_cron_via_claude_desktop.md: Task Scheduler for direct-API scripts (Claude Desktop scheduled tasks have 4 blocking bugs).
Main
Pipe decisions JSON to this dashboard Cron script ends with git add cron-decisions/ && commit && push. Dashboard fetches latest JSON on load.
Sonnet Agent
Calum reviews decisions, approves cutover When DECIDE-WIN appears, decide whether to publish variant as new control (proceed to Phase 6).
Calum
05
Weekly Clarity Heatmap Loop
Mondays: batch Clarity queries (10/day budget) → new hypotheses
0/0
Clarity's 10-req-per-day cap forces a weekly batch rhythm. Monday plan, Monday pull, Monday synthesise → 2–4 new hypotheses for the variant queue.
Plan Monday's 10-query budget Which pages, which dimensions, what 3-day windows. Plan on paper first — never burn requests on exploration.
Main
Batch-execute via Clarity MCP Single agent runs all 10. Outputs raw responses to clarity-insights/raw/YYYY-MM-DD/
Sonnet Agent
Synthesise weekly insights doc clarity-insights/YYYY-MM-DD-week.md: drop-off zones, rage clicks, dead clicks, scroll cliffs, mobile/desktop divergence.
Sonnet Agent
Generate 2–4 hypotheses Each: page, element, predicted metric change, proposed Liquid edit. Append to HYPOTHESIS_REGISTER.md.
Main
Top 1–2 enter variant queue (Phase 2) Closes the loop. Heatmap insight → hypothesis → variant → A/B test → decision.
Main
06
Cutover & Iterate
Winning variant becomes new control; loop back to Phase 2
0/0
When a variant earns the cutover, it becomes the new baseline. Old control kept unpublished 30 days, decision logged, next hypothesis enters Phase 2.
Calum approves cutover Review the cron's DECIDE-WIN recommendation + raw data. Approve or override.
Calum
Publish winning variant Promote variant template to control. End the A/B test. CEP protocol on the publish.
Main
Keep old control as unpublished fallback (30 days) Insurance against measurement error. Delete after 30 days if winner holds.
Main
Log to DECISIONS.md Date, hypothesis, result, effect size, evidence. Permanent decision history.
Sonnet Agent
Pull next hypothesis from register → Phase 2 Loop continues. Closed-loop optimisation in motion.
Main
Hypothesis Register
No hypotheses yet. First entries land once the pilot replica ships and Phase 2 kicks off.
Cron Decision Log
No cron runs yet. First entries appear after Phase 4 step 4-3 (Task Scheduler) is wired up.
Agent Cast
Main
Opus 4.7. Owns architecture, compliance gate, brand voice approval, every shopify theme push (CEP), Clarity 10/day budget, hypothesis ranking, anything Calum-facing.
Sonnet Agent
Mechanical / isolatable / context-heavy work. Brief synthesis, page recon, screenshots, GA4 pulls, static HTML builds, Liquid conversion, Lighthouse runs, Clarity batches, decision script. Always isolated context, single deliverable per dispatch.
Calum
Approves: pilot URL, replica preview, hypothesis priority, cutover decisions, anything compliance-flagged. The loop runs without you on the analytical side — you stay in the seat for the decisions that matter.
Daily Cron
Once a day, unattended. Pulls 3-day + 7-day data, evaluates active tests, writes JSON decision. Surfaces here; you act on DECIDE-WIN.
Resources