Originally published at A11yFix . Two of the five contact forms had no labels. Zero. Every input was a placeholder-only field floating inside a div, no <label> element anywhere, no for / id pairing, nothing that would persist on screen once a user started typing. A screen reader would announce "edit text, blank" for the name field. Literally blank. Axe-core flagged none of it. That is the sentence that made us stop and rewrite the intro to this post. We went in expecting to find a few missing labels, maybe a broken for attribute, the usual stuff. Instead we found a gap between what automated scanners catch and what actually matters for someone trying to fill out a form without looking at it. What we tested We ran the same prompt through five AI code generation approaches: a direct Claude CLI call, a ChatGPT-style generation, a v0-style (Vercel shadcn pattern), a Bolt-style (fast full-stack pattern), and a Copilot-style (inline autocomplete pattern). Each got identical instructions.…