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.

11 findings on first scan

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.

11first-scan findings
9fixes applied
3remaining (no-auto-fix)
2.85:1seeded contrast fail

WCAG 2.1 AA subset

Eleven deterministic rules

RuleCheckWCAG
IMG-ALTimg missing alt attribute1.1.1
H-ORDERheading levels skip1.3.1
H-MISSINGno h11.3.1
FORM-LABELcontrol without label / aria-label1.3.1 / 4.1.2
A-LINK-TEXTanchor without discernible text2.4.4
BTN-NAMEbutton without accessible name4.1.2
LANDMARKno main / nav / header1.3.1 / 2.4.1
LANGhtml missing lang3.1.1
TITLEdocument missing title2.4.2
TABLE-HEADERSdata table without th1.3.1
CSS-CONTRASTresolved 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.

1. Walk HTML filespathlib
2. Parse DOMbeautifulsoup4 + lxml
3. Contrast pairstinycss2 + WCAG luminance
4. Optional --fix.bak then write
5. Render reportjinja2

Get it

Run it yourself

Download skill bundle View SKILL.md

Or deploy the hosted agent on Capafy once published. Privacy: hotchows.com/privacy-policy/