Lumadro Accessibility Ledger

Description

Lumadro Accessibility Ledger keeps the record that accessibility work usually leaves scattered
across emails and memory. It finds specific WCAG 2.1 AA failures, helps you fix them
in your actual content, and writes every step into an append-only ledger you
can export: each finding with the success criterion it fails, each change with
its before and after, the date, who approved it, and whether AI drafted it.

The European Accessibility Act has applied since 28 June 2025 to many products
and services sold to consumers in the EU, online shops among them, wherever the
seller is based. Its technical reference is WCAG 2.1 level AA, through EN 301 549.
When someone asks what you have done about accessibility, the answer should be
a document, not a feeling.

It does not make your site legally compliant, and no plugin can. It finds
specific problems, helps you fix them properly, and documents the effort in a
form you can show someone, with the tool’s own limits written into it.

This is not an accessibility overlay. It adds nothing to the front end and
does not change what visitors see at runtime. It changes the underlying content.

The ledger

  • Every accepted change is recorded with the date, the text before and after,
    the person who approved it, the AI provider that drafted it (or that a person
    wrote it), and whether the reviewer edited the draft.
  • The ledger is append-only. An undo is added as a new entry; nothing is erased.
  • When a later scan of the same page no longer finds a problem, the ledger
    records it as “no longer detected” with the date, whether it was fixed here
    or anywhere else. It is never presented as proof of a fix: the content may
    simply have changed.
  • A downloadable report lists open findings grouped by success criterion, each
    with its page, and counts confirmed failures apart from items flagged for a
    person to review. It includes the full change log and a section on what the
    checks did not cover.
    It will never say the site is fully conformant, fully accessible or legally
    compliant.

How it finds problems

Site scan. Reads every published post and page and every library image, in
the background, and fetches each published page once to check what the theme
adds. It finds:

  • Images with no alt attribute, and alt text that is really a file name
  • Links and buttons with no accessible name, including icon-only ones
  • Form fields with no label, and frames with no title
  • Headings that skip a level, and pages with no h1
  • A missing or malformed page language, and missing or placeholder page titles
  • Data tables with no header cells, and positive tabindex values

Browser check. Loads your pages in your own browser tab and runs the open
source axe-core engine on them. It sees what visitors see: computed colour
contrast, and forms and content that JavaScript builds after the page loads,
such as a block checkout. It then probes what axe-core cannot: whether the page
scrolls sideways at 320 pixels wide (reflow), whether elements show a visible
change when they take focus, whether clickable elements can be reached from the
keyboard, and whether content that opens on focus closes with Escape. These are
listed for review, never as proven failures. Each run starts with the home page
and shop pages, then pages never checked, then those checked longest ago, so
repeated runs work through the whole site; the browser check screen lists pages
by when they were last checked, and the report says how many never were.
Nothing is sent to any other service.

How it fixes them

AI drafts the part that is slow to write by hand: alt text. It uses your own
provider key through WordPress core’s AI Client, so there are no credits and no
per-fix charges; you pay your provider directly, at cost, for any volume.
Scanning, the browser check and the reports work with no AI configured at all.

Fixes go where the problem is. A library image’s alt text is used wherever it is
placed from then on. An image already placed in a post is fixed in that post,
with a normal post revision, and if the library already describes that image
well, its description is offered without an AI call.

Nothing changes without you

  • A draft is only a draft until you accept it, and you can edit it first.
  • Text a person wrote is never replaced silently. Replacing it needs a
    deliberate choice on that item: tick “Replace the text a person wrote” and
    accept. In a post, an image someone marked decorative (alt=””) counts as a
    person’s decision too.
  • Every change can be undone. If someone has edited the text since, the undo
    refuses rather than discarding their edit.

Lumadro Accessibility Ledger Pro

The free plugin is complete for fixing and recording work one item at a time.
Pro, a separate paid plugin, adds:

  • Bulk accept and reject (still never replacing text a person wrote)
  • Scheduled weekly or monthly re-scans, with a dated scan history you can add to the downloaded report
  • JSON export of the report and CSV export of the change log
  • A drafted accessibility statement written from the same evidence
  • A network overview of every site’s evidence on multisite
  • A portfolio of your separate sites: each exports a summary file, and one
    site shows them all in one table (no site contacts another)

Pro uses the same bring-your-own-key AI, with no credits or per-fix charges.

How much of WCAG this covers

The site scan checks 10 of the 50 WCAG 2.1 level A and AA success criteria. The
browser check adds partial checks of a few more on the pages it loads, and the
report says exactly which and how far. The rest need a person, and the plugin
lists every one of them by name on its “Coverage and limits” screen and inside
every report. Passing the automated checks does not mean your site conforms.

