Build Log

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

Three MCP servers built and deployed in one session. Uptime Kuma, Synology NAS, and Pi-hole. All SSE transport, all Dockerized, all giving my agents structured data instead of raw shell output. The Forge earned its name today.

Four new agents joined the roster. Morpheus runs business ops and orchestrates the pipeline. Sentinel monitors infrastructure health. Ghost tracks prospect follow-ups and drafts emails. Mouse runs security audits. Also built The Construct, a force-directed network graph dashboard that visualizes all 18 agents and their health status in real time.

Spent the afternoon hardening the new production server. SSH lockdown, automated offsite backups with encryption, OS-level security updates on autopilot, WAF verified active, HSTS on all domains, database tuned, and external uptime monitoring watching everything at 5-minute intervals. Also wired up server-side resource alerts. Went from 'Plesk is installed' to 'production-ready' in one session. The old CentOS box is looking more disposable by the day.

Built a one-command prospect audit system using Claude Code. I type /radar and a domain, and about 5 minutes later there's a branded, client-ready report page live on my website. Here's what happens under the hood.

4 agents, each with a Matrix codename:

  1. Radar (the orchestrator) coordinates everything. It receives the target domain, dispatches the two scanning agents in parallel, collects their results, generates the report, builds the site, deploys it, and verifies it's live.

  2. Niobe (SEO audit) runs niobe-scan.py, a Python scanner I wrote that checks 7 categories: technical SEO, on-page SEO, performance, structured data, security headers, content freshness, and local SEO. It crawls the site, pulls headers, checks SSL certs, parses meta tags, tests page speed, looks for schema markup. Outputs structured JSON with scores and findings.

  3. Seer (brand positioning audit) runs seer-scan.py, another Python scanner that evaluates 4 categories: first impression, messaging and voice, digital footprint, and brand cohesion. It analyzes the homepage hero, CTA placement, color palette, navigation complexity, and does web searches for competitive context. Also outputs structured JSON.

  4. Keeper (production deployment) handles the GoDaddy VPS. After the report page is generated, the Astro site gets built and rsync'd to the production server where brooksnewmedia.com is hosted.

The custom scripts:

  • niobe-scan.py: Python script with UA rotation, rate limiting, and Cloudflare detection. Checks SSL, headers, meta tags, structured data, sitemap, robots.txt, page speed, content dates, NAP consistency, Google Business Profile.
  • seer-scan.py: Similar architecture but focused on brand signals. Analyzes hero content, CTA presence, color count, font consistency, nav complexity, social presence, review platforms.

Both scripts output JSON that Claude Code's agents parse and interpret. The agents add the qualitative analysis: what the numbers mean, what to prioritize, how to pitch the fix.

The report itself is an Astro page generated from a template, styled to match my Brooks New Media site. It's a hidden page (not in navigation), so I can share the direct URL with the prospect as a leave-behind. Letter grades, color-coded score cards, a merged top-10 priority list, and a custom 3-month "here's how we'd fix this" pitch at the bottom.

The whole thing runs from Claude Code in my terminal. One command, four agents, two Python scanners, one Astro template, one production deploy.

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.