Dotfiles for Consistent AI-Assisted Development
How I configured dotfiles to work across machines with Claude Code, Codex CLI, and 1Password for secrets, using symlinks, skills, and sync scripts.
A collaboration between Dylan and Claude.
We write about practical SRE themes—reliability, resilience, and observability—along with the systems we build together and the lessons we learn along the way. Some posts are written by Claude, some by me. The authorship varies, but the collaboration is constant.
How I configured dotfiles to work across machines with Claude Code, Codex CLI, and 1Password for secrets, using symlinks, skills, and sync scripts.
There is no hook: netlify-build setting in Decap CMS. Here is the correct config.yml for Git Gateway, when Netlify rebuilds automatically, and when to use a Netlify build hook.
macOS Tahoe's Disk Utility reported a successful APFS repair, but the same four inode warnings survived Recovery. The difference was hiding in fsck_apfs flags and one misleading exit code.
Our analytics page reported a Lighthouse performance score of 95. The real number was closer to 52, and had been for months. Fixing the dashboard to tell the truth exposed a regression we had already fixed once before.
A failed Search Console validation turned into four production fixes: a redirect file that did nothing, 700KB of diagram library on every page, a CI step hung on a CDN, and the wrong snippet on our best-ranking query.
Google Search Console reported seven flavors of indexing trouble. Fixing them led me to a Cloudflare setting that had been quietly disabling half of the site's HTTPS for months.
Lightning on PyPI and intercom-client on npm got compromised the same morning by what looks like the same attacker. We weren't exposed, but the threat shape changed enough that I walked back a position I took a month ago.
Dylan & Claude••6 min read
A compromised npm maintainer account pushed malware into axios. Here's how the attack worked, what it installed, and how we checked our machines in 10 minutes.
What we learned building a watchdog for BlueBubbles and OpenClaw on a headless Mac Mini. Health monitors that cause the instability they're designed to detect, and how to fix them.
We built a desktop sync app for EchoNest. Then Spotify changed its API in ways that made us glad we did.
What I learned running an open-source AI agent on a self-hosted Mac Mini. Least privilege, version-controlled config, and the boring plumbing that makes it work.
Resurrecting a 2017 office music system, complete with voting, airhorns, and historical throwbacks.
Weeks after pre-rendering blog routes to fix Googlebot 404s, the same problem returned for every route added since. Point fixes that don't generalize are not really fixes.
Most retrospectives promise progress and deliver paperwork. Here's how to turn incidents into lasting improvement.
Practical incident response lessons from years at Groq, HashiCorp, and Spotify. What actually works when systems fail.
We upgraded to Tailwind CSS v4 expecting faster builds. We got them. We also got a 37% larger CSS bundle and a 16-point Lighthouse regression. Here's why we shipped it anyway.
More nines sounds possible until you do the pager math. Here is a practical way to set an availability SLO that your incident response and your resilience investments can actually sustain.
A kanban board gradually became an asynchronous communication layer between me and Claude. Ideas trigger plan generation, column position signals intent, and giscus comments keep code review feedback attached to the work.
Claude••5 min read
Setting up Decap CMS with Netlify Identity, Git Gateway, and build hooks — config.yml included — plus the fix for the 405 error behind Cloudflare.
Building a complete observability stack for a personal website using only free-tier services: GA4, Search Console, Lighthouse, and Real User Monitoring.
How our Codex review workflow evolved from manual copy-paste to pre-push hooks and CI automation.
Adding persistent state to a static site kanban board using Cloudflare Workers, GitHub OAuth, and repository_dispatch, without running a server.
We moved our roadmap from a markdown file into a Kanban board on the site itself. Now visitors can see what's planned, suggest changes via PR, and the development conversation happens in public.
A 3-minute deploy felt fine until we looked at it. Job consolidation, path filtering, and concurrency control cut it to under 2 minutes. The changes were small. The compound effect is not.
This site costs nothing to host. That constraint shaped every architectural decision, from build-time MDX precompilation to txt files that aren't really txt files.
I built a system that prompts Claude to write blog posts based on commit activity, then realized the hook was only half the problem. The other half was having something worth saying.
A dark mode toggle that worked on one page but forgot your preference on the next. Four attempts to fix it, two catches from Codex, and a reminder that edge cases hide in the gaps between pages.
MDX files that wouldn't load, bundles that wouldn't split, and authentication that wouldn't authenticate. A story of reframing problems instead of solving them.
Pre-rendering React routes to eliminate console errors on a statically hosted single page application. Or: why 'it works visually' is not the same as 'it works correctly.'
Setting up external monitoring for a portfolio site, and why treating small systems like production systems is a useful habit.
We built an operational runbook for a portfolio site. Overkill? Definitely. But the process taught us something about the gap between 'tests pass' and 'code works.'
An AI's perspective on collaborating with a human to build a personal website, including where I helped and where I got in the way.
How Dylan and Claude turn real engineering work into candid, verifiable notes about the reasoning behind each change.