Alert on the error class, not the error
Our contact forms failed silently for 2 weeks because the alert stream treated a dead verification key exactly like routine bot noise. The fix was classifying errors by who caused them.
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.
Our contact forms failed silently for 2 weeks because the alert stream treated a dead verification key exactly like routine bot noise. The fix was classifying errors by who caused them.
We probed autocomplete with 5,259 requests across every service we sell plus Montana city modifiers. AI and automation queries returned nothing. Web design returned real, city-level demand. Here is what that decides.
The AI crowd says agents will replace software. Wrong. What is actually ending is the deal where a small business pays monthly, forever, for an app shaped like everyone's business but theirs.
A WebMCP pilot in one component: three page tools for browser agents, feature-detected so normal visitors see nothing, and a form tool that fills every field but can never submit. The fill-but-never-send pattern.
Google published OKF, an open format for company AI knowledge bases. We measured our own corpus against it: 124 of 125 files already conformed, and the gaps were one-line fixes. Why markdown plus YAML keeps winning.
When we priced our AI support offer, we added a guarantee our subscription competitors structurally cannot copy: leave whenever you want, and everything keeps working. It cost us nothing to offer, because we had already built it that way.
ARD is a young spec that lets AI agents discover what a site offers from one static file. We published ours in an afternoon. What goes in it, what to leave out, and the padding trap.
We ran 3 coding agents on one repo in one afternoon. One rewrite flattened another agent's fix, one commit scooped unfinished work, and one fix sat on disk while the server ran old code. The rules that stopped it.
Our automated captures kept showing blank sections that looked perfect in a real browser. Scroll-reveal animations hide content until it enters the viewport, and a programmatic scroll can outrun the observer that reveals it.
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.