The accessibility checks we run before release
Accessibility fails in the same few places on almost every project. Catching them costs minutes during the build and days afterwards.
Accessibility work has a reputation for being large and vague. In practice, the same handful of defects account for most of what we find, and all of them are cheaper to prevent than to retrofit.
Everything reachable with a keyboard
We tab through every screen before release. Every control must be reachable, the focus ring must be visible, and the order must follow the visual layout. Modals must trap focus while open and return it to the trigger when closed — a dialog that drops focus back to the top of the page is disorienting for anyone not using a mouse.
Real elements before ARIA
A button should be a button. Most accessibility bugs we fix are a div wearing a click handler, and the fix is to delete the workaround rather than to add attributes describing it. ARIA is for the cases the platform genuinely cannot express, not a patch over the wrong element.
Contrast, checked rather than judged
Contrast is measured, not eyeballed, and it is checked in both themes. Placeholder text, disabled states and text over imagery are where designs usually fail, because they are the parts nobody looks at in the review.
Forms that say what went wrong
Every input has a label that is programmatically associated with it, not just positioned above it.
Errors are announced and describe the fix, rather than colouring the field red and leaving the reader to guess.
Required fields are marked in text as well as with a symbol.
Content that survives the assistive layer
Headings go in order and describe the section rather than decorate it. Images carry alt text where they mean something and are hidden from assistive technology where they do not. Link text makes sense on its own, because screen reader users often navigate by pulling up a list of links with no surrounding sentence.
Motion is a preference, not a default
Every animation we ship respects the reduced-motion setting. For some people this is not an aesthetic preference — parallax and large transitions cause real nausea, and honouring the setting is a one-line media query.
None of this replaces testing with people who use assistive technology daily. It does mean that when you do, the session is spent on the interesting problems rather than on defects a keyboard would have found.
Keep reading
How much does an app cost in 2026?
There is no single number, but there is a method. Here is how we turn a rough idea into a range you can plan around, and what makes that range move.
Native or cross-platform: how we actually choose
We default to Flutter for cross-platform work and go native when the project earns it. The decision comes from constraints, not fashion.