This is a sample. We audited Wonderous, an open-source app nobody paid us to be kind about, so that our work could be checked rather than described. The document below is exactly what a client receives.

An audit of your app →

checkApp · hello@checkapp.dev

Accessibility report

Wonderous

Version 2.2.0 · Flutter, iOS · 8 screens · 2026-09-14

Summary

29defects
1critical
24serious
4moderate

Each defect is one place in the product, however many screens it appeared on.

What this report is

A clean result is not a statement of conformance. It means no automated check found a violation. Conformance with the European Accessibility Act also requires testing by a person — reading the screens with a screen reader, working them with a keyboard, judging whether the wording makes sense — and someone willing to sign for it.

Automated checking finds a minority of real accessibility problems. It is good at what it covers and silent about the rest, and the clause table below says plainly which is which.

Accessibility (EN 301 549)

What the European Accessibility Act asks of an app, through the standard it points at.

RequirementWhat it asksIn forceResultDefects
WCAG 1.1.1 (A) / EN 301 549 §11.1.1.1Non-text ContentNot checked
WCAG 1.3.2 (A) / EN 301 549 §11.1.3.2Meaningful SequenceNot satisfied1
WCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3Contrast (Minimum)Not satisfied17
WCAG 1.4.4 (AA) / EN 301 549 §11.1.4.4Resize TextNot satisfied2
WCAG 1.4.11 (AA) / EN 301 549 §11.1.4.11Non-text ContrastNot satisfied1
WCAG 2.3.3 (AAA)Animation from InteractionsNot checked
WCAG 2.4.7 (AA) / EN 301 549 §11.2.4.7Focus VisibleNot checked
WCAG 2.4.11 (AA) / EN 301 549 §11.2.4.11Focus Not Obscured (Minimum)Not checked
WCAG 2.5.8 (AA) / EN 301 549 §11.2.5.8Target Size (Minimum)Not satisfied3
Platform guidance target sizeTouch target size (platform guidance)Not satisfied2
WCAG 2.5.7 (AA) / EN 301 549 §11.2.5.7Dragging MovementsNot checked
WCAG 4.1.2 (A) / EN 301 549 §11.5.2.5Name, Role, ValueNot satisfied3
WCAG 3.2.6 (A) / EN 301 549 §11.3.2.6Consistent HelpNot checked
WCAG 3.3.7 (A) / EN 301 549 §11.3.3.7Redundant EntryNot checked
WCAG 3.3.8 (AA) / EN 301 549 §11.3.3.8Accessible Authentication (Minimum)Not checked
EN 301 549 §11.7User preferencesNot checked

“Not checked” means exactly that: nothing in this run looked at it. It is not a pass.

Defects

This button has no accessible name; a screen reader announces it as an unnamed button.

criticalunlabeled-interactiveWCAG 4.1.2 (A) / EN 301 549 §11.5.2.5

lib/ui/screens/artifact/artifact_carousel/widgets/_bottom_text_content.dart:45

Wrap it in Semantics(button: true, label: ...), taking the wording from your localisations.

Seen on: Artefacts, Timeline, Collection (3 times)

This button is 17×27, below the Android minimum of 48×48, so it is hard to hit for anyone with limited dexterity.

serioustap-target-sizeWCAG 2.5.8 (AA) / EN 301 549 §11.2.5.8

lib/ui/common/controls/buttons.dart:200

Grow the tap area without growing the icon: wrap the child in a SizedBox of 48×48, or give the button a minimumSize.

Seen on: Wonder details, Editorial, Photo gallery, Artefacts, Timeline, Collection (43 times)

"the Great Wall" has a contrast ratio of 2.29:1 against its background, below the 3.0:1 required at 64pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/wonder_illustrations/common/wonder_title_text.dart:50

Darken the text or lighten what is behind it. Measured #164F2A against #5B8474.

Seen on: Wonder details, Artefacts, Collection (6 times)

"Last known date recorded in the Osari..." has a contrast ratio of 2.43:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/common/timeline_event_card.dart:51

Darken the text or lighten what is behind it. Measured #E4935D against #FFFFFF.

Seen on: Artefacts, Timeline, Collection (5 times)

"100" has a contrast ratio of 1.00:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/timeline/widgets/_year_markers.dart:72

Darken the text or lighten what is behind it. Measured #1E1B18 against #1E1B18.

Seen on: Timeline (5 times)

This button is 114×23, below the Android minimum of 48×48, so it is hard to hit for anyone with limited dexterity.

serioustap-target-sizeWCAG 2.5.8 (AA) / EN 301 549 §11.2.5.8

lib/ui/screens/artifact/artifact_carousel/widgets/_bottom_text_content.dart:45

Grow the tap area without growing the icon: wrap the child in a SizedBox of 48×48, or give the button a minimumSize.

Seen on: Artefacts, Timeline, Collection (3 times)

"9th–10th century" has a contrast ratio of 1.94:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/artifact/artifact_carousel/widgets/_bottom_text_content.dart:71

Darken the text or lighten what is behind it. Measured #272625 against #535251.

Seen on: Artefacts, Timeline, Collection (3 times)

This icon is #FFFFFF on #FFFFFF, a contrast ratio of 1.00:1, below the 3.0:1 an icon needs to be made out.

seriousicon-contrastWCAG 1.4.11 (AA) / EN 301 549 §11.1.4.11

lib/ui/screens/home/widgets/_animated_arrow_button.dart:39

Darken or lighten the icon colour. If it is purely decorative and a label beside it already says the same thing, wrap it in ExcludeSemantics so it is not treated as meaningful.

Seen on: Wonder details, Photo gallery, Artefacts (3 times)

A screen reader reaches "back" right after "Facts and History", but it sits 567 pixels higher up the screen, so the reading order jumps backwards.

seriousreading-orderWCAG 1.3.2 (A) / EN 301 549 §11.1.3.2

lib/ui/common/controls/buttons.dart:200

Reorder the widgets, or set an explicit order with Semantics(sortKey: OrdinalSortKey(...)) on this subtree.

Seen on: Wonder details, Timeline (2 times)

"BROWSE ALL ARTIFACTS" has a contrast ratio of 1.13:1 against its background, below the 4.5:1 required at 14pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/common/controls/buttons.dart:68

Darken the text or lighten what is behind it. Measured #1E1B18 against #272625.

Seen on: Collection (2 times)

"THE GREAT MAYAN CITY" has a contrast ratio of 4.22:1 against its background, below the 4.5:1 required at 14pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/editorial/widgets/_title_text.dart:35

Darken the text or lighten what is behind it. Measured #1E1B18 against #688750.

Seen on: Timeline, Collection (2 times)

"YUCATAN, MEXICO" has a contrast ratio of 4.22:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/editorial/widgets/_title_text.dart:64

Darken the text or lighten what is behind it. Measured #1E1B18 against #688750.

Seen on: Timeline, Collection (2 times)

"550 CE to 1550 CE" has a contrast ratio of 1.13:1 against its background, below the 4.5:1 required at 14pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/editorial/widgets/_title_text.dart:88

Darken the text or lighten what is behind it. Measured #1E1B18 against #272625.

Seen on: Artefacts, Collection (2 times)

"ARTIFACTS" has a contrast ratio of 1.13:1 against its background, below the 4.5:1 required at 14pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/common/controls/app_header.dart:43

Darken the text or lighten what is behind it. Measured #1E1B18 against #272625.

Seen on: Timeline

"832" has a contrast ratio of 1.13:1 against its background, below the 3.0:1 required at 24pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/common/timeline_event_card.dart:35

Darken the text or lighten what is behind it. Measured #1E1B18 against #272625.

Seen on: Artefacts

"CE" has a contrast ratio of 1.00:1 against its background, below the 4.5:1 required at 14pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/common/timeline_event_card.dart:39

Darken the text or lighten what is behind it. Measured #272625 against #272625.

Seen on: Artefacts

"Tripod Plate" has a contrast ratio of 1.00:1 against its background, below the 3.0:1 required at 32pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/artifact/artifact_carousel/widgets/_bottom_text_content.dart:22

Darken the text or lighten what is behind it. Measured #272625 against #272625.

Seen on: Collection

At 200% text size the layout breaks: RenderFlex overflows by 19 pixels on the bottom

seriouslayout-overflow-at-scaleWCAG 1.4.4 (AA) / EN 301 549 §11.1.4.4

lib/ui/screens/artifact/artifact_carousel/widgets/_bottom_text_content.dart:38

Let the row wrap, make the column scroll, or give the text room to grow instead of a fixed height.

Seen on: Photo gallery

"0% discovered" has a contrast ratio of 1.55:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/collection/widgets/_collection_footer.dart:50

Darken the text or lighten what is behind it. Measured #272625 against #544032.

Seen on: Collection

"0 of 24" has a contrast ratio of 2.32:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/collection/widgets/_collection_footer.dart:55

Darken the text or lighten what is behind it. Measured #272625 against #615D5A.

Seen on: Collection

"COLOSSEUM" has a contrast ratio of 1.00:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/collection/widgets/_collection_list_card.dart:36

Darken the text or lighten what is behind it. Measured #272625 against #272625.

Seen on: Collection

This button is 146×23, below the Android minimum of 48×48, so it is hard to hit for anyone with limited dexterity.

serioustap-target-sizeWCAG 2.5.8 (AA) / EN 301 549 §11.2.5.8

lib/ui/screens/intro/intro_screen.dart:259

Grow the tap area without growing the icon: wrap the child in a SizedBox of 48×48, or give the button a minimumSize.

Seen on: Welcome

At 200% text size the layout breaks: RenderFlex overflows by 174 pixels on the right

seriouslayout-overflow-at-scaleWCAG 1.4.4 (AA) / EN 301 549 §11.1.4.4

lib/ui/screens/wonder_events/widgets/_wonder_image_with_timeline.dart:107

Let the row wrap, make the column scroll, or give the text room to grow instead of a fixed height.

Seen on: Artefacts

"550 CE to 1550 CE" has a contrast ratio of 1.13:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/wonder_events/widgets/_wonder_image_with_timeline.dart:112

Darken the text or lighten what is behind it. Measured #1E1B18 against #272625.

Seen on: Collection

"Early Modern Era" has a contrast ratio of 1.13:1 against its background, below the 4.5:1 required at 16pt.

serioustext-contrastWCAG 1.4.3 (AA) / EN 301 549 §11.1.4.3

lib/ui/screens/wonder_events/widgets/_wonder_image_with_timeline.dart:120

Darken the text or lighten what is behind it. Measured #1E1B18 against #272625.

Seen on: Collection

This button is 42×187, below the Android minimum of 48×48, so it is hard to hit for anyone with limited dexterity.

moderatetap-target-sizePlatform guidance target size

lib/ui/screens/photo_gallery/photo_gallery.dart:277

Grow the tap area without growing the icon: wrap the child in a SizedBox of 48×48, or give the button a minimumSize.

Seen on: Editorial, Photo gallery, Artefacts, Timeline, Collection (30 times)

This button is 113×25, below the Android minimum of 48×48, so it is hard to hit for anyone with limited dexterity.

moderatetap-target-sizePlatform guidance target size

lib/ui/screens/home/wonders_home_screen.dart:318

Grow the tap area without growing the icon: wrap the child in a SizedBox of 48×48, or give the button a minimumSize.

Seen on: Wonder details, Editorial, Photo gallery, Artefacts, Timeline, Collection (6 times)

2 controls on this screen share the accessible name "collectible item", so they cannot be told apart by ear.

moderateduplicate-labelWCAG 4.1.2 (A) / EN 301 549 §11.5.2.5

lib/ui/common/controls/buttons.dart:200

Add what each one acts on, for example "More options for Basket" instead of "More".

Seen on: Photo gallery, Artefacts, Timeline, Collection (21 times)

2 controls on this screen share the accessible name "collectible item", so they cannot be told apart by ear.

moderateduplicate-labelWCAG 4.1.2 (A) / EN 301 549 §11.5.2.5

lib/ui/screens/photo_gallery/photo_gallery.dart:277

Add what each one acts on, for example "More options for Basket" instead of "More".

Seen on: Photo gallery, Artefacts, Timeline (3 times)

Method

Findings were produced by running automated checks against the running app and recording what they reported. Platforms: Flutter, iOS. Screens: Welcome, Home, Wonder details, Editorial, Photo gallery, Artefacts, Timeline, Collection.

Checks run: duplicate-label, icon-contrast, layout-overflow-at-scale, reading-order, tap-target-size, text-contrast, unlabeled-interactive.

Signature

The manual testing this report depends on, and the conclusion drawn from it, are the responsibility of the person signing below.

NameIryna Molokova
Date2026-09-14
Signature