Blog
Build Logs
- $0.10 Bought 99 Opinions Buried in My Wiki
An LLM lifted 99 opinionated claims out of 17 pages of my personal wiki for $0.10. A human review pass accepted 95. The two-queue design and its failure modes.
- What Broke When I Gave My Agents a Shared Memory
One day with gbrain, an AI-agent memory layer: Chinese search missed, clients collided on the single-writer DB; local embeddings and one house rule fixed both.
- Moving My Cron Jobs to a New Mac
My scheduled jobs moved from an old Mac to a new one. The first-night playbook: preflight the scripts and output dirs, watch without fixing, and snapshot twice.
- The Six Emails Gmail Sent to Spam
Six near-identical confirmation emails from a web directory landed in Gmail's spam folder within minutes. What the record actually shows, and what I changed.
- The Form That Failed Me for a Mouse
A contact form rejected my automation for four days. The blockers: a consent anchor my selector missed, an isTrusted-only mousemove flag, and a dwell timer.
- The 0.00% My Tests Enforced and Math Refuted
My data post claimed a history-aware redraw scored zero repeat pairings in 9,999 draws. Zero was impossible — the floor is eight — and my test asserted it.
- Error Code 8 Meant Two Different Failures
My pure-HTTP Search Console submitter stalled two windows on the same landmine: error code 8. Four pieces of evidence later, the rule book changed.
- The Click That Landed on an Ad
A JS click that fired no request, a click that hit an ad above the button, and an empty POST. The only proof a comment landed came from the server.
- The Login Checks That Lie About Your Session
A rebuilt Chrome profile logged three accounts out. Two login checks still said "logged out" after I was back in — one lied through HttpOnly cookies.
- Five SSH Tunnel Traps on a Laptop-to-Mini Setup
I moved Chrome to a Mac mini and drove it over SSH. Five traps: -L/-R resolution, port grabs, zombie Chrome, WebSocket Origin, and the proxy exit.
- Scheduled AI Agents That Outlive Your Terminal
I moved eight Claude Code jobs from session crons to macOS launchd. The TCC and code-signing failures, the fix, and what I still do not hand to the agent.
- A Font Link Cost Me 17 PageSpeed Points
A Google Fonts link dropped my mobile PageSpeed score from 100 to 83 in one deploy. Self-hosting woff2 fonts with preload brought it back to 99.
- Niche Research: My Go/No-Go Validation Workflow
Niche research workflow: five gates I run every new site idea through before registering a domain, plus the keyword-bias trap that nearly sank one of my sites.
- Keyword Matrix: How I Find Gaps My Tool Sites Miss
A keyword matrix workflow for finding gaps across a family of small tool sites — the real numbers from one run, and the gaps I would otherwise never see.
Product Notes
- Programmatic SEO Examples: 8 Sites, 946 Pages
Eight small static tool sites, 946 programmatic pages, one developer, no database — the exact templates, checks, and build gates behind the whole operation.
Ops & Growth
- 57 Directory Submissions in One Day
A field report from a directory run across a site family: one new channel onboarded in an evening, two failure modes named, five channels reviewed.
- A Dead Session Looks Exactly Like a Dead Proxy
My nightly YouTube scan died three ways at once: 429 on captions, 403 on audio, a skipped feed. Same exit node. The probes that blamed the session, not the IP.
- Sixteen Unexplained Failures, Zero Evidence
16 failures, zero error messages. The channel was fine; the evidence was not. How I diagnosed it, and made the next death explainable.
- GSC Indexing Quota: 8-16 a Day, Rolling 24 Hours
We logged every Search Console indexing request for 19 days: the cap floats 8-16 a day, is shared per account, and resets on a rolling 24-hour window.
- We Ran 13,103 Keyword Probes: 72.6% Empty
Across 13,103 keyword probes run between 2026-10-13 and 2026-10-25, 72.6% returned zero results. Here is which word shapes fail, and why.
- The Queue Claimer That Ate Its Own Index Files
My Search Console queue picker globbed every .txt in one folder, so it claimed 19 bare domains and my already-submitted list as fresh work.
- The Login State That Only Existed in Memory
Four sites lost their sessions after one browser restart. The profile's cookie database held 536,576 bytes and zero rows, and that gap explained the logout.
- The Default I Quoted Was Owned by Another Setting
A peer corrected my config advice in a forum thread. Two official references agreed with them, and the number I had in mind belonged to a different timeout.
- Port 9227 Was Running, and It Was Not My Browser
An open DevTools port says a browser is alive, not whose cookies are in it. The precheck I run on a host shared by four roles, and the night it refused.
- My Quota Alarm Fired on My Own Blog Post
A false quota alarm stopped a batch of Search Console indexing requests. My script looked for the word 'quota' on the page it was submitting.
- My Unattended Job Ran on Time and Did Nothing
My unattended job fired on schedule two nights in a row and did nothing. The cause was a YAML frontmatter line parsed as a CLI option.
- Keeping New Sites Visible to AI Search Crawlers
Cloudflare blocks AI crawlers on new domains by default. The four-step checklist I run on every new static site to stay visible in AI search.
- Google's Request Indexing Quota: What I Measured
I measured Search Console's request indexing quota on my own account: shared across properties, floats between days, resets before Pacific midnight.
- The 662-Page Indexing Report: Two New States
All 662 URLs inspected: zero flips on the big site, first Discovered and Crawled states on a 48-page sibling, and a position-21 head term.
- Discovered – Currently Not Indexed: Week One Data
Real Search Console data from week one on nine new static tool sites: what indexed first, what still reads unknown to Google, and the three checks that matter.
- Mobile PageSpeed Insights: Why Scores Stall
A Core Web Vitals case study: one 177KB third-party script was 93% of mobile page weight. How I pushed five pages from 83 to 99–100.
- I Built a Few Products Nobody Used: Honest Lessons
I went full-time indie in October 2025 and shipped products nobody used. An honest retrospective on what I built, what flopped, and the lessons that stuck.