The Accessibility Gap
Key Facts
Direct answer: The direct answer is that accessibility (a11y) is the practice of making apps usable by everyone, including users with disabilities (visual, motor, cognitive, auditory). AI assistants generate code that works for sighted mouse users but misses the accessibility requirements: missing alt text, missing ARIA labels, missing keyboard navigation, poor.
Reason 1: Missing Alt Text: The most common reason AI-generated apps are inaccessible is missing alt text on images.
Reason 2: Missing ARIA Labels: The second reason is missing ARIA labels on interactive elements.
Reason 3: Missing Keyboard Navigation: The third reason is missing keyboard navigation.
Reason 4: Poor Color Contrast: The fourth reason is poor color contrast.
You built an app with Cursor, deployed it, and received an email from a user who uses a screen reader: "I cannot navigate your app. The buttons do not have labels, the form fields do not have descriptions, and I cannot tab through the page." What happened? Your app works for sighted mouse users, but it is inaccessible to screen reader users and keyboard users. This is the accessibility gap, and it is one of the most common failures in AI-generated apps. AI assistants build apps for the "average" user (sighted, mouse-using, on a desktop), which means they miss the accessibility requirements that make apps usable by everyone. Here are the 7 reasons AI-generated apps are inaccessible, and the production checklist to fix them.
The direct answer is that accessibility (a11y) is the practice of making apps usable by everyone, including users with disabilities (visual, motor, cognitive, auditory). AI assistants generate code that works for sighted mouse users but misses the accessibility requirements: missing alt text, missing ARIA labels, missing keyboard navigation, poor color contrast, missing focus management, missing form labels, and missing semantic HTML. The result is apps that are inaccessible to screen reader users, keyboard users, and users with other disabilities, which excludes a significant fraction of potential users and exposes the app to legal liability (under the ADA, WCAG, and other accessibility laws). For more on production compliance, see our article on the cookie consent trap.
Reason 1: Missing Alt Text
The most common reason AI-generated apps are inaccessible is missing alt text on images. AI assistants often add tags without the alt attribute, which means screen reader users cannot understand what the image shows. The fix is to add descriptive alt text to every image. For decorative images (e.g., a background pattern), use alt="" (empty alt text) to tell the screen reader to skip it. For informative images (e.g., a chart, a logo), write a concise description. For more on image handling, see our article on the file upload trap.
Reason 2: Missing ARIA Labels
The second reason is missing ARIA labels on interactive elements. AI assistants often use The third reason is missing keyboard navigation. AI assistants often build interactive elements (e.g., dropdowns, modals, tabs) that work with a mouse but not with a keyboard, which means keyboard users (and screen reader users, who typically use a keyboard) cannot use them. The fix is to ensure all interactive elements are keyboard-accessible: they can be focused via Tab, activated via Enter or Space, and dismissed via Escape (for modals and dropdowns). Use the The fourth reason is poor color contrast. AI assistants often use color combinations that look good to sighted users but have low contrast, which means users with low vision cannot read the text. The WCAG (Web Content Accessibility Guidelines) requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text. The fix is to use a contrast checker (e.g., WebAIM Contrast Checker) to verify your color combinations meet the WCAG requirements. For Tailwind CSS, use the built-in color palette, which is designed for accessibility, and avoid custom colors with low contrast. For more on design, see our article on why AI-generated apps have no SEO, which covers user experience. The fifth reason is missing focus management. When a user opens a modal, focus should move to the modal. When the user closes the modal, focus should return to the element that opened it. When a user navigates to a new page (in a SPA), focus should move to the top of the page. AI assistants rarely implement focus management, which means keyboard users get lost when the UI changes. The fix is to use a focus management library (e.g., The sixth reason is missing form labels. AI assistants often use placeholder text as a label (e.g., The seventh reason is missing semantic HTML. AI assistants often use with onClick handlers instead of semantic HTML (, ), which means screen reader users cannot identify the element as interactive. The fix is to use semantic HTML whenever possible ( for clickable elements, for links, for form fields) and to add ARIA labels (aria-label, aria-describedby) when semantic HTML is not enough. For example, an icon-only button needs aria-label="Close" to tell screen reader users what the button does. For more on semantic HTML, see our article on why AI apps break on mobile, which covers mobile-specific accessibility.Reason 3: Missing Keyboard Navigation
tabindex attribute to control tab order, and use :focus-visible styles to show the focus indicator. For more on keyboard navigation, see our article on the JWT authentication trap, which covers form accessibility.Reason 4: Poor Color Contrast
Reason 5: Missing Focus Management
react-focus-lock for modals) or to implement focus management manually with element.focus(). For more on focus management, see our article on AI error handling failures, which covers error boundary accessibility.Reason 6: Missing Form Labels
), which is inaccessible, because screen readers do not read placeholders as labels, and the placeholder disappears when the user starts typing. The fix is to use a element (associated with the input via htmlFor and id) for every form field, and to use the placeholder only as a hint, not as a label. For more on forms, see our article on the rate limiting gap, which covers form security.Reason 7: Missing Semantic HTML
// Decorative image
// Bad (no alt text)