Writing
Essays, reference pages, and logs — newest first. A ● marks pieces that have been revised three or more times.
- Three months of Search Console on an essay-led site
- 503, not 404, when an upstream read fails
- When the search index disagrees with the source of truth
- How to verify GPTBot and ClaudeBot by IP, not user agent
- Spec Kit, Kiro, OpenSpec, BMAD, specdx: what each one actually checks
- Astro vs Next.js for a content site: numbers from building both
- Docker port isolation for parallel dev environments
- Why satori throws "ltagTable is not defined" on a woff font
- Building a small uptime monitor, and the gaps its 71 tests missed
- Does anyone read llms.txt?
- Shadow DOM vs iframes for third-party embeds
- URL state in React: nuqs, state-in-url, or your own hook●
- What dogfooding changed in specdx
- Writing a skill description that actually triggers
- Vertical slices in an admin rebuild
- E2E against production without a test environment
- ag-grid-url-sync: the query-string grammar●
- The prompt that converted this site from Next.js to Astro●
- The frame-1 problem in React Native commerce
- Jev's probabilities only mean something on your own data
- What AI crawlers actually read: five verified weeks
- Catching API contract drift in CI without codegen
- Cross-model skill regression
- A widget in someone else's page
- Shipping SQLite to production on purpose●
- A week of CDN logs in DuckDB and Parquet
- Optimistic concurrency without conditional PUT●
- The user-agent header is a claim, not evidence
- A memory system for coding agents
- Logging AI crawlers on a static site●
- The URL is a state manager●
- Running spec-drift detection on a real repo●
- Testing whether Claude skills trigger at all●
- Dogfooding specdx on this site●
- react-aria-live: announcing changes to screen readers●
- sdx: a toolchain for spec-driven development●
- Spec-driven development
- Testing Claude skills●
- I built the same site in Next.js, Remix, and Astro
- Why I'll never go back to vibe coding