Blog

Notes on performance, multilingual builds and automation — what actually worked, and what it cost to get there.

4 posts

Cover reading 'Crawl the sites that block crawlers', with the steps relay, extension, your profile and crawl.

seo

Building an SEO crawler that borrows my own Chrome

Bot protection does not break a crawl loudly. It returns a clean report with a third of the site missing. Krawlify fixes that by driving the browser I am already signed in to, over the standard DevTools Protocol, in tabs it opens for itself.

9 min read

Read Article
Cover reading 'Shipping WordPress from a pipeline', with the steps build, test, migrate, cutover and verify.

wordpress

Deploying WordPress from GitLab CI/CD

Promoting a staging database to production without corrupting serialised data, cutting DNS over through the Cloudflare API, and putting both back when the smoke test fails.

9 min read

Read Article
Cover reading 'Training with a model in the loop' over a heart-rate trace, with the steps sync, analyse, plan and adapt.

garmin

How I optimise my workouts with AI and Garmin MCP

A morning n8n run that reads my last two weeks of lifting through a Garmin MCP server, plans the next strength session, and writes it back into Garmin Connect so it is on the watch before I get to the gym.

9 min read

Read Article
Cover reading 'Tokens, not passwords' beside a padlock, with the steps login, ticket, oauth1 and oauth2.

garmin

Fixing Garmin MCP auth: extracting OAuth tokens with Node

Garmin login cannot be scripted reliably, so I stopped trying. A Playwright window, one service ticket and two OAuth exchanges produce tokens that every garth-based tool already knows how to read, and no password ends up in a config file.

8 min read

Read Article

Like what you see?

Let's build something great together.

Get in Touch