Back to all posts

The Invisible Layer: Designing for Accessibility

Pranay Kothapalli
Pranay Kothapalli

Maintainer at Rad UI

4 min read

Accessibility isn’t a checklist—it’s the invisible architecture of interaction. Here’s how to design components that feel effortless for everyone.

Accessibility isn’t an add-on. It’s not a feature you sprinkle on top after shipping. It’s the invisible layer that holds the entire experience together—the hidden geometry beneath every great interface.

If you design UI the way most libraries do—starting with visuals and adding ARIA labels later—you’re building a staircase and bolting on a ramp. It works, technically, but the structure was never meant to hold that shape. True accessibility starts earlier. It starts in architecture.


The Life of a Keyboard User

Let’s take a walk—no, let’s tab—through the life of a keyboard user navigating your component library.

You open a modal. You press Tab.
You land on the close button. Good.
You press Tab again and… nothing. You’re trapped. The focus vanished into the void.

That moment—one stray tabindex or missing aria-modal—is the difference between inclusion and alienation. The user doesn’t “see” accessibility the way designers do; they feel it. They sense when something’s off, when a flow that should be natural suddenly becomes friction.

That’s why accessibility isn’t visual. It’s architectural. It’s how your app feels to navigate without a mouse.


Accessibility Is Interaction Architecture

Think of accessibility like network infrastructure. You don’t notice it until it breaks.
A good accessible component feels solid—like it’s built on invisible rails guiding every user action.

When we build components in Rad UI, we don’t ask, “How should this look?” first.
We ask, “How should this behave for every kind of user?”

Every primitive—from Dialog to Slider—is built around these invisible rules:

  • Focus must never get lost.
    A component should always know where the user came from and where they’re going next. Losing focus is like dropping state in React—it’s a bug, not a quirk.

  • Semantics matter.
    <div role="button"> is a confession that you didn’t start with the right element. Start semantic, and you get keyboard behavior for free.

  • Announce intent.
    Screen readers don’t read your visuals; they read your structure. A modal that doesn’t announce itself is a ghost window.

  • Don’t break expectations.
    If the user hits Esc, close the modal. If they press Space, activate the button. If they use Tab, move forward. UI should behave like physics—predictable, not surprising.


The Myth of the “Accessible Mode”

Many teams still treat accessibility as a toggle—a “mode” for users who “need it.” That’s like saying performance is optional. Accessibility isn’t a separate layer. It’s the baseline contract of interaction.

When you make something accessible, you’re not “helping” disabled users—you’re designing for reality. Everyone loses their mouse at some point. Everyone stares at a screen in sunlight. Everyone ages. Accessibility is just resilience in disguise.


Thoughtful Defaults, Powerful Extensibility

A great headless library doesn’t just expose ARIA props and call it a day. It bakes accessibility into the logic, not the API surface.

Developers should inherit good behavior without having to opt in.

When you import @rad-ui/dialog, you get:

  • Focus trapping built in.
  • ARIA attributes wired automatically.
  • Keyboard navigation mapped to native behavior.
  • Escape semantics that Just Work™.

You can override, extend, or detach—but the defaults should do the right thing.

Accessibility should feel like physics—something you can bend, not break.


Why Invisible Work Matters

The tragedy of accessibility work is that when you do it right, no one notices.
Users don’t thank you for correct focus order. They just use your app.

But that’s the point.
The best accessibility is invisible because it doesn’t interrupt. It creates flow.

So, next time you’re building a component, don’t start by asking what it should look like.
Start by asking how it should feel when navigated with eyes closed and hands on a keyboard.

That’s where design truly begins—in the invisible layer.