Skip to main content

Tag: Design Systems

8 posts

Posts
Checklist with green checkmarks on a clipboard

Replacing CSS Class Assertions with ARIA in Storybook

CSS classes break when Tailwind configs change. ARIA attributes are the semantic contract. Six rules for interaction tests that survive refactors.

2 min read
A slow-motion water droplet frozen in time

Systematic prefers-reduced-motion Across a Component Library

Auditing every animated component for motion sensitivity reveals which animations are decorative and which need static alternatives.

2 min read
Speech bubbles in a conversation

Tooltip aria-describedby Was on the Wrong Element

A Tooltip component passed every test but put aria-describedby on a wrapper div instead of the trigger. Screen readers never announced it.

1 min read
A person filling out a form on a clipboard

Aligning Five Form Components Around aria-describedby

Five form components, five approaches to displaying errors. One aria-describedby pattern turns inconsistency into a shared accessibility contract.

2 min read
A spreadsheet displayed on a monitor screen

Making Data Tables Keyboard-Navigable

Adding scope, caption, clickable row keyboard support, and focus-visible to a Table component. The accessibility basics HTML tables need but rarely get.

2 min read
A notification bell icon on a blurred background

Pause-on-Hover: Making Toast Notifications Respect the User

Adding aria-live regions and pause-on-hover to a Toast system. Screen readers and sighted users have conflicting timing needs.

2 min read
A keyboard with illuminated keys in a dark environment

Building an Accessible Dropdown Without a Library

Full ARIA menu semantics and keyboard navigation in ~150 lines of React, no Radix, no Headless UI, just the spec.

3 min read
A close-up of a keyboard with a glowing focus indicator

Removing focus-trap-react: Native Focus Management in Modals

Replacing a 15KB focus-trap dependency with native dialog behavior and manual focus management drops bundle size and simplifies the shared-ui library.

1 min read