Accessible by default, not by setting
Keyboard, captions, screen readers, and the difference between access — which is always on — and preference, which is yours to choose.
There is a way of building accessibility that looks conscientious and is quietly a locked door: put everything behind an "accessibility mode" and let people switch it on. It looks like choice. It is a switch you have to be able to operate using the thing the switch turns on.
We drew a line through the middle of that. Here is where it fell.
Access is unconditional
Some things are not settings, because a setting is a door and these things are the door.
The keyboard works everywhere. Every control can be reached and pressed without a mouse. The space itself — the field of people and huddles — is one tab stop, not one per person; a busy room would otherwise put a hundred stops between the camera controls and the huddle card, which is operable and unusable at the same time. Inside it, the arrow keys move between people in a stable order (by name, not by position, because people drift and the list would reshuffle under you). Enter opens the person, or the huddle, or your own menu.
Everything has a name. Every button says what it does to a screen reader, and the field says what is in it: who is here, which huddles are open, what each is called and whether it is live. A private huddle you are not in is announced as "Private huddle" and nothing more — the same boundary drawn on the screen, drawn in words.
Focus is visible. A ring appears around whatever has keyboard focus, and only for keyboard focus, so pointer users never see it and keyboard users always do.
Escape works. Every panel, sheet and dialog closes on Escape, through one shared mechanism, because eight surfaces once had their own and seven of them dropped the first press — on the one interaction people do by reflex, wanting out.
There is a skip link. Invisible until it takes focus, and then it takes you straight to the people.
None of these can be turned off, because turning them off would turn off the ability to use the product for the people who need them. They are also invisible to everyone else. A pointer user sees no ring, hears no announcement, and never finds the skip link. That is the shape we wanted: invisible until used, never off until enabled.
Preferences go behind a button
Other things genuinely cost something when they are unwanted, and those are choices. They live behind the Accessibility button, which is in the footer of every screen and in your own menu.
Announcements. A screen reader can be told what is happening in the room — somebody arrived, a huddle went live, your microphone is muted — but a screen reader narrating every reaction in a busy space is a denial of service. So announcements have two levels: the important ones are on, and the ambient ones (arrivals, reactions, notes) are off until asked for.
Motion. Huddles follows your operating system's reduced-motion setting by default, and lets you override it in either direction, because the system setting is hard to find and all-or-nothing across every app. The one thing reduced motion never removes is the scatter on a reaction — a reaction with no motion is a reaction nobody sees.
Captions. Turn them on and the room captions, from every speaker, into a rail at the bottom of the screen. This is the one that took the most thought, so it gets its own section.
Captions, and the question they raise
Captions in Huddles are live speech recognition, and the first version made a mistake we are glad we caught: it treated needing captions as a thing the room could see.
Needing captions is a fact about somebody's hearing. A huddle that shows who turned them on has disclosed a disability to everyone in it. So captioning is a property of the room — on or off — and never a list of who asked. You turn them on, the room captions, nobody knows it was you.
The second question is where the voice goes. Recognising speech means sending it to a recogniser, and in most browsers that recogniser is a third party this product otherwise never talks to. So contributing your voice to the captions is asked, once, on your device, in words that say where the voice goes — and declining still lets you read everything. Somebody else's need for captions authorises the room to caption; it does not authorise sending your voice anywhere.
And the third: captions are relayed and never kept. A captioned huddle is not a transcribed one. Somebody who joins late sees nothing that was said before they arrived.
Things we are honest about not having
A tool that claims full accessibility is usually a tool that has not checked. So, the gaps:
- Two colours fail contrast for small text: the live red on a card and the connected green on paper. Both are used as indicators, never as body text, and a darker variant is on the list.
- Board items move by press-and-hold, and there is not yet a single-pointer alternative for moving one. That is a real gap against the current guidelines and we know it.
- No live captioner. Automated recognition varies with accent, dialect and noise, and where accuracy is a legal requirement the answer is a human, not a better model. The seam for one exists; the service does not yet.
- No sign-language interpreter workflow, because until recently there was no participant video at all, and it is early.
The escape hatch
Software cannot anticipate every disability, and a product that offers only the accommodations somebody thought of in advance has quietly decided who it is for. So there is an address — access at huddles dot space — in the accessibility panel, and it is not decoration. If the product does not work for you, that is where to say so, and it is read.
The principle
Access is not a feature; it is whether the door opens. Features are what you do once you are inside. We built the door to open for everyone, and we put the things that are matters of taste behind a button where taste belongs.