Journal · page 3
Writing
Field notes on full-stack engineering, DevSecOps, self-hosted AI and real-time browser graphics. Written from the work, not about it.
25 entries7 categoriespage 3 of 3
Web MIDI Permission, statechange and the Stuck Note
A Web MIDI app has three states to track: permission, device and connection. When an input disconnects, release every note it started, or the note sticks after the device returns.
Self-Hosting Next.js and Payload on One VPS: What Broke
How one VPS runs Next.js and Payload behind Cloudflare and nginx: the request path, why the build needs a self-hosted runner, migrations on deploy, scheduled publishing, and what is not covered.
AGENTS.md vs CLAUDE.md: Read by Five Tools, Enforced by None
A shared AGENTS.md file gets five AI coding tools reading the same rules. It does not make them follow the rules: that still needs review guidelines and a CI gate that actually checks.
Green Deploy, Stale Page: Docker's Layer Cache, Not Next.js
A Next.js deploy passed build, migrate, health check and smoke test, yet the live site kept serving the old content. The cause was Docker's layer cache.
Why a Loading Screen Can't Wait for React to Hydrate
A React-driven loading overlay can't leave before the bundle it hides has hydrated, because that's the same cost it's meant to be covering for.
Why generateMetadata in Next.js Must Be Async
A synchronous metadata builder reading an unprimed module-scope snapshot put localhost:3000 in page titles and emptied their Person JSON-LD across ten routes.
Why backdrop-filter Breaks After a Lightning CSS Build
Lightning CSS merges duplicate backdrop-filter declarations and keeps the wrong one, deleting a glass effect and the containing block it quietly provided.