AI-Generated UI Is Inaccessible by Default AI code-generation tools like Claude Code, Codex, and Cursor produce React components that are visually correct but inaccessible by default, with failures such as missing landmarks, headings, list structures, and keyboard support. A five-layer enforcement system of prompt constraints—including static analysis, runtime testing, CI integration, and accessible component abstractions—is proposed to enforce semantic correctness, though specialized tools like Vercel's v0 have begun hardcoding accessible primitives. A five-layer enforcement system for semantic correctness in LLM-generated React components These days, an AI code-generation tool e.g., Claude Code, Codex, Cursor can produce a React sidebar component in 8 seconds. It looks correct: smooth hover states, rotating chevrons, harmonious spacing. But take a look at the browser’s accessibility tree in DevTools. Chances are the root side element tree receives: role generic , name none , focusable false . For screen reader users, keyboard navigators, and voice control users, the component effectively doesn’t exist. This happens because most LLMs optimize for visual output while generating near-zero semantic information for the layer that assistive technologies actually read. This article explains the architectural reasons and presents a five-layer enforcement system of prompt constraints. These include static analysis, runtime testing, CI integration, and accessible component abstractions that make semantic correctness automatic rather than aspirational. The examples use React and Tailwind because that’s what most AI tools emit, but the accessibility tree doesn’t care about your framework. It cares about the DOM it receives. A caveat: the landscape is not monolithic. Specialized tools like Vercel’s v0 https://v0.app/ have begun hardcoding accessible primitives into their generation pipelines v0 outputs shadcn/ui https://ui.shadcn.com/ components built on Radix, which means its output inherits Radix’s accessibility contracts by default. This is the right architectural approach, and it’s encouraging. But v0 is the exception. The general-purpose tools that most developers use daily, like ChatGPT, Claude, Copilot, and Cursor, still produce the