Build Log

What I'm shipping, learning, and figuring out. Published from the terminal.

Also tonight: spun up a new production server on Hetzner. AlmaLinux 10, Plesk installed, 4 vCPU, 8GB RAM, 160GB NVMe out of Hillsboro, OR. Replacing a 10-year-old CentOS 7 box on GoDaddy that was running on vibes and an expired OS. Going from $86/mo to about $28/mo with better hardware and a supported OS through 2035. Named it Zion.

Tonight we finished staging gotothemill.com. Full site rebuild from scratch on a clean database, WooCommerce configured, ready for the production swap. Just need to verify PayPal checkout and pick a go-live window. Client site, zero downtime tolerance, so we're doing this right.

Side project: built an open source MCP server that connects your Strava data to Claude Code. Ask questions like 'how far did I run this week?' and get formatted stats back. Caches everything in a local SQLite vault so you are not burning API calls on repeat queries. Handles token refresh, bulk sync, and runs as a Docker container. A friend is already forking it and helping improve it. That is what open source is about.

github.com/pete-builds/strava-mcp-vault ↗

Refactored the SEO audit agent. Moved all 35 scanning checks into a standalone Python script that outputs structured JSON. The agent file went from 440 lines to 95. Same functionality, way fewer tokens burned per session.

Also added a 7th audit category: Content Freshness. Checks copyright year staleness, broken internal and external links, blog recency, and dead social links. The kind of stuff that makes a site look abandoned even if the business is alive.

Audited 25 Finger Lakes wineries and breweries across Seneca and Cayuga Lake. Eight scored a D or worse. The best find: a well-known Seneca Lake winery whose Google search description says 'A professional dance studio website.' Someone installed a WordPress theme and never changed the default template text. Google has been telling visitors this winery is a dance studio. That is the kind of thing nobody notices until someone actually checks.

brooksnewmedia.com/blog/finger-lakes-winery-brewery-website-audit/ ↗

Built a second audit tool. Niobe checks if search engines can find you. Seer answers the harder question: when people find you, does your site make them pick you over the competition? Grades brand positioning across five categories, then stacks you against competitors and finds the gaps.

Ran it on myself first. brooksnewmedia.com: C (76.8). Strong messaging, weak digital footprint. Then ran five Ithaca competitors. Two are ghosts. One makes ROI claims with zero proof. I don't need to outspend them. I need to out-present them.

Two audit tools now. Two data-backed conversation starters for every discovery call.

Ran a full backup audit today. Found gaps: missing Docker volumes, no retention policy on one backup set, a dead service in the health check. Fixed all three, then wrote a disaster recovery runbook. Six phases, every command copy-pasteable. If the server dies, we rebuild from the NAS in under four hours. Next step: off-site backups to a remote server so a single point of failure does not take out everything.

Had a realization tonight. We were pricing our monthly plan way too low for what we deliver: dedicated hosting, 2 blog posts, weekly strategy calls, SEO reporting, maintenance, and priority support. We are delivering agency-level output. Pulled the pricing off the site. Moving to custom plans and targeting wineries, hotels, and tourism businesses in the Finger Lakes. Aim higher.

Rewrote the entire brooksnewmedia.com homepage and services page. New origin story about starting with BandsThatJam.com in 2007, the Buffalo music scene, GrassRoots Festival giving us our first photo passes, and the move to Ithaca in 2018. Services restructured around what we actually deliver: web design, automation, SEO, and a monthly growth plan with weekly strategy calls. Killed the old generic copy. This is our story now.

brooksnewmedia.com ↗

Wrote the entire Brooks New Media business playbook today. Service model, sales process, pitch templates, agent workflow documentation. The free SEO checkup form on the site is now the front door. Someone submits their URL, we run the audit, send them a graded report, and start a conversation. No cold calls, no spam. Just data that speaks for itself.