A Good Gate Earns Its Keep: A11y Gate, the Accessibility Gate for Statamic
The problem with reports
Every accessibility tool we tried had the same shape: scan the site, produce a list, hope somebody reads it. The list gets long, the list gets ignored, and the broken pages are already live while it sits there. A report arrives after the harm is published.
So we built the other thing. Accessibility Gate is a free Statamic addon that refuses the publish itself. Press Save & Publish on an entry with a detectable accessibility error and the save stops, right there in the control panel, with plain words about what is wrong and how to fix it. An image with no description. A link that says "click here." A page with no main heading. The entry does not go live until the problem does not exist.
What a gate is for
A gate on a farm is not decoration. It earns its keep by staying shut at the right moments, and a gate that swings open for whatever pushes on it is just a gap in the fence. That is the whole design here. The addon does not score your site out of a hundred, does not issue a compliance badge, and does not add an overlay widget for your visitors. It stands at one spot, the moment of publishing, and it holds.
It checks the page the way a visitor would receive it: rendered through your own templates, with your unsaved changes applied, before anything is written to disk. Authors get a panel in the entry sidebar to check a page before pressing publish, including a page that has never been saved. Developers get a command, php please a11y:check, that scans every published page and exits non-zero, so a release can be stopped by it too.
What it will not tell you
The part we care most about is what it refuses to say. A page that passes has not been proven accessible, and the addon says so in its own interface, its documentation, and its license. Automated checking reads markup. It cannot see color contrast or anything else a stylesheet decides, it cannot tell a good image description from a lazy one, and a great deal of WCAG is not mechanically detectable at all. When a check cannot run, it tells you that too, because a check that silently finds nothing looks exactly like a check that passed.
An accessibility tool that overstates what it knows is worse than none. People trust it, stop looking, and ship the problems it never saw.
It runs here
This site publishes through the gate. Every post, including this one, rendered and passed before it went live, and more than one draft has been sent back to fix a heading or a link on the way out. That is the arrangement we wanted: not a report to read later, but a gate that was already closed.
Accessibility Gate is free on the Statamic Marketplace, and the source is on GitHub for anyone who wants to read exactly what it checks. Install it with composer require bpmore/statamic-a11y-gate and try to publish something broken.