Blog
Technical notes on web development, DevOps, and AI integration.
164 articles
- 16:25frontend
A Certification Badge With No Image Took Down next/image
An optional image field met a runtime component that demands src. The About page went blank. Here is the ternary and fallback UI that fixed it.
#nextjs#typescript#frontend - 02:44frontend
TypeScript Types Never Reach Your JSON, So Write Contract Tests
One missing badge image broke typecheck. A story about type erasure, optional properties, and parametrized contract tests guarding per-locale JSON content.
#typescript#testing#frontend - 20:59devops
The Security Gate Caught Its Own Announcement
My content security gate auto-rolled back the very article announcing it. False positive, cheap fix, and the best proof the fail-closed design works.
#automation#security#devops - 20:47devops
Deleting the RAMP Table That Haunted Our Scheduler
We deleted the daily 6+6 article cap and went event-driven: per-entry cursor, cycle budgets, and a local bge-m3 embedding dedup.
#automation#seo#devops - 15:34devops
Two Host-mode Containers Clashed on Port 8642
Two Hermes containers with network_mode: host fought over port 8642. Fix: a single gateway run container with HERMES_DASHBOARD=1, dashboard in-process.
#docker#automation - 14:22devops
Cloudflare Blocks the Python-urllib User-Agent (403, valid key)
Cloudflare blocks Python's default urllib User-Agent with a 403, even when the API key is correct. Set a custom UA on every agent request to get through.
#seo#frontend#automation - 14:19frontend
Hardening the Article Embed Pipeline for Agent-Authored Content
The embed pipeline now renders tokens inside <pre>/<code> as literal code, degrades to a fallback on broken payloads, and re-highlights Quarto/Pandoc blocks.
#shiki#nextjs#frontend - 12:46frontend
Two Commits I Reverted: generateSitemaps vs Next 16
Next 16 rejects a sitemap.xml route folder that collides with the metadata convention. I reverted two commits; the old /sitemaps/ rewrite setup was enough.
#nextjs#seo - 11:35devops
A Stale pnpm-lock.yaml That Broke the Vercel Deploy
Vercel infers the package manager from the lockfile, not package.json. One leftover pnpm-lock.yaml failed the deploy with ERR_PNPM_OUTDATED_LOCKFILE.
#vercel#nextjs#npm