We would rather tell you that than let you believe otherwise.

External services

Your AI provider (optional). Drafting alt text uses the provider you connect
yourself under Settings > Connectors, through WordPress core’s AI Client. Only
when you ask for drafts, the plugin sends the provider the image (the file from
your media library, or its public URL on your own site), the image’s file name,
caption, description and current alt text, and the title, language and nearby text of the published page it
appears on. Nothing from password-protected or private content is sent. No data
is sent to the provider while scanning, running the browser check or building
reports, and nothing is sent at all if no provider is connected. The provider’s
own terms of service and privacy policy apply; see your provider’s website (for
example https://openai.com/policies/, https://www.anthropic.com/legal or
https://policies.google.com/).

When WordPress’s AI Client is missing or has no provider set up, and the
separate AI Services plugin is installed with a provider, drafting uses that
instead. It sends
the same text (the image’s file name, caption, description, current alt text
and the page context above) but not the image itself, only when you ask for
drafts, to the provider configured in AI Services, under that provider’s terms.

No licensing or update service. This plugin contains no licensing code and
contacts no licensing or update service; it updates from WordPress.org like any
other plugin.

The browser check and the site scan contact no outside service: the scan only
fetches your own site’s pages, and axe-core runs in your own browser.

Third-party libraries

  • axe-core 4.13.0 by Deque Systems, Mozilla Public License 2.0.
    Source: https://github.com/dequelabs/axe-core
    Bundled unmodified in assets/vendor/axe-core and loaded only into your own
    pages during a browser check started from the admin screen.

Screenshots

Installation

  1. Install and activate the plugin.
  2. Open Lumadro Accessibility Ledger and scan the whole site. This needs no AI and no setup.
  3. Run the browser check from its screen to add contrast and JavaScript-built content. For a shop, put a product in your cart first.
  4. To draft alt text, add your own provider key under Settings > Connectors (WordPress 7.0 or later), then draft from the review screen.
  5. Review every draft before accepting it, then download the report from the “Report” screen.

FAQ-e

Is this an accessibility overlay?

No. Overlays modify the page for visitors at runtime and are widely criticised by
accessibility practitioners for not achieving conformance. This plugin changes
the content itself and adds nothing to the front end.

Does it make my site EAA or ADA compliant?

No, and be suspicious of anything that says it does. Compliance is a legal
judgement about your whole service. This plugin finds and helps fix specific
technical failures and documents the work. That documentation may be useful
evidence of effort. It is not a certificate and it is not legal advice.

What is in the report?

The date and scope of the last scan and browser check, open findings grouped by
success criterion and page, the complete change log, and the criteria that were
not checked, with the reason. You can download it as Markdown; Pro adds JSON
and a CSV of the change log.

Does it check colour contrast?

Partly, through the browser check. It only covers the pages it loads, in one
desktop-width view, and text over images or gradients is listed for you to check
by eye.

Does it check keyboard access and visible focus?

Partly. The browser check focuses up to 60 elements on each page it loads and
lists those that show no visible change, and lists elements that look clickable
but cannot take keyboard focus. It does not press the Tab key, so keyboard
traps and focus order still need a person using a keyboard, and it cannot tell
whether a focus style is easy to see.

Does it check forms built by JavaScript?

The site scan does not: it reads your stored content. The browser check does,
once the page has finished loading. It does not fill forms in or step through a
checkout, and a WooCommerce checkout only shows its form when the cart has
something in it, so add a product to your cart first.

Will it overwrite alt text I wrote myself?

Not unless you explicitly choose to, one item at a time, in the media library
or in a post. (Pro’s bulk accept cannot touch text a person wrote either.)

Does the browser check send my pages anywhere?

No. axe-core is bundled with the plugin and runs in your browser, on your own
site’s pages. Results go only to your own site.

Who can use it?

Editors and administrators. Accepting, rejecting or undoing a change also needs
permission to edit that particular post or image, so a draft for content you
cannot edit is not shown to you. Settings are for administrators only.

What happens to my data if I delete the plugin?

By default the change log and scan history stay in your database, because they
are your evidence of the work. An administrator can tick “Delete all Lumadro
Accessibility Ledger data when the plugin is deleted” on the dashboard to
remove them on deletion. Alt text already
written is never removed: it is part of your content. On multisite each
site decides for itself.

What does it cost to run?

You pay your AI provider directly for the drafting you use, and nothing to us for
it. There is no credit system.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Lumadro Accessibility Ledger” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

0.1.1

  • First public release.