Awfully Helpful
Limited Accessibility Check report
Summary
- Client
- None. A practice check of a small Minnesota city’s public website. The city did not ask for it. Its name is withheld.
- Checked
- September 28 to October 23, 2026
- Standard
- WCAG 2.1 Level AA
- Scope
- The homepage, 5 more pages and 2 PDFs (10 PDF pages in total)
- Findings
- 27 problems. This page shows 6 of them in full.
- Checks passed
- 120 of 147 checklist steps (82%). 12 steps were not tested. This share is not a grade and not a WCAG conformance level.
- Type of check
- A Limited Accessibility Check. It covers only the pages and PDFs listed below. It is not a full conformance audit.
- How it was checked
- Two scanners, browser probes and real NVDA speech: in Edge on Windows for the pages, and in Acrobat Reader for the PDFs. Two AI judges from different vendors, each blind to the other, had to agree on each finding, or Kyle checked it by hand. Kyle read every finding.
- Legal note
- This report is not legal advice.
Pages checked
- Homepage
- Pay a utility bill
- Forms and applications
- Meeting agendas and packets
- Contact
- Calendar
PDFs checked
- City council minutes (6 pages)
- Park rental form, fillable (4 pages)
What was tested
| Page or PDF | Passed | Failed | Not tested |
|---|---|---|---|
| Homepage | 20 | 3 | 2 |
| Pay a utility bill | 19 | 4 | 2 |
| Forms and applications | 20 | 3 | 2 |
| Meeting agendas and packets | 19 | 4 | 2 |
| Contact | 19 | 4 | 2 |
| Calendar | 19 | 4 | 2 |
| All pages together (one step) | 1 | 0 | 0 |
| City council minutes (PDF) | 2 | 2 | 0 |
| Park rental form (PDF) | 1 | 3 | 0 |
| Total | 120 | 27 | 12 |
Who fixes what
- The site’s theme or template (the web developer): 9 findings
- City staff (the city’s own text, images, links and PDFs): 6 findings
- Both: 12 findings
Six of the 27 findings
I chose these six to show different kinds of problems. They are in the same order as in the full report.
- Some text is too light against its background
- The main pay-bill link has no name
- An instruction works only if you can see the page
- The headings do not show the page’s structure
- The contact form’s fields are too faint to see
- The rental form’s fields are silent to a screen reader
1. Some text is too light against its background
- Where
- Homepage. The main menu links are
#1f6692on#aec8d8(3.57:1; one link measured 3.18:1). The quick-link tiles are white on#aec8d8(1.74:1), white on#b77d4d(3.47:1) and white on#0090d6(3.52:1). The footer “Subscribe” button is#1f6692on#eb7692(2.23:1). The welcome paragraph at the top is about 2.5:1. The large “Events” heading is#e1e7econ white (1.25:1). - WCAG rule
- 1.4.3 Contrast (Minimum) (Level AA)
- What is wrong
- Normal text needs at least 4.5:1, and large text at least 3:1. All of these are below that, and the screenshots match the measurements. People with low vision struggle to read this text.
- The scanners also found
- AccessLint found 4, axe-core found 10. The two scanners overlap, so these do not add up.
- Confirmed by
- Two AI judges (Claude and Codex) with the screenshots, each blind to the other
- Who fixes it
- The site’s theme or template. Ask the web developer; staff edits cannot change this part.
- How to fix
- Change the theme colors so all normal text reaches at least 4.5:1. Use dark text on the light-blue menu and the pink button. Use darker tile colors behind white text. Make the welcome paragraph white. Make the “Events” heading dark enough for 3:1, or make it decoration only.
- How to retest
- Reload the homepage. Check each item above with a contrast tool, such as the Colour Contrast Analyser. Normal text must show at least 4.5:1, and the large “Events” heading at least 3:1. Then run the contrast scanner again.
2. The main pay-bill link has no name
- Where
- Pay a utility bill page. The link to the online payment site, in the main content. Also the logo link and the YouTube link, in the header and again in the footer.
- WCAG rules
- 2.4.4 Link Purpose (In Context) (Level A); 2.5.3 Label in Name (Level A); 4.1.2 Name, Role, Value (Level A)
- What is wrong
- Five links have no name, and one of them is the main pay-bill link. NVDA reads part of its web address instead, an account code. The logo link is read as the site’s address and the YouTube link as “featured”. In the links list, all five say only “link”.
- The scanners also found
- AccessLint found 5, axe-core found 5.
- Confirmed by
- Two AI judges (Claude and Codex) with the screenshots, each blind to the other
- Who fixes it
- Both. The logo and YouTube links are in the theme. The pay link is in the city’s own content.
- How to fix
- Give each image or icon link a name that says where it goes. For the pay link, use alt text such as “Pay your utility bill online”. In the header and footer, name the logo link “City of [name] home” and the icon link “City of [name] on YouTube”, with alt text or an
aria-label. - How to retest
- Open the NVDA links list (Insert+F7) and Tab through the page. It passes when all five links say a clear name, not a blank or a web address.
3. An instruction works only if you can see the page
- Where
- Pay a utility bill page, main content. The sentence “Click on the payment logo above to view your bill online…” and the payment logo above it (eCheck, Savings, MasterCard, Discover, Visa).
- WCAG rules
- 1.3.2 Meaningful Sequence (Level A); 1.3.3 Sensory Characteristics (Level A)
- What is wrong
- The page tells people to “click on the payment logo above”. That works only if you can see it. NVDA reads the logo as a blank object, so a screen reader user hears no name and no link. The rest of the reading order makes sense.
- Confirmed by
- Two AI judges (Claude and Codex) with the screenshots, each blind to the other
- Who fixes it
- City staff. It is in the city’s own content.
- How to fix
- Change the sentence so it names the link, not its shape and place. For example: “Select Pay Your Bill Online to view your bill.” Make that a real text link, or give the logo alt text that says where it goes.
- How to retest
- Read the page with NVDA (Insert+Down Arrow). It must say a link with a clear name, such as “Pay Your Bill Online”. The instruction must no longer depend on “logo” or “above”.
4. The headings do not show the page’s structure
- Where
- Meeting agendas and packets page. The four board sections (City Council, Planning Commission, Economic Development Authority and Park Board) and the year links under each, 2026 to 2021.
- WCAG rules
- 1.3.1 Info and Relationships (Level A); 2.4.6 Headings and Labels (Level AA)
- What is wrong
- The page title is good. The headings are the problem. The page has no level 1 heading, and every heading is level 4. The headings list shows 24 bare years, “2026” to “2021” four times over, with nothing to say which board each one belongs to.
- Confirmed by
- Two AI judges (Claude and Codex) with the screenshots, each blind to the other
- Who fixes it
- Both. Part is in the theme, part is in the city’s own content.
- How to fix
- Add one level 1 heading, “Meeting Agendas & Packets”. Make each board heading level 2. Then make the years level 3 under their board, or turn them into plain list links.
- How to retest
- In NVDA, press Insert+F7 and open the headings list. It shows one level 1 heading and four level 2 board headings. Each year sits at level 3 under its board, or is gone from the list.
5. The contact form’s fields are too faint to see
- Where
- Contact page, the contact form: the two name fields, the email and confirm email fields, and the message box. Each has a
#ccd5dbborder on a white background. - WCAG rule
- 1.4.11 Non-text Contrast (Level AA)
- What is wrong
- The fields have no fill and only a pale border. The border is 1.49:1 against white. It needs at least 3:1, so people with low vision may not find the fields. The search box passes: its light gray fill stands out against the blue header.
- Confirmed by
- Two AI judges (Claude and Codex) with the screenshots, each blind to the other
- Who fixes it
- The site’s theme or template. Ask the web developer; staff edits cannot change this part.
- How to fix
- Make the borders of the text fields and the message box darker, for example
#767676or darker on white, so they reach at least 3:1. Or give the fields a fill that is at least 3:1 against the page. - How to retest
- Reload the contact page. Check each field’s border color against the white page with a contrast tool. Every border reads 3:1 or more.
6. The rental form’s fields are silent to a screen reader
- Where
- The park rental form (PDF), all 18 tab stops: 14 text fields and 4 check boxes.
- WCAG rules
- 4.1.2 Name, Role, Value (Level A); 2.4.3 Focus Order (Level A); 3.3.2 Labels or Instructions (Level A); 2.4.4 Link Purpose (In Context) (Level A)
- What is wrong
- In both NVDA runs, no field said its label. NVDA said only “edit, blank” or “check box, not checked”. Only the Clear Form button had a name. A screen reader user cannot tell which field is which, so they cannot fill in the form on their own.
- The scanners also found
- 19 of 19 form fields have no tooltip label.
- Confirmed by
- Two AI judges (Claude and Codex) with the screenshots, each blind to the other
- Who fixes it
- City staff. It is in the city’s own content.
- How to fix
- Open the PDF in Adobe Acrobat Pro and go to Prepare Form. For each text field and check box, open Properties. In Tooltip, type its printed label, such as “Renter name” or “Pavilion rental date”. Make sure Tab moves through the fields in the order they appear on the page.
- How to retest
- Open the new PDF in Adobe Acrobat Reader with NVDA running. Tab through every field. Each one says its label, such as “Renter name, edit, blank”, and the order follows the page.
Not tested
12 steps were not tested, 2 on each page. The pages have form fields, so I did not press single keys to test for one-key shortcuts. And I had no written permission to send the city’s forms, so I did not test their error messages.
WCAG 2.1 AA results
Fails (14): 1.1.1 Non-text Content; 1.3.1 Info and Relationships; 1.3.2 Meaningful Sequence; 1.3.3 Sensory Characteristics; 1.4.3 Contrast (Minimum); 1.4.5 Images of Text; 1.4.11 Non-text Contrast; 2.4.2 Page Titled; 2.4.3 Focus Order; 2.4.4 Link Purpose (In Context); 2.4.6 Headings and Labels; 2.5.3 Label in Name; 3.3.2 Labels or Instructions; 4.1.2 Name, Role, Value.
Not tested (5): 2.1.4 Character Key Shortcuts; 3.1.1 Language of Page; 3.3.1 Error Identification; 3.3.3 Error Suggestion; 4.1.3 Status Messages.
No failure found (30). This means the steps found no failure on these pages. There may still be problems that the steps did not find. 4.1.1 Parsing is treated as met, as the W3C’s note to WCAG 2.1 says.