Treat your n8n workflows like code
An AI agent's whole brain lived as code strings inside n8n nodes, edited live, tested never. The repo-file, sync, and drift-detector pattern that made it honest.
Notes from real work. Every page here came out of a client build, an automation we run in production, or a mistake that cost us a day. Nothing is written to fill a calendar.
An AI agent's whole brain lived as code strings inside n8n nodes, edited live, tested never. The repo-file, sync, and drift-detector pattern that made it honest.
A nightly job failed silently for days because launchd runs scripts with a bare PATH. The absolute-path rule, and the plist reload trap waiting behind it.
We deployed a new version of a bind-mounted tool and the container ran the old one for a day. Single-file bind mounts pin the inode, and most deploy methods swap it.
A settings sheet, a chat drawer, and a tab bar each pinned themselves inside the header instead of the viewport. The CSS containing-block rule behind it, and the portal habit that ended it.
Our posting scheduler passed every single-run test and still burned 4 posts in 2 hours. On a timer, a wrong state guard does not fail once. It fails every tick until the runway is gone.
An API balance dropped $1.10 mid-run and we could not say what we bought. Now every automation that spends credits logs its own cost, its call count, and its worst-case daily cap.
A Next.js 16 marketing site stuck at 80 on mobile Lighthouse jumped to 99 with 3 lines of config. What experimental.inlineCss does, how to verify it, and when to skip it.
On a launch day our greps swore the published pages were missing copy the browser rendered fine. React server rendering splits text across comment markers. Verify rendered text, not raw HTML.
The blur looked guilty for our scroll jank, so we deleted it and the page got stickier. What backdrop-filter quietly does for you, and the two-part fix that worked.
A fixed bottom bar floating above the physical edge of an installed iOS web app. Two wrong theories, one debug page, and a status bar meta tag that only takes effect on reinstall.
AI tools are becoming the institutional memory of small businesses, one chat at a time, inside accounts the company does not control. The case for owning that layer, from a shop that switched AI providers twice this year and lost nothing.
We wrote a correct CSS override that did nothing, because a rule 46 lines later won the tie. The 30-second grep habit that keeps a stylesheet from arguing with itself.
AI video generators output 24fps. When we doubled that for a scroll effect, ffmpeg's minterpolate smeared the footage and RIFE kept it sharp. Here is why, and when each tool wins.
framer-motion's useReducedMotion() always answers wrong on the server. Branch your markup on it and every visitor with Reduce Motion enabled gets a hydration mismatch. The fix is a small mounted gate.
We score local business websites using public signals, including phone load speed, mobile usability, listing mismatches, and dead links. Here is the method, and how to run it on your own site in 10 minutes.
Logo marquees jump or run out of content for exactly two reasons, and both are arithmetic. The translate distance, the copy count, and how to tell which one you broke.
We found a rental application that emailed applicants' Social Security numbers to an office inbox. Why email is the wrong container, and the one question to ask your web person.
Scroll drives the playhead. Two invisible choices decide whether it works: the encode and the server. The exact ffmpeg flags, the numbers, and the trap list.
A client's site was quietly redirecting visitors to gambling spam. The anatomy of the infection, and why a hack you can no longer see is not a hack that is gone.
Your OG image is a crisp PNG. The platforms re-encode it to JPEG, and smooth dark gradients band into steps. Put the text over a photo instead.
A screenshot at 390px wide is not a phone. How a fake overflow bug cost us a diagnosis cycle, and the 3 lines of device emulation that fix it.
Form to webhook to database to inbox. The exact pattern we reuse on every build, plus the 5 failures that taught us each rule.