How I Diagnosed & Fixed an Algorithmic AdSense Limit (Next.js + Docker + Nginx)
How I traced an AdSense invalid traffic limit to masked visitor IPs, duplicate frontend ad requests, and Auto Ads—and the four-part remediation that restored coverage.
Starting the interactive experience…
CURRENTLY BUILDINGBAKED 3D SCENES
So I’ve started building entire interactive 3D environments for them.
This is Creator’s Command Centre, one of my first experiments: designed in Blender, baked for performance, and running completely inside the browser.
Eventually these scenes will become downloadable, customisable website experiences, they even work in a VR Headset. Have a play around.
High-detail baked scenes
Rotate, zoom & customise
Put on your VR headset & explore
I may have gone slightly
overboard with this one.
THE PERSONAL SPACE OF JOE GILMORE
Thoughts, experiments, and things I’ve learned along the way. A little web development, a little design, and a lot of figuring things out.
THE NOTEBOOK
How I traced an AdSense invalid traffic limit to masked visitor IPs, duplicate frontend ad requests, and Auto Ads—and the four-part remediation that restored coverage.
How the Gilmore Home headset scene turns Quest controllers and Vision Pro hands into the same pointer UI — a recipe you can drop onto any React Three Fiber scene.
A simple little macOS automation that announces the time every hour while Work Focus is active, follows your Mac volume, and never shouts at you louder than 40%.
Updated for 2025 — build a fully configured Expo Go + Tailwind + NativeWind + TypeScript app in under 2 minutes using a single command.
Want to run a script that plays a sound everytime your network connection drops out or comes back online? Use this script to help you with testing your home or office network connection
Using Sortable Lists in React is fairly easy, in NextJS it's a little bit trickier. Here's how to do it with Beautiful DnD and DnD Kit.
OUT IN THE WORLD
GOOD THINGS START WITH A CONVERSATION