Writing
Practical tutorials on WordPress, React/Next.js, performance optimization, and technical SEO — from real-world projects.GA4 Scroll Events Not Firing in Next.js App Router
GA4 enhanced measurement scroll events stop firing after the first page load in Next.js App Router? Here is why client navigation kills them and the exact fix.
React 19.2 useActionState Pending Stuck After Navigation
React 19.2 useActionState leaves isPending true after a Next.js redirect or router.push? Here is why the state never resets and the pattern that fixes it.
WooCommerce Cart Block Shows Wrong Shipping After Zone Overlap
WooCommerce 10.8 cart block returning the wrong shipping rate when two zones overlap on the same postcode? Here is why the picker grabs the wrong zone and the exact fix.

FCP Regression After Enabling React Compiler in Next.js 16
First Contentful Paint regressed after turning on reactCompiler in Next.js 16? Here is why the runtime cache pushes paint and the boundary fix that recovers it.

Next.js 16 typedRoutes Breaks Dynamic Link href TypeScript
Next.js 16 typedRoutes throwing 'href is not assignable to Route' on dynamic Link components? Here is why the type tightened and the cast that compiles cleanly.

WooCommerce Checkout Block Creating Duplicate Orders
WooCommerce checkout block placing the same order twice and charging cards twice? Here is why the second submit fires and the idempotency fix that holds.
INP Regression After Adding Cloudflare Turnstile Widget Fix
INP score tanked on mobile after adding the Cloudflare Turnstile widget? Here is why the embed script blocks interaction and the lazy-load fix that works.
Next.js 16 Link Prefetch Hammering Your RSC Endpoint
Next.js 16 Link prefetch flooding your RSC endpoint on hover? Here is why the new heuristic fires too eagerly and the prefetch={false} fix that holds.
WooCommerce Analytics Empty After HPOS Migration: The Fix
WooCommerce Analytics dashboard showing zero orders after enabling HPOS? Here is why the lookup tables never rebuilt and the WP-CLI fix that restores it.