← All work

Our Ability Inc.2026

Abli.ai: Making PDFs readable for screen readers

You upload a PDF. A few minutes later you get back a version that screen readers can read. It is built for people with disabilities, and university students are now trying it in a pilot.

Overview

Role
Technical Product Designer
Company
Our Ability Inc.
Timeline
Jan to Jul 2026
Platform
Web, desktop
Status
MVP, in pilot
2 → 0
Failed checks on a sample flyer
34
Issues compared across two AI audits

Problem

Benefit guides, HR forms and student handouts are mostly PDFs. Most of them can't be read properly by a screen reader, and fixing them by hand is slow and costs a lot.

What I did

I led the design, from a student prototype with one upload box to a four-screen flow. I designed it straight in code, using Claude Code and Cursor.

Result

An MVP, now in a pilot with university students. On a sample flyer, the checker went from 2 failed to 0 failed.

The solution

Four screens, no sign-up. No account, no mobile view, no admin side. Anyone can open the site, upload a file and get a fixed one back.

Step 3, results. You get a before and after check, one download button, and a way to process another file. The banner at the top gives the main numbers.
Step 1, upload. One box. The limits are shown up front: PDF only, up to 2 GB and 2,000 pages. Type, size and page count are checked as soon as you pick a file.
Step 2, processing. A plain label says what is happening, like "generating alt text". A progress bar and a timer show it is still moving. You can always leave with Cancel and start over.

The problem

Benefit guides, HR forms and student handouts are mostly PDFs. Most of them can't be read properly by a screen reader.

Fixing them by hand is slow and costs a lot. Abli.ai gives back a more usable version in minutes.

A student team built the first version. It was just an upload box for PDFs, and it was not what the founder had in mind. He had seen my 2022 redesign of the Our Ability job search dashboard, and asked me to lead this one.

Key decisions

Show proof, not just a download

Most tools hand you a file and say it is fixed. I added an accessibility checker table to the results screen, so people can see what failed before and what passes now. Checks that need a person, like reading order and color contrast, are marked Manual. They are not counted as passed.

Image descriptions went from failed to passed.
Table summaries went from failed to passed. On this sample flyer, the checker went from 2 failed to 0 failed.

Honest wording

The first version said "WCAG compliant". I changed it to "Accessibility Optimized". AI fixes cannot promise full compliance, so the label should not promise more than the tool does.

A Reports page that compares two AI audits

AI can be wrong, so I added a page for the team that puts two audits side by side. Claude and Gemini each check the same document. When both flag an issue, we trust it more. When only one does, it goes to review. This helps the team decide how much to trust the AI.

Reports page from a sample run on a public flyer: 34 issues in total. Both models agreed on 5, only Claude found 19 and only Gemini found 10.
The same page, filtered to the issues marked for review.

Edge cases I designed for

  • What if Adobe's monthly limit runs out?

    Jobs used to fail halfway. Now the home page checks first, and a warning banner says the job will run on the backup service.

  • What if both services are full?

    The upload box is hidden. A message shows the date the limit resets. No job fails halfway.

  • What if the file is too big, too long, or not a PDF?

    The limits are shown up front: PDF only, up to 2 GB and 2,000 pages. Type, size and page count are checked as soon as you pick a file.

  • What if someone changes their mind mid-way?

    You can always leave with Cancel and start over.

  • What if a check needs a person?

    Checks like reading order and color contrast are marked Manual. They are not counted as passed.

  • What if the two AI audits disagree?

    When only one of them flags an issue, it goes to review instead of being trusted.

When both services are at capacity. The reset date is worked out by the app.

Accessibility

I tested the site with only a keyboard. I could not reach the upload box, so a keyboard user could not even start. For a tool built for disabled people, this comes first.

I built a small fix on a branch: the box is now a real control, Enter and Space open the file picker, and it has a clear focus ring.

Keyboard focus on the upload box after the fix. The ring is about 3.4:1 against the page background, above the 3:1 minimum for interface components.

Results

Abli.ai is an MVP, now in a pilot with university students.

On a sample run with a public flyer, image descriptions and table summaries went from failed to passed, and the checker went from 2 failed to 0 failed. The Reports page found 34 issues on the same flyer, and showed where Claude and Gemini agreed.

How I got there

Where it started

The starting point was the student team's prototype: one upload box and nothing around it. Everything above, from the limits shown up front to the failure states, was added from there.

How I worked

I designed it straight in code, using Claude Code and Cursor. So every screen here is a real screenshot of the product, not a mockup. Sample runs use a public flyer, and screenshots are cropped to remove dev tools, internal credit counts and empty space.

What I'd do differently

These came from testing the product myself, not from pilot feedback.

Mixed messages after processing

The green "Remediation Complete" banner sits above a list of problems found before the fixes. It reads like 17 critical issues are still open. The count on the tab also comes from the AI's own summary, so it can disagree with the list below it.

Today: a green success banner, then a tab showing 17 critical issues with no sign of which are fixed. Better: rename the tab "Issues found before fixes", show a status on each issue, and build the count from the list itself.

Nothing to do when both services are full

The upload box disappears and people can only wait for the reset date. I would add a "notify me" option or a contact link.

Details that add up

The processing screen shows a raw status code ("QUEUED"). The About, Contact and Privacy links in the footer go nowhere yet.