// experience
Work I've done, from my side of the screen.
Not documentation, the actual experience of building something. What I set out to do, the walls I hit, and how I got past them. Client names stay out of it; the engineering doesn't.
Articles
Fixing broken lead attribution on a WordPress and HubSpot site
Every enquiry was reaching the CRM as Direct, so paid search could not be measured. One symptom hid five faults. I traced each from the outside in, rebuilt the attribution path, and proved it end to end through the mail log.
Fixing multi-second TTFB on WordPress behind an nginx proxy cache
An audit said the HTML wasn't cached; the real defect was a proxy cache revalidating a slow origin on every hit. I traced it from one clue, a HIT no faster than a MISS, fixed it in .htaccess with no CDN, and named the render floor honestly.
Fixing a decade-old migration with page-level 301s, and no server
A ten-year-old domain move done with no redirects, so every deep URL 404'd. I rebuilt the old URL inventory from archives and shipped page-level 301s from one Cloudflare Worker, no hosting.
Getting a restricted store approved on Google, then tracking every sale
One of Google's hardest verticals: from suspension and disapprovals to a fully approved catalog, a self-owned feed, value-based tracking through GTM, and the judgment to hold the launch until it could convert.
Recovering form leads from a sealed iframe into Meta
The form was a cross-origin Jobber iframe the browser couldn't see, so I went around it: polling the CRM's GraphQL API and posting hashed Lead events to Meta CAPI from one Cloudflare Worker, after a first build on n8n and Hugging Face had to be scrapped.
Moving conversion tracking server-side with Stape
Recovering lost conversion data with server-side GTM and first-party GA4, deduplicating Meta events, and working around cross-origin booking iframes, SSL and free-tier limits.