Pagecraft

Accessibility statement

If your organisation asks for a conformance statement before it will approve a tool, this is it. It is written from what the test suite actually checks rather than from what we would like to claim, and every sentence in it points at the file that checks it.

What is claimed

Standard
WCAG 2.2
Level
AA, met in full, with every piece of ordinary text held to 7:1 — the enhanced contrast threshold, which is AAA. Large text keeps the standard threshold, which is what the success criterion itself says.
What was assessed
Every page this build published: 334 of them, in 4 languages, each one in the light theme and again in the dark one.
Last checked
The checks below run on every change; this is the day somebody last read the whole result and signed this page.

What was assessed, and where each part is checked

Five things, over the whole of the published site rather than a sample of it. A tool page is one template with different words in it, so a sample looks like it would do — and it would not, because what breaks is the words.

How to run it yourself

None of this has to be taken on trust, which is the same standard the zero-upload claim is held to on the “How it works” page. This site is open source and the source is the whole product, so the files named above are ones you can open, and they run in continuous integration on every change. On a checkout, the whole suite is one command:

pnpm test:e2e

A failure names the page, the language, the theme and the element. If you find something these tests pass and you do not, that is a bug in the tests as much as in the page, and we would like to hear about it.

The two hardest parts

A claim made about “the site” is usually a claim about the pages either side of the difficult bit. These are the two difficult bits, so they are stated separately.

Rearranging pages by hand

The page organiser is a grid of pages that can be dragged about with a mouse, and everything a drag does can be done without one. Tab reaches the grid once rather than once per page; the arrow keys move a caret; Space chooses, Enter picks pages up and puts them down, Escape puts them back where they were, and Delete drops them. Every one of those says what it did in a live region — “Now at 3 of 12.” while a page is being carried, “Put down at 3 of 12.” when it lands, “Deleted 1. 11 left.” — and each cell carries its own position and the total, so a screen reader reads where it is off the page rather than off a heading above it. The route is walked by a test, not asserted by this paragraph.

Checked in apps/web/tests/site/organize.spec.ts

Asking an AI about a document

The AI tools put a review step between asking and sending: the exact text that would leave your browser is shown in full, and nothing is sent until you press the button under it. That step is a real part of the interface rather than a confirmation dialog, so the whole route through it is walked with the Tab key and Enter and nothing else — set up a vault, add a provider, work out what would be sent, read it, send it, and stop a request that is already in flight. The answer arrives in a live region as it is written.

Checked in apps/web/tests/site/ai.spec.ts

What still does not work

Four things, named plainly. Each one is pinned by a test asserting it is still the case, so this list cannot go on describing a product that has moved past it: fix one and the build fails until the entry is deleted.

A picture of a page is not described

What you hit
Wherever pages are shown as thumbnails — the organiser above all — each one is named by where it sits and which file it came from: “Page 3 of 12, from deck.pdf page 3”. The image itself is marked as decoration. Nothing says what is printed on the page, because nothing here has read it.
What to do instead
Find out what is on which page first, with PDF to text or Search a PDF, both of which report the page number. The organiser is then entirely operable by number — and Delete PDF pages, Extract PDF pages and Reorder PDF pages take a typed page range and never show a thumbnail at all.

A long document is only partly on the page

What you hit
A 500-page document is drawn as a few dozen cells near the viewport rather than 500, so that the grid stays usable. Each cell tells the truth about the total, and the arrow keys reach every page, but a screen reader browsing the list as a list will not find page 400 in it until the grid has been scrolled there.
What to do instead
Move with the arrow keys, Home and End rather than by browsing: the caret scrolls the grid to whatever it reaches, so every page is reachable that way. For a document this long, a typed page range on Delete PDF pages, Extract PDF pages or Reorder PDF pages is usually less work than any grid.

What comes out is no more accessible than what went in

What you hit
Pagecraft rearranges, converts and rewrites documents. It does not add tags, headings or a reading order to one, and it claims no PDF/UA conformance: merging two untagged files gives you one untagged file, and an inaccessible document processed here is an inaccessible document afterwards.
What to do instead
Two tools do make a document more readable, as far as they go: Make a scan searchable puts a text layer over a photograph of a page, which is the difference between something a screen reader can read and a picture; and Add alt text to PDF images writes the descriptions, together with the tag tree they have to hang off. For full tagging, use an editor that authors structure.

The file chooser belongs to your operating system

What you hit
The keyboard reaches the file control on every tool, and that is checked. What opens when you press it is your browser’s own dialog, which this site cannot name, style or fix — so if that dialog is hard to use for you, nothing here changes it. The standard holds a page to its own interface rather than to the browser’s, so this is not a failure against it; it is listed because a person still hits it.
What to do instead
Skip it. A file dropped onto the page arrives exactly the same way, and so does one pasted with Ctrl+V — which is the one a keyboard has.

Reporting a barrier

Open an issue at github.com/amanawasthi2025/pagecraft. Describing what you were trying to do is more useful than a criterion number, and if it is something these tests should have caught, the fix is a test as well as a change. Reporting needs a GitHub account, which is a barrier this statement would rather not put in front of you — it is the only route there is until this project has an address of its own.

If you are self-hosting this

This statement is about the build published at this address. A copy of Pagecraft served from somewhere else is a deployment we have not seen — and if your organisation is required to publish a statement of its own, it needs to be yours rather than a link to this one. The suite that produced this page is in the repository and runs against any build, so the honest version is to run it against yours and publish what it says.