Zero Paid APIs • Deterministic WCAG 2.1 AA
ADA Compliance Agent
Scan a static site, write conservative source-code fixes with .bak backups, and get a dark HTML audit report. BeautifulSoup + tinycss2 + Jinja2. No browser engine. No paid keys.
Live host run on a seeded 10 violation page (10 HTML plus 1 CSS contrast at 2.85:1). After --fix: 9 conservative fixes applied, 3 remaining by design (landmarks, table headers, human color choice). Backup written to index.html.bak.
Seeded test cycle
11 found. 9 fixed. 3 left on purpose.
The demo site was planted with missing lang, missing title, skipped heading, unlabeled form fields, empty link, nameless button, missing img alt, no landmarks, table without th, and #999 on #fff contrast.
WCAG 2.1 AA subset
Eleven deterministic rules
| Rule | Check | WCAG |
|---|---|---|
| IMG-ALT | img missing alt attribute | 1.1.1 |
| H-ORDER | heading levels skip | 1.3.1 |
| H-MISSING | no h1 | 1.3.1 |
| FORM-LABEL | control without label / aria-label | 1.3.1 / 4.1.2 |
| A-LINK-TEXT | anchor without discernible text | 2.4.4 |
| BTN-NAME | button without accessible name | 4.1.2 |
| LANDMARK | no main / nav / header | 1.3.1 / 2.4.1 |
| LANG | html missing lang | 3.1.1 |
| TITLE | document missing title | 2.4.2 |
| TABLE-HEADERS | data table without th | 1.3.1 |
| CSS-CONTRAST | resolved color pair below 4.5:1 (3:1 large) | 1.4.3 |
Conservative fixer
Writes source. Keeps a .bak.
Mutation only with --fix. Each changed file is copied to <name>.bak first. Confidence is labeled on every change.
HIGH lang="en", document title from filename, heading skip repair.
MEDIUM aria-label from placeholder / name / href.
LOW decorative alt="" - human should confirm the image is decorative.
Honesty
Not every finding is auto-fixed
Landmarks and table headers stay flagged - wrapping a page in <main> or inventing th cells is too structural to guess. Contrast stays flagged because picking a new color is a design decision. Unresolved CSS (inherited-only color) is listed, not estimated.
This is a WCAG 2.1 AA subset, not a legal audit. The paid SSH fixer at /ada/ is a separate live product.
Pipeline
Offline. Deterministic. Open source.
pathlibbeautifulsoup4 + lxmltinycss2 + WCAG luminance.bak then writejinja2Get it
Run it yourself
Or deploy the hosted agent on Capafy once published. Privacy: hotchows.com/privacy-policy/