Toegankelijkheidsonderzoek maakeencv (app.maakeencv.nl)
| Onderzoeksdatum | 7 oktober 2026 |
| Soort onderzoek | Volledig onderzoek (eerste meting), herstel, eindmeting en gerichte hermeting |
| Onderzoeker | SMITO B.V., leverancier van maakeencv — eigen onderzoek van de leverancier |
| Uitvoering | Geautomatiseerd en gescript onderzoek met axe-core en de Chrome DevTools, met AI-ondersteuning (Claude, Anthropic) voor meten, beoordelen en schrijven; vastgesteld door SMITO B.V. Er is geen tweede menselijke beoordelaar en er zijn geen tests met gebruikers met een beperking gedaan (zie §1 en §9). |
| Opdrachtgever | SMITO B.V. (algemeen rapport voor gemeenten en uitvoerders die maakeencv gebruiken) |
| Norm | WCAG 2.1 niveau A en AA (EN 301 549 v3.2.1, hoofdstuk 9); daarnaast WCAG 2.2 niveau A en AA |
| Methode | WCAG-EM 2.0 (W3C Group Note, 23 juli 2026) |
| Onderzochte versie | Web-app maakeencv, git-commit bc14c97 (volledige meting op 5c3c000, gerichte hermeting na herstel op bc14c97) |
| Documentversie | 1.0 |
| Vaste link | https://www.maakeencv.nl/toegankelijkheid/onderzoek-2026-10 |
1. Samenvatting
1.1 Totaalscore
| Norm | Voldoet | Niet van toepassing | Totaal | Voldoet niet |
|---|---|---|---|---|
| WCAG 2.1 A + AA (50 criteria, de wettelijke norm) | 48 | 2 | 50/50 | 0 |
| WCAG 2.2 A + AA (55 criteria, de komende norm) | 53 | 2 | 55/55 | 0 |
"Niet van toepassing" telt mee als voldaan: de app heeft geen live-video (1.2.4) en geen bediening door bewegen of schudden (2.5.4). Criterium 4.1.1 (parsen) geldt alleen in WCAG 2.1 en telt volgens de noot in WCAG 2.1 bij HTML altijd als voldaan.
1.2 Wat er gebeurd is
In de eerste meting voldeden 21 van de 50 criteria (plus 2 niet van toepassing); 15 voldeden niet en 12 moesten nog handmatig worden beoordeeld. Er waren 23 bevindingen. De belangrijkste:
- In het Arabisch, Farsi en Dari lag het menu óver de inhoud, zodat een deel van de knoppen en tekst onbereikbaar was.
- In de lesspeler kon de focus met de Tab-toets achter de les verdwijnen; na het sluiten van een venster stond de focus nergens.
- Elk scherm heette "maakeencv.nl"; de focusring en de randen van invoervelden waren te licht; knoppen en schuifregelaars zonder naam; verplichte velden zonder aanduiding; volgorde alleen met slepen te veranderen.
Al deze bevindingen zijn hersteld. Daarna is alles opnieuw gemeten (eindmeting), en de punten die de eindmeting nog vond, zijn hersteld en gericht opnieuw gemeten (§6 en §7).
1.3 Wat deze uitkomst wel en niet zegt
- De uitkomst geldt voor de onderzochte versie, in de onderzochte configuratie, op de onderzochte datum. Een steekproef levert geen garantie voor elk scherm van het product (WCAG-EM).
- Dit is een eigen onderzoek van de leverancier. Dat mag (DigiToegankelijk: "Je mag als organisatie zelf het toegankelijkheidsonderzoek uitvoeren"), maar het is geen onafhankelijk onderzoek en geen certificaat.
- Er is geen test met een echte schermlezer of spraakbediening en geen test met gebruikers met een beperking gedaan; alleen Chrome op Windows is gebruikt. Wat een schermlezer werkelijk voorleest, is beoordeeld via de toegankelijkheidsboom van de browser en de code. Zie §9 en het verbeterplan (§10): die tests zijn gepland.
- De status in een toegankelijkheidsverklaring (A tot en met E) bepaalt de gemeente. Wij adviseren een gemeente om status A pas te kiezen na de schermlezertest uit §10, of na een onafhankelijke toets.
2. Scope
Onderzocht: de web-app maakeencv (app.maakeencv.nl) in alle rollen: publiek (inloggen, registreren, wachtwoord vergeten, privacy, voorwaarden, cookies), deelnemer (start, cv-editor, cv-voorbeeld, lessen en eindvragen, Mijn MAP, opdrachten, profiel, instellingen, sollicitaties, brieven, Ontdekken, route, vacatures, Mijn woorden), begeleider (Deelnemers, kaart per deelnemer, groepen, MAP-groep, lesplannen, eindoverzicht, overzicht voor de gemeente, kwartaalrapport), beheerder bij een gemeente (organisatie, team) en platformbeheer, inclusief de tweede inlogstap, dialogen, foutmeldingen en lege toestanden. In het Nederlands volledig; daarnaast in het Arabisch (rechts-naar-links), Frans, Engels, Tigrinya en Russisch, in de kleurthema's standaard, februari, maart en juni, en op 320 CSS-pixels breed.
Niet onderzocht: de pdf's die de app maakt (cv en sollicitatiebrief, gemaakt door de dienst DocRaptor), inloggen met Google, Microsoft, LinkedIn en de inloglink, betalen (Stripe) en de e-mails die de app verstuurt. De afdrukweergave van het MAP-eindoverzicht is wel onderzocht. De website www.maakeencv.nl is een aparte website en valt buiten dit onderzoek. Zie §10 voor het vervolg.
Conformiteitsdoel: WCAG 2.1 niveau AA; daarnaast WCAG 2.2 niveau AA.
Basisniveau van toegankelijkheidsondersteuning (doel): de laatste twee versies van Chrome, Edge, Firefox en Safari op Windows 11, macOS, iOS en Android, met NVDA (Windows), VoiceOver (macOS en iOS) en TalkBack (Android). Getest in dit onderzoek: alleen Google Chrome 155 (headless) op Windows 11.
Aanvullende eisen: alle elf talen van de app (getest: zie hierboven), alle dertien kleurthema's (contrast van de focusindicator en van tekst op het inlogscherm in alle dertien gemeten), en per afwijking alle plekken waar dezelfde fout voorkwam.
3. Verkenning van het product
Technologieën: HTML, CSS (Tailwind), JavaScript (React 18, Vite), WAI-ARIA (componenten op Radix UI en vaul), SVG (iconen, grafieken met recharts), audio en video (HTML5 met WebVTT-ondertitels), een iframe van Cloudflare Turnstile op de inlogschermen.
Essentiële functies: inloggen en registreren; een cv maken en downloaden; lessen volgen met oefeningen en eindvragen (met voorlezen en taalhulp in de eigen taal); de MAP: thema's, opdrachten, praktijkuren vastleggen en het eindgesprek voorbereiden; als begeleider deelnemers uitnodigen en begeleiden, groepen beheren, het eindoverzicht en de rapportage voor de gemeente bekijken; beheer van organisaties en teams.
Soorten schermen en componenten: formulieren (ook met verplichte velden en foutmeldingen), lijsten en tabellen, tabbladen, dialogen en lades, menu's, keuzelijsten, schuifregelaars, voortgangsbalken, een teksteditor, slepen en neerzetten, de lesspeler met ongeveer vijftien soorten oefeningen, audio en video, grafieken, de afdrukweergave en de tweede inlogstap.
4. Steekproef
4.1 Opzet
- Gestructureerde steekproef (3.1): alle gemeenschappelijke schermen (inloggen, registreren, wachtwoord vergeten, juridische pagina's, hulp/contact, tweede stap), elk soort scherm per rol, elke essentiële functie (cv maken en pdf, les volgen met eindvragen, MAP, begeleiden, rapporteren, beheren) en elke technologie die we tegenkwamen (formulieren, eigen componenten op Radix, slepen, audio, video met ondertitels, iframe van Cloudflare Turnstile, afdrukweergave). Een scherm met meer toestanden (cv-editor per sectie, lesspeler per bloktype, tabbladen) staat er per toestand in, onder één schermnaam.
- Willekeurige steekproef (3.2): 10% van het aantal schermen in de gestructureerde steekproef, bovenop die steekproef; zie §4.4.
- Complete processen (3.3): zie §4.5. Elk proces is met alleen het toetsenbord doorlopen (Tab, Shift+Tab, Enter, spatie, pijltjes, Esc) en per stap vastgelegd.
- Varianten: alle schermen in het Nederlands op 1280×900 (thema standaard). Daarnaast een selectie in het Arabisch (rtl), in de thema's februari (donkerste gekleurde thema; dit thema staat live) en maart (laagste contrast van de merkkleur), en op 320 px mobiel. Elk scherm is bovendien gemeten op 320 CSS-px (venster en telefoon), met tekstafstand, op 200% zoom en met alleen-tekst 200%.
4.2 Omvang per rol
| Rol | Schermen | Toestanden |
|---|---|---|
| Publiek (niet ingelogd) | 7 | 8 |
| Platformbeheerder (tweede stap) | 1 | 1 |
| Deelnemer | 21 | 46 |
| Begeleider | 10 | 14 |
| Beheerder bij een gemeente | 2 | 7 |
| Platformbeheerder | 1 | 5 |
| Totaal gestructureerd | 41 | 81 |
| Willekeurig (§4) | 5 | 5 |
Testaccounts (lokaal, geen echte personen): deelnemer = demo-inburgeraar@test.nl; gemeente = demo-gemeente-westland@test.nl (coach bij Werkt! Westland, MAP-groep); gemeenteBeheer = demo-gemeente-westland@test.nl (beheerder bij Demo Gemeente Westland); beheer = beheerder@werkpad.test (met tweede stap); beheerZonderMfa = beheerder@werkpad.test (zonder tweede stap).
4.3 Gestructureerde steekproef
Kolom "Hoe" is de handeling in de app; "Pad" is het adres dat de meetscripts openden (soms met een toestand vooraf, bijvoorbeeld de stap in een les via de sessieopslag die de app zelf ook gebruikt).
| Kenmerk | Scherm | Titel / toestand | Pad | Rol (account) | Taal | Thema | Hoe |
|---|---|---|---|---|---|---|---|
| S01 | Inloggen | Inloggen; leeg formulier | /login | publiek (publiek) | nl | standaard | app.maakeencv.nl/login openen |
| S02 | Inloggen | Inloggen met e-maillink; modus e-maillink | /login | publiek (publiek) | nl | standaard | /login → "Inloggen met een e-maillink (zonder wachtwoord)" |
| S03 | Wachtwoord vergeten | Wachtwoord vergeten; formulier herstellink | /login | publiek (publiek) | nl | standaard | /login → "Wachtwoord vergeten?" |
| S04 | Account aanmaken | Account aanmaken; leeg formulier | /signup | publiek (publiek) | nl | standaard | /login → "Registreren" |
| S05 | Nieuw wachtwoord | Nieuw wachtwoord instellen; zonder geldige herstellink | /reset-password | publiek (publiek) | nl | standaard | link uit de herstelmail (hier zonder token geopend) |
| S06 | Privacyverklaring | Privacyverklaring; standaard | /Privacy | publiek (publiek) | nl | standaard | link "Privacy" onder het inlogscherm |
| S07 | Algemene voorwaarden | Algemene voorwaarden; standaard | /Terms | publiek (publiek) | nl | standaard | link "Voorwaarden" onder het inlogscherm |
| S08 | Cookiebeleid | Cookiebeleid; standaard | /Cookies | publiek (publiek) | nl | standaard | link "Cookies" in de privacyverklaring |
| S09 | Tweestapsverificatie | Tweestapsverificatie instellen (beheerder); na inloggen, nog geen app gekoppeld | / | beheerder (beheerZonderMfa) | nl | standaard | inloggen als platformbeheerder zonder gekoppelde authenticator |
| S10 | Eerste start | Eerste start, stap 1; stap 1 (uitnodiging) | /EersteStart | deelnemer (deelnemer) | nl | standaard | eerste keer inloggen als deelnemer van een organisatie (hier: /EersteStart direct) |
| S11 | Start | Start (dashboard deelnemer); met één cv en open taken | /Dashboard | deelnemer (deelnemer) | nl | standaard | na inloggen; menu "Start" |
| S12 | Mijn cv's | Mijn cv's; één cv | /MijnCvs | deelnemer (deelnemer) | nl | standaard | menu "Mijn cv's" |
| S13 | Cv-editor | Cv-editor: persoonlijke gegevens; tab Inhoud, sectie persoonlijke gegevens open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=personal | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "persoonlijke gegevens" |
| S14 | Cv-editor | Cv-editor: werkervaring; tab Inhoud, sectie werkervaring open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=experience | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "werkervaring" |
| S15 | Cv-editor | Cv-editor: opleiding; tab Inhoud, sectie opleiding open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=education | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "opleiding" |
| S16 | Cv-editor | Cv-editor: vaardigheden; tab Inhoud, sectie vaardigheden open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=skills | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "vaardigheden" |
| S17 | Cv-editor | Cv-editor: talen; tab Inhoud, sectie talen open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=languages | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "talen" |
| S18 | Cv-editor | Cv-editor: certificaten; tab Inhoud, sectie certificaten open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=certificates | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "certificaten" |
| S19 | Cv-editor | Cv-editor: nevenactiviteiten; tab Inhoud, sectie nevenactiviteiten open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=activities | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "nevenactiviteiten" |
| S20 | Cv-editor | Cv-editor: eigen secties; tab Inhoud, sectie eigen secties open | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55§ie=custom | deelnemer (deelnemer) | nl | standaard | Mijn cv's → cv openen → sectie "eigen secties" |
| S21 | Cv-editor | Cv-editor: ontwerp; tab Ontwerp | /Editor?id=7b479087-7f28-4750-ba14-0ba2b831eb55 | deelnemer (deelnemer) | nl | standaard | cv openen → tab "Ontwerp" |
| S22 | Cv-voorbeeld | Cv-voorbeeld en pdf; voorbeeld van het cv | /CVPreview?id=7b479087-7f28-4750-ba14-0ba2b831eb55 | deelnemer (deelnemer) | nl | standaard | cv-editor → "Preview & download" |
| S23 | Leren | Leren: overzicht; lessen klaargezet, één module af | /Leren | deelnemer (deelnemer) | nl | standaard | MAP → "Al je lessen" (of menu Leren) |
| S24 | Module | Leren: module-overzicht; module niet begonnen | /Leren?module=beroepskansen | deelnemer (deelnemer) | nl | standaard | Leren → module "Beroepskansen" → "Bekijken" |
| S25 | Lesspeler | Lesspeler: welkomvenster (met voorleesspeler); beroepskansen / vraag-naar-werk, venster 0 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 0 |
| S26 | Lesspeler | Lesspeler: blok voorvraag; beroepskansen / vraag-naar-werk, venster 1 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 1 |
| S27 | Lesspeler | Lesspeler: blok afbeelding; beroepskansen / vraag-naar-werk, venster 2 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 2 |
| S28 | Lesspeler | Lesspeler: blok tekst; beroepskansen / vraag-naar-werk, venster 3 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 3 |
| S29 | Lesspeler | Lesspeler: blok kaarten; beroepskansen / vraag-naar-werk, venster 4 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 4 |
| S30 | Lesspeler | Lesspeler: blok volgorde; beroepskansen / vraag-naar-werk, venster 6 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 6 |
| S31 | Lesspeler | Lesspeler: blok sorteren; beroepskansen / vraag-naar-werk, venster 7 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 7 |
| S32 | Lesspeler | Lesspeler: blok scenario; beroepskansen / vraag-naar-werk, venster 8 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 8 |
| S33 | Lesspeler | Lesspeler: blok oefening (meerkeuze); beroepskansen / vraag-naar-werk, venster 9 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 9 |
| S34 | Lesspeler | Lesspeler: blok onthoud; beroepskansen / vraag-naar-werk, venster 10 | /Leren?module=beroepskansen&les=vraag-naar-werk | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 10 |
| S35 | Lesspeler | Lesspeler: blok aantikken; beroepskansen / waar-zoeken, venster 5 | /Leren?module=beroepskansen&les=waar-zoeken | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 5 |
| S36 | Lesspeler | Lesspeler: blok voorbeeld; beroepskansen / twee-vacatures, venster 5 | /Leren?module=beroepskansen&les=twee-vacatures | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 5 |
| S37 | Lesspeler | Lesspeler: blok invullen; beroepskansen / twee-vacatures, venster 6 | /Leren?module=beroepskansen&les=twee-vacatures | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 6 |
| S38 | Lesspeler | Lesspeler: blok woorden; beroepskansen / twee-vacatures, venster 10 | /Leren?module=beroepskansen&les=twee-vacatures | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 10 |
| S39 | Lesspeler | Lesspeler: blok lijst; beroepskansen / kiezen, venster 9 | /Leren?module=beroepskansen&les=kiezen | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 9 |
| S40 | Lesspeler | Lesspeler: blok reflectie; beroepskansen / kiezen, venster 11 | /Leren?module=beroepskansen&les=kiezen | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 11 |
| S41 | Lesspeler | Lesspeler: blok opdracht; beroepskansen / kiezen, venster 12 | /Leren?module=beroepskansen&les=kiezen | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 12 |
| S43 | Lesspeler | Lesspeler: les klaar; werknemersvaardigheden / eerste-werkweek, venster 12 | /Leren?module=werknemersvaardigheden&les=eerste-werkweek | deelnemer (deelnemer) | nl | standaard | Leren → module → les starten → "Verder" tot venster 12 |
| S42 | Lesspeler | Lesspeler: blok video (lesvoorbeeld, basisvariant); werkervaring-2 / vier-delen, venster 4 (video met ondertitels); de inburgeringsvariant van deelnemers heeft geen video | /Leren?module=werkervaring-2&les=vier-delen&voorbeeld=1 | begeleider (gemeente) | nl | standaard | Deelnemers → tab Lessen → les bekijken (voorbeeld) → venster 4 |
| S44 | Eindvragen | Eindvragen van een module; alle lessen af, eindvragen open | /Leren?module=werknemersvaardigheden&eindvragen=1 | deelnemer (deelnemer) | nl | standaard | module met alle lessen af → "Eindvragen" |
| S45 | Mijn MAP | Mijn MAP; MAP-groep, met praktijkuren | /Map | deelnemer (deelnemer) | nl | standaard | menu "MAP" |
| S46 | MAP-overzicht | MAP: overzicht voor het eindgesprek; standaard | /MapOverzicht | deelnemer (deelnemer) | nl | standaard | MAP → "Bekijk je overzicht" |
| S47 | Bewijsmap | Bewijsmap; leeg (nog geen bewijsstukken) | /Bewijsmap | deelnemer (deelnemer) | nl | standaard | menu "Bewijsmap" |
| S48 | Route | Mijn route; voorstel | /Route | deelnemer (deelnemer) | nl | standaard | menu "Mijn route" |
| S49 | Meedoen | Meedoen; met activiteiten | /Meedoen | deelnemer (deelnemer) | nl | standaard | menu "Meedoen" |
| S50 | Profiel | Masterprofiel; ingevuld | /Profile | deelnemer (deelnemer) | nl | standaard | accountmenu → "Profiel" |
| S51 | Instellingen | Instellingen; standaard | /Settings | deelnemer (deelnemer) | nl | standaard | accountmenu → "Instellingen" |
| S52 | Sollicitaties | Mijn sollicitaties; lege toestand | /Applications | deelnemer (deelnemer) | nl | standaard | menu "Solliciteren" |
| S53 | Brieven | Mijn sollicitatiebrieven; lege toestand | /CoverLetters | deelnemer (deelnemer) | nl | standaard | Solliciteren → tab "Brieven" |
| S54 | Nieuwe brief | Nieuwe brief (wizard); stap 1 | /CoverLetterWizard | deelnemer (deelnemer) | nl | standaard | Brieven → "Maak je eerste sollicitatiebrief" |
| S55 | Helpcentrum | Helpcentrum; standaard | /HelpCenter | deelnemer (deelnemer) | nl | standaard | menu "Hulp" |
| S56 | Contact | Contact; formulier | /Contact | deelnemer (deelnemer) | nl | standaard | Helpcentrum → "Contact" |
| S57 | Vandaag | Vandaag (begeleider); met signalen | /Vandaag | begeleider (gemeente) | nl | standaard | na inloggen als begeleider |
| S58 | Deelnemers | Deelnemers: tab Deelnemers; MAP-groep met 13 deelnemers | /Deelnemers | begeleider (gemeente) | nl | standaard | menu "Deelnemers" |
| S59 | Deelnemers | Deelnemers: tab MAP; tab MAP | /Deelnemers?tab=map | begeleider (gemeente) | nl | standaard | Deelnemers → tab "MAP" |
| S60 | Deelnemers | Deelnemers: tab Lessen; tab Lessen | /Deelnemers?tab=lessen | begeleider (gemeente) | nl | standaard | Deelnemers → tab "Lessen" |
| S61 | Deelnemers | Deelnemers: tab Opdrachten; tab Opdrachten | /Deelnemers?tab=opdrachten | begeleider (gemeente) | nl | standaard | Deelnemers → tab "Opdrachten" |
| S62 | Deelnemers | Deelnemers: tab Groep; tab Groep | /Deelnemers?tab=groep | begeleider (gemeente) | nl | standaard | Deelnemers → tab "Groep" |
| S63 | Kaart | Kaart van een deelnemer; MAP-deelnemer met eindadvies | /Kaart?id=8fd3aa96-7b81-421e-8da7-5a87bfbc5f44&org=3e511e73-e97e-4827-ade3-2ab442deaaf0 | begeleider (gemeente) | nl | standaard | Deelnemers → naam van de deelnemer |
| S64 | MAP-eindoverzicht | MAP-eindoverzicht van een deelnemer; klaar voor het eindgesprek | /MapEindoverzicht?id=8fd3aa96-7b81-421e-8da7-5a87bfbc5f44&org=3e511e73-e97e-4827-ade3-2ab442deaaf0 | begeleider (gemeente) | nl | standaard | Deelnemers → tab MAP → "Eindoverzicht" |
| S65 | Intake-samenvatting | Samenvatting intake vooraf; intake ingevuld | /IntakeSamenvatting?id=8fd3aa96-7b81-421e-8da7-5a87bfbc5f44&org=3e511e73-e97e-4827-ade3-2ab442deaaf0 | begeleider (gemeente) | nl | standaard | Deelnemers → "Voorbereiding verstuurd" |
| S66 | Lesplannen | Lesplannen MAP; thema A | /MapLesplannen | begeleider (gemeente) | nl | standaard | Deelnemers → tab MAP → "Lesplannen en handouts per thema" |
| S67 | Eindrapport | Eindrapport van een groep; MAP-groep | /Cohortrapport?cohort=ba9fa688-5b0e-4d83-bef0-0f09ad9aeed1 | begeleider (gemeente) | nl | standaard | Deelnemers → "Eindrapport" |
| S68 | AI-geletterdheid | AI-geletterdheid voor begeleiders; standaard | /AiGeletterdheid | begeleider (gemeente) | nl | standaard | menu "AI-geletterdheid" |
| S69 | Ontdekken | Ontdekken (voorbeeld voor begeleider); voorbeeldweergave | /Ontdekken?voorbeeld=1 | begeleider (gemeente) | nl | standaard | Beheer/Organisatie → Ontdekken bekijken (voor leerlingen: menu "Ontdekken") |
| S70 | Overzicht (regie) | Overzicht trajecten (gemeente); tab Overzicht | /Regie | beheerder gemeente (gemeenteBeheer) | nl | standaard | na inloggen als beheerder bij een gemeente |
| S71 | Overzicht (regie) | Kwartaalrapport (gemeente); tab Kwartaalrapport | /Regie | beheerder gemeente (gemeenteBeheer) | nl | standaard | Overzicht → tab "Kwartaalrapport" |
| S72 | Overzicht (regie) | Overzicht per persoon (gemeente); tab Per persoon | /Regie | beheerder gemeente (gemeenteBeheer) | nl | standaard | Overzicht → tab "Per persoon" |
| S73 | Organisatie | Organisatie: algemeen; tab Algemeen | /Organisatie | beheerder gemeente (gemeenteBeheer) | nl | standaard | menu "Organisatie" |
| S74 | Organisatie | Organisatie: groepen; tab Groepen | /Organisatie | beheerder gemeente (gemeenteBeheer) | nl | standaard | Organisatie → tab "Groepen" |
| S75 | Organisatie | Organisatie: team; tab Team | /Organisatie | beheerder gemeente (gemeenteBeheer) | nl | standaard | Organisatie → tab "Team" |
| S76 | Organisatie | Organisatie: privacy en logboek; tab Privacy en logboek | /Organisatie | beheerder gemeente (gemeenteBeheer) | nl | standaard | Organisatie → tab "Privacy en logboek" |
| S77 | Beheer | Beheer: overzicht; tab Overzicht | /AdminDashboard | platformbeheerder (beheer) | nl | standaard | na inloggen als platformbeheerder (met tweede stap) |
| S78 | Beheer | Beheer: Organisaties; tab Organisaties | /AdminDashboard?tab=organisaties | platformbeheerder (beheer) | nl | standaard | Beheer → menu "Organisaties" |
| S79 | Beheer | Beheer: Gebruikers; tab Gebruikers | /AdminDashboard?tab=users | platformbeheerder (beheer) | nl | standaard | Beheer → menu "Gebruikers" |
| S80 | Beheer | Beheer: Lesmateriaal; tab Lesmateriaal | /AdminDashboard?tab=lesmateriaal | platformbeheerder (beheer) | nl | standaard | Beheer → menu "Lesmateriaal" |
| S81 | Beheer | Beheer: Thema; tab Thema | /AdminDashboard?tab=thema | platformbeheerder (beheer) | nl | standaard | Beheer → menu "Thema" |
Varianten van de gestructureerde steekproef
| Variant | Schermen |
|---|---|
| Arabisch, rtl (1280×900, volledige batterij incl. 320 px) | S01, S04, S06, S11, S12, S13, S14, S22, S23, S24, S25, S31, S33, S37, S44, S45, S47, S50, S51, S52 |
| Thema februari en thema maart (axe, randen, focus, doelgrootte) | S01, S04, S06, S11, S13, S23, S25, S31, S45, S50, S57, S58, S59, S63 |
| Mobiel 320×640 (axe, focus, doelgrootte; telefoonemulatie) | S01, S04, S11, S13, S22, S23, S25, S31, S45, S50, S57, S58, S63 |
| Productie, alleen lezen (ter vergelijking) | P-S01 inlogscherm, P-S04 registreren op app.maakeencv.nl |
Niet in de steekproef, met reden: /HOME, /Pricing, /Invites en /FAQ zijn voor deelnemers van een organisatie omgeleid (deelnemerPaginas.js) of verwijzen door; /SjabloonLab staat uit; /Overzicht stuurt de deelnemer door naar Start; Stripe-betalen (consumentendeel) valt buiten het gemeentelijke product en is lokaal niet ingesteld; de inloglink per e-mail en inloggen met Google, Microsoft en LinkedIn zijn lokaal niet ingesteld (op productie wel aanwezig, zie P-S01).
4.4 Willekeurige steekproef
Methode. Populatie: alle routes van de app (src/App.jsx en src/pages.config.js) die niet als eigen scherm in de gestructureerde steekproef staan, plus een onbekende route (404) en twee extra beheertabbladen; 21 adressen, alfabetisch gesorteerd. Omvang: 10% van 41 schermen, naar boven afgerond = 5. Generator: mulberry32 met seed 20261007; per trekking eerst het adres (zonder terugleggen), dan een taal uit de elf en een kleurthema uit de dertien, uit dezelfde reeks. opnieuw draaien geeft dezelfde trekking.
| Kenmerk | Scherm | Pad | Rol (account) | Taal | Thema |
|---|---|---|---|---|---|
| W01 | Vacatures | /Vacatures | deelnemer (deelnemer) | fr | standaard |
| W02 | Kopersdossier | /Kopersdossier | platformbeheerder (beheer) | ar | maart |
| W03 | Terugkeer na inloggen via Google/Microsoft/LinkedIn (zonder code) | /auth/callback | publiek (publiek) | ti | standaard |
| W04 | Mijn woorden | /MijnWoorden | deelnemer (deelnemer) | en | februari |
| W05 | Praktijkplek bevestigt MAP-uren (onbekend token) | /bevestig/onbekend-token | publiek (publiek) | ru | juni |
Vergelijking (WCAG-EM 4.3): de willekeurige steekproef toonde geen nieuwe soorten inhoud, wel twee nieuwe varianten van bekende fouten: in het Arabisch ligt ook in Beheer de zijbalk over de inhoud (W02, zie B-01), en een pagina die alleen in het Nederlands bestaat houdt de taal van de gekozen schermtaal op <html> (W02 lang="ar", W05 lang="ru"; de inhoud zelf staat in een element met lang="nl", zie 3.1.1). Uitbreiding: daarom zijn de Arabische metingen aangevuld met Beheer (W02) en is 3.1.1 apart nagelopen op de Nederlandstalige pagina's.
4.5 Complete processen
Alle processen zijn met alleen het toetsenbord doorlopen; elke stap is vastgelegd met adres, titel, element met focus, statusberichten (aria-live, role=status/alert), foutteksten, aria-invalid en een axe-meting. De ruwe stappen en beelden zijn op aanvraag beschikbaar (bijlage B).
| Proces | Rol | Stappen (standaardroute en zijroutes) | Uitkomst |
|---|---|---|---|
| P1 Inloggen | deelnemer | /login → leeg versturen (Enter op Inloggen) → ongeldig e-mailadres → fout wachtwoord → wachtwoord tonen met spatie → juist wachtwoord | Formulier volledig met toetsenbord bedienbaar; plakken niet geblokkeerd; autocomplete = email/current-password. Na het versturen verschijnt lokaal een Cloudflare Turnstile-vak ("Ik ben geen robot"); in een geautomatiseerde browser komt de controle niet door, dus de laatste stap (ingelogd) is via de API gedaan, niet via het formulier (zie B-21). |
| P2 Wachtwoord vergeten | publiek | /login → "Wachtwoord vergeten?" (Enter) → leeg versturen → e-mailadres → "Stuur resetlink" | Bedienbaar tot en met versturen; daarna wacht "Stuur resetlink" op Turnstile (zelfde als P1), dus er is geen mail verstuurd. De kop blijft "Inloggen" terwijl het formulier een herstelformulier is (zie 2.4.6). |
| P3 Les volgen tot en met de eindvragen | deelnemer | Leren → module "Goed beginnen in je nieuwe baan" → les 1 → "Begin de les" → elf vensters met "Verder" → oefeningen (sorteren, volgorde, scenario, meerkeuze) met spatie/Enter beantwoord en "Controleer" → "Les afronden" → module → "Eindvragen" → tien vragen met spatie in de radiogroep → "Inleveren" → uitslag | Bedienbaar met toetsenbord; focus gaat bij elk venster naar de kop; feedback en uitslag via aria-live. Fouten: focus valt naar <body> na "Controleer" (B-09) en Tab gaat de verborgen zijbalk in (B-02). Om verder te kunnen na een fout antwoord is de oefening in de sessieopslag als goed gemarkeerd (testsnelweg); de overige drie lessen zijn lokaal als afgerond gezaaid zodat de eindvragen konden worden ingeleverd. |
| P4 Cv-gegevens invullen en pdf maken | deelnemer | Mijn cv's → "Bewerken" → telefoonnummer typen → autosave → ongeldig e-mailadres → "Preview & download" → "Exporteer PDF" | Opslaan wordt aangekondigd ("Niet opgeslagen" → "Opslaan…" → "Opgeslagen om 17:48", aria-live=polite). Ongeldig e-mailadres wordt zonder melding opgeslagen. De pdf zelf is niet te maken: DocRaptor is lokaal niet ingesteld (foutmelding via role=status, geen externe aanroep). |
| P5 MAP-praktijk vastleggen | deelnemer | MAP → "Praktijk toevoegen" (67× Tab) → leeg opslaan → soort, plek, datum, uren, wat gedaan, onderwerp → "Opslaan" | Opslaan is grijs zolang verplichte velden leeg zijn, zonder aanduiding welke (B-13). Na opslaan: melding "Opgeslagen" (role=status), focus naar <body> (B-09). |
| P6 Groep maken en deelnemer uitnodigen | beheerder gemeente | Organisatie → tab Groepen → "Nieuwe groep" → naam → "Aanmaken" → Deelnemers → "Uitnodigen" → ongeldig adres → geldig adres → "versturen" | Melding "Groep aangemaakt" en "uitnodigingen verstuurd" via role=status; fout "1 regel bevat geen e-mailadres" via role=alert. Focus naar <body> na sluiten (B-09). |
| P7 MAP-eindoverzicht afdrukken | begeleider | Deelnemers → tab MAP → "Eindoverzicht" → "Afdrukken of opslaan als pdf" | window.print aangeroepen; printweergave zonder zijbalk en knoppen; pdf uit de browser is getagd (/StructTreeRoot, /Lang (nl)). |
| Tweede stap (beheer) | platformbeheerder | inloggen → "Stel eerst tweestapsverificatie in" → code uit de app (S09) | Veld met autocomplete="one-time-code" en inputmode="numeric"; scherm zonder kop (B-14). Voor de beheermetingen is lokaal een authenticator gekoppeld (TOTP). |
De kolom "Uitkomst" beschrijft de eerste meting. In de eindmeting zijn alle processen opnieuw met alleen het toetsenbord doorlopen: de gemelde problemen (focus na sluiten, verplichte velden zonder aanduiding, ongeldig e-mailadres zonder melding, kop van de tweede stap) waren toen opgelost; zie §7. Gebruikte testgegevens: zie bijlage B.
5. Werkwijze en hulpmiddelen
- Browser en platform: Google Chrome 155.0.8059.39 (headless) op Windows 11 Home (build 26200, ARM64); eerste meting met Chrome 154.0.8037.97.
- Automatische toets: axe-core 4.14.0 (een implementatie van de W3C ACT-regels), met de tags wcag2a, wcag2aa, wcag21a, wcag21aa en wcag22aa; best-practice apart gerapporteerd.
- Gescripte metingen per scherm (Chrome DevTools-protocol, Node.js 24.15.0): weergave op 320 CSS-pixels (als venster en als telefoon), tekstafstand volgens de bookmarklet van 1.4.12, 200% zoom en alleen-tekst 200%, een Tab-ronde tot 60 stappen met de zichtbaarheid, het contrast en de bedekking van de focus, toetsenbordvallen, dialogen (openen, Esc, terug naar de opener), doelgrootte, randcontrast van velden en knoppen, autocomplete, live regions, paginatitel, taal van de pagina en van onderdelen, en de toegankelijkheidsboom (rol, naam, toestand).
- Handmatige beoordeling (met AI-ondersteuning): alt-teksten van alle 70 beelden in de lessen, video en ondertitels beeld voor beeld, koppen en labels, linkdoelen, consistente namen, foutmeldingen en suggesties, contrast van korte tekst die axe overslaat.
- Testomgeving: een lokale testomgeving met dezelfde code als de onderzochte versie en een lokale database met testaccounts (geen echte personen). Verschil met productie: lesbeelden, audio en video kwamen lokaal uit de projectmap in plaats van uit de online opslag; inloggen met externe diensten, betalen en pdf-productie zijn lokaal niet ingesteld.
- Rekenregel: een criterium voldoet als het op elk onderzocht scherm voldoet of daar niet van toepassing is. Een fout op één scherm betekent "voldoet niet" voor het hele product.
6. Resultaten per succescriterium
| SC | Criterium | Niveau | In norm | Oordeel | Onderbouwing |
|---|---|---|---|---|---|
| 1.1.1 | Niet-tekstuele content | A | 2.1 + 2.2 | Voldoet | Alle 70 beeldblokken in de 28 lesmodules hebben een alt-tekst (code); steekproefsgewijs naast het beeld gelegd (beroepskansen l1/l4, werknemersvaardigheden l1/l4, werkervaring-2 l1/l2): de tekst beschrijft wat er te zien is en wat ertoe doet (personen, handeling, voorwerpen). Portretten in scenario's alt="" met de naam in de tekst ernaast (decoratief, juist). Geen naamloze knoppen, links of velden in de toegankelijkheidsboom (0 in de 114 metingen met toegankelijkheidsboom: Nederlands, Arabisch, willekeurig). Grafieken in Beheer → Statistieken hebben nu een tabel met de cijfers ("Gegevens als tabel", caption en th). Turnstile: het iframe heeft een titel van Cloudflare; op productie bestaan andere inlogwegen (Google, Microsoft, LinkedIn). Kanttekening (B-23, geen fout): decoratieve lucide-iconen zonder aria-hidden staan nog als naamloze "image" in de boom. |
| 1.2.1 | Louter geluid / louter video | A | 2.1 + 2.2 | Voldoet | De enige louter-geluid-media zijn de voorgelezen lessen ("Luister naar deze les", met AI-label): een media-alternatief voor tekst die op het scherm staat, als zodanig gelabeld. Geen louter-video. |
| 1.2.2 | Ondertitels (vooraf opgenomen) | A | 2.1 + 2.2 | Voldoet | Na de eindmeting vernieuwd: de uitlegvideo (werkervaring-2, les 2, "De vier delen", nu 85 s) heeft geen ingebrande ondertitels meer, alleen ondertitels via <track kind="captions"> in elf talen, opnieuw gemaakt uit de uitgeschreven tekst en de tijdlijn van de nieuwe stem. Gecontroleerd: elke zin met spraakherkenning teruggezet naar tekst (16 van 16 woord voor woord gelijk), de tijdvakken van de ondertitels bevatten precies hun eigen zin, en in de speler staat op elk gecontroleerd moment de juiste ondertitel; geen muziek of andere relevante geluiden. Eindmeting op de vorige versie: Eén video in het product (werkervaring-2, les 2, "De vier delen", 64 s; S42). Ingebrande ondertitels én <track kind="captions"> in 11 talen. Tijdcodes van de VTT vergeleken met de stiltes in het geluid (ffmpeg silencedetect): synchroon; de tekst is gelijk aan wat er gezegd wordt; geen muziek of andere relevante geluiden. Beoordeeld met de bestanden uit de projectmap (lokaal staat de video niet in de opslag, §9). |
| 1.2.3 | Audiodescriptie of media-alternatief | A | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-01): de uitlegvideo "De vier delen" is opnieuw ingesproken; de stem zegt nu ook wat er in beeld staat (het voorbeeld van Samir: bedrijf, plaats, jaren, de twee zinnen over zijn werk, en de vergelijking "minder goed" en "goed"). De uitgeschreven tekst en de ondertitels in elf talen zijn bijgewerkt. Daarmee zit alle beeldinformatie in het geluid en is aparte audiodescriptie niet nodig. Bij de eindmeting nog niet: de video toont het uitgewerkte voorbeeld van Samir ("Bakkerij Al-Noor · Aleppo (Syrië)", "2014 – 2020", "Bakte elke dag 300 broden.", "Werkte samen met twee collega's.", "Minder goed"/"Goed"); dat staat niet in het geluid en niet in de uitgeschreven tekst onder de video (die is gelijk aan de gesproken tekst). Geen audiodescriptie. |
| 1.2.4 | Ondertitels (live) | AA | 2.1 + 2.2 | Niet van toepassing | Geen live-media. |
| 1.2.5 | Audiodescriptie (vooraf opgenomen) | AA | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-01): de uitlegvideo "De vier delen" is opnieuw ingesproken; de stem zegt nu ook wat er in beeld staat (het voorbeeld van Samir: bedrijf, plaats, jaren, de twee zinnen over zijn werk, en de vergelijking "minder goed" en "goed"). De uitgeschreven tekst en de ondertitels in elf talen zijn bijgewerkt. Daarmee zit alle beeldinformatie in het geluid en is aparte audiodescriptie niet nodig. Bij de eindmeting nog niet: Zelfde video: geen audiodescriptie, en niet alle beeldinformatie zit in het geluid. |
| 1.3.1 | Info en relaties | A | 2.1 + 2.2 | Voldoet | Opgelost uit B-14 en B-13: tweede stap met h1 en main; één main in de lesspeler, editor en juridische pagina's; dl's goed opgebouwd; verplichte velden met "(verplicht)" én aria-required; keuzes in "Praktijk toevoegen" in een fieldset met legend; grafiektabellen met th. axe (list, definition-list, dlitem, aria-required-*, label): 0 in alle rondes. Het cv-voorbeeld behoudt de naam als h1, binnen een benoemd gebied ("Voorvertoning van je cv"); de 23 miniaturen op Ontwerp zijn aria-hidden. Over: best-practice heading-order op S52/S53/S70 (een niveau overgeslagen; geen fout). Zonder schermlezer beoordeeld (boom en code). |
| 1.3.2 | Betekenisvolle volgorde | A | 2.1 + 2.2 | Voldoet | DOM-volgorde = visuele volgorde in het Nederlands (Tab-rondes, 3.520 stappen) en in het Arabisch: de zijbalk staat nu rechts naast de inhoud, niets ligt eronder (20 schermen + W02; ). De lesspeler maakt de achtergrond inert (B-02). Dialogen en vellen staan aan het eind van de DOM maar de achtergrond is dan voor hulptechnologie verborgen. Zonder schermlezer beoordeeld. |
| 1.3.3 | Zintuiglijke eigenschappen | A | 2.1 + 2.2 | Voldoet | Alle Nederlandse teksten en alle lesteksten doorzocht op plaats, kleur, vorm en geluid ("rechts", "links", "groene", "rode", "hiernaast", "het rondje", "de pijl" …). Gevonden: "hieronder/hierboven" (volgt de leesvolgorde), "in het voorbeeld hiernaast/ernaast" (het voorbeeld heeft een naam), en in les 4 van Beroepskansen "De pijl is doorgaan. Het trapje is …" (beschrijft kaarten die ook in de tekst staan). Geen instructie die alleen op een zintuiglijke eigenschap steunt. |
| 1.3.4 | Weergavestand | AA | 2.1 + 2.2 | Voldoet | Geen orientation-mediaqueries; Vandaag, Deelnemers en Kaart op 640×360 liggend zonder overloop. |
| 1.3.5 | Doel van invoer identificeren | AA | 2.1 + 2.2 | Voldoet | Opgelost (B-10): naam name, e-mail email, telefoon tel, woonplaats address-level2, geboortedatum bday, website url in editor en masterprofiel; Contact name/email; inloggen email/current-password; tweede stap one-time-code. Geboorteplaats heeft geen woord in de HTML-lijst en valt dus niet onder 1.3.5. |
| 1.4.1 | Gebruik van kleur | A | 2.1 + 2.2 | Voldoet | Statussen staan ook als tekst ("account actief", "uitgenodigd", stap op Vandaag); afgeronde MAP-thema's verschillen ook in lichtheid (gevuld groen tegen wit, 3,77:1) en hebben een schermlezertekst ("gedaan"/"nog niet"); gekozen antwoorden in oefeningen zijn gevuld donker (niet alleen een andere tint); fouten staan in tekst met icoon; verplichte velden met "(verplicht)"; grafieken hebben een legenda met tekst en een tabel. axe link-in-text-block: 0. |
| 1.4.2 | Geluidsbediening | A | 2.1 + 2.2 | Voldoet | Geen autoplay; video en audio preload="none"; voorlezen pas na een klik. |
| 1.4.3 | Contrast (minimum) | AA | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-02): de letters van afgeronde thema's en stappen staan nu wit op emerald-700 (5,5:1, was 3,8:1); in de grafieken van Beheer → Statistieken donkere as- en waardelabels (#64748b en #334155, ≥ 4,7:1). Opnieuw gemeten op S46, S59, S64 en S77s: axe 0. Eerder al: opgelost (B-08): axe color-contrast 0 in alle 155 metingen (drie thema's, Arabisch, 320 px). Tekst op het gekleurde verloop van inloggen/registreren in alle 13 thema's minstens 5,0:1. |
| 1.4.4 | Herschalen van tekst | AA | 2.1 + 2.2 | Voldoet | 200% (venster 640×450 zonder herladen): op geen enkel scherm horizontale overloop of afgekapte tekst. "Alleen tekst 200%" (benadering, wortel op 200%) geeft nog afkapping in inklapvakken; in Chrome bestaat die zoom niet, dus niet als fout geteld (zoals in de eerste meting). |
| 1.4.5 | Afbeeldingen van tekst | AA | 2.1 + 2.2 | Voldoet | Lestekeningen bekeken: geen ingebakken tekst (kaarten met pictogrammen, een landkaart zonder namen). Sjabloonvoorbeelden zijn HTML. Het logo is uitgezonderd. De tekst in de uitlegvideo valt onder 1.2.x. |
| 1.4.10 | Reflow | AA | 2.1 + 2.2 | Voldoet | Opgelost (B-12): het cv-voorbeeld in het Arabisch is op 320 px 320 px breed. Geen overloop op 320 px in de 114 metingen met de 320-px-controle (venster én telefoon; Nederlands, Arabisch, willekeurig) en in de 13 metingen van de telefoonronde, ook niet op Vandaag met de actiebalk (320/320). |
| 1.4.11 | Contrast niet-tekstuele content | AA | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-03): alle gewone keuzelijsten hebben nu dezelfde rand als de andere velden (#808080, 3,95:1). Opnieuw gemeten op S66 en S80: geen rand onder 3:1. Eerder al: opgelost: randen van tekstvelden, tekstvakken, keuzelijsten (shadcn), schakelaars, keuzerondjes en sleepgrepen ≥ 3:1 (3,78–7,58:1); focusindicator minstens 3,39:1 in alle 68 focusweergaven (standaard 3,39, februari 3,97, maart 3,49). |
| 1.4.12 | Tekstafstand | AA | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-04): vacaturetitels en namen in Beheer → Organisaties breken af in plaats van af te kappen. Opnieuw gemeten op W01 en S78 met de tekstafstand van de bookmarklet: niets meer afgekapt. Eerder al: opgelost (B-16): accountknop, werkplekkiezer, MAP-kaart, Mijn cv's. |
| 1.4.13 | Content bij hover of focus | AA | 2.1 + 2.2 | Voldoet | Tooltips (samenvatting, omschrijving/prestaties, ATS-uitleg in de galerij) openen bij hover én focus, blijven staan als de muis erop gaat en sluiten met Esc zonder dat de focus verspringt (losse-checks2). |
| 2.1.1 | Toetsenbord | A | 2.1 + 2.2 | Voldoet | Opgelost (B-18): uitleg bij samenvatting, omschrijving en prestaties is een knop; "Upgrade naar Pro" is een link; "Upload foto" is een knop; de ATS-uitleg in de galerij opent bij toetsenbordfocus. Geen klikbare elementen zonder rol (nepknoppen: 0). Alle processen P1–P7 met alleen het toetsenbord doorlopen; vier oefenvormen met spatie/Enter en "Controleer". Volgorde wijzigen zonder slepen: knoppen omhoog/omlaag. De knoppen in het woordhulp-vel zijn bereikbaar, maar pas na 43 Tab-stappen (zie 2.4.3, R-07). |
| 2.1.2 | Geen toetsenbordval | A | 2.1 + 2.2 | Voldoet | In geen enkele Tab-ronde blijft de focus hangen (datumvelden: 4 stops per veld, daarna verder); Turnstile op /login (4 stops) en /signup heen en terug met Shift+Tab; dialogen houden de focus vast en sluiten met Esc. |
| 2.1.4 | Enkel-teken-sneltoetsen | A | 2.1 + 2.2 | Voldoet | Alleen sneltoetsen met Ctrl/Cmd (editor, zoekpalet). |
| 2.2.1 | Timing aanpasbaar | A | 2.1 + 2.2 | Voldoet | Geen tijdslimieten in de app; meldingen pauzeren bij hover/focus; supabase/config.toml zet geen timebox/inactivity_timeout. Na een verlopen sessie meldt de app "Je bent uitgelogd … wat al was opgeslagen, staat er nog" en de editor slaat automatisch op. De instelling op productie is niet bekeken (beperking). |
| 2.2.2 | Pauzeren, stoppen, verbergen | A | 2.1 + 2.2 | Voldoet | Opgelost (B-20): "Hallo stilzetten" op de eerste start (S10, Tab-stop vóór "Begin"). Tips op het inlogscherm wisselen elke 8 s en staan stil met "Tips stilzetten" (gemeten: na 9,5 s gepauzeerd dezelfde tip). |
| 2.3.1 | Drie flitsen | A | 2.1 + 2.2 | Voldoet | Geen flitsende inhoud; de uitlegvideo bestaat uit rustige overgangen tussen dia's (beelden om de 4 s bekeken). |
| 2.4.1 | Blokken omzeilen | A | 2.1 + 2.2 | Voldoet | Landmarks op elk scherm (nav met naam, main, header), nu ook in editor, juridische pagina's, Helpcentrum en Contact; koppen. Geen skiplink (niet vereist). |
| 2.4.2 | Paginatitel | A | 2.1 + 2.2 | Voldoet | Opgelost (B-03): elk scherm een eigen titel ("Cv bewerken · maakeencv.nl", "Kaart van een deelnemer · …", "Statistieken – Beheer · …", in de lesspeler de naam van de les), ook in ar, fr, en, ti, ru ("تسجيل الدخول · maakeencv.nl", "Offres d'emploi · …"). Tabbladen binnen één pagina (Deelnemers, Organisatie, Overzicht) delen de paginatitel; Beheer zet de tab in de titel. |
| 2.4.3 | Focusvolgorde | A | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-07): het woordhulp-vel zet bij openen de focus in het vel, Tab blijft in het vel, en na Esc staat de focus weer op het woord. Opnieuw gemeten in de cv-editor (S13). Eerder al: opgelost (B-02, B-09): 0 Tab-stappen buiten de lesspeler (S24–S43, S35v–S41v); bij elk lesvenster focus op de kop; na "Controleer" focus op "Opnieuw proberen"/de volgende knop; 19 van de 20 met het toetsenbord geopende dialogen/menu's/keuzelijsten houden de focus vast en geven hem bij Esc terug aan hun opener (ook Praktijk toevoegen, Bewijsstuk, Werkervaring, Uitnodigen, Afmelden, Afspraak, Nieuwe groep); na opslaan in P5/P6 focus op de opener. |
| 2.4.4 | Linkdoel (in context) | A | 2.1 + 2.2 | Voldoet | Inventaris van alle links op 88 schermen (alle S-schermen behalve S09, plus S35v–S41v en S77s; ): geen vage linknamen ("hier", "lees meer", "bekijk") zonder context; herhaalde links met hetzelfde woord en een ander doel ("Eindoverzicht" op S59/S72) staan in een rij met de naam van de deelnemer; "Bekijken : CV Elektricien" op Start draagt de naam van het cv; externe links tonen hun domein (bv. "www.autoriteitpersoonsgegevens.nl"). Grensgeval: op Mijn cv's (S12) heten de links "Bekijken" en "Bewerken" zonder de naam van het cv, en de naam staat ná de links (geen programmatisch bepaalde context); in de geteste toestand met één cv is het doel eenduidig, met meer cv's niet. Advies A-8. |
| 2.4.5 | Meerdere manieren | AA | 2.1 + 2.2 | Voldoet | Menu, overzicht op Start/Vandaag, zoekpalet (Ctrl+K) voor begeleiders en beheer; juridische pagina's vanaf registreren en uit elkaar. |
| 2.4.6 | Koppen en labels | AA | 2.1 + 2.2 | Voldoet | Alle koppen en veldlabels nagelopen (inventaris per scherm): ze beschrijven het onderwerp ("Wat ik wil", "De acht thema's …", "Voorbereiding op het eerste gesprek", "Stel eerst tweestapsverificatie in"); geen lege koppen of labels; de lesspeler koppelt "Stap 4 van 11" (positie) aan de naam van de les in de dialoognaam en titel, met per blok een h2 over het onderwerp. Grensgeval: het formulier "Wachtwoord vergeten" staat onder de kop "Inloggen" (de kop van de pagina), met direct eronder "Vul je e-mailadres in; we sturen je een link om een nieuw wachtwoord in te stellen." en de knop "Stuur resetlink"; als voldoet beoordeeld, met advies A-1. |
| 2.4.7 | Focus zichtbaar | AA | 2.1 + 2.2 | Voldoet | Opgelost (B-04, B-01, B-02, B-06): elke Tab-stap heeft een zichtbare indicator; contrast minstens 3,39:1 (standaard), 3,97:1 (februari), 3,49:1 (maart) over 2.537 Tab-stappen ná de overgang; witte ring op het gekleurde inlogvlak 5,9–8,5:1; sjabloonkaarten met ring om de kaart; datumvelden met ring en gemarkeerd segment, kalenderknop met de omlijning van de browser. |
| 2.4.11 | Focus niet bedekt (minimum) | AA | 2.2 | Voldoet | Opgelost (B-01, B-02, B-06): 0 volledig bedekte focusstappen in alle 155 batterijmetingen en 68 focusweergaven, ook op 320 px met de onderbalk en de actiebalk van Vandaag, met Shift+Tab onder de plakkende kop, in de cv-editor en in het Arabisch. (Achter het woordhulp-vel kan de focus op 320 px onder het vel liggen; de gebruiker heeft dat vel zelf geopend en sluit het met Esc zonder de focus te verplaatsen, en dat telt volgens noot 2 bij 2.4.11 niet als bedekt. Het probleem valt onder 2.4.3, R-07.) |
| 2.5.1 | Aanwijzergebaren | A | 2.1 + 2.2 | Voldoet | Geen veeg- of padgebaren nodig. |
| 2.5.2 | Aanwijzerannulering | A | 2.1 + 2.2 | Voldoet | Knoppen reageren op click; menu's openen bij pointerdown en zijn met Esc te sluiten. |
| 2.5.3 | Label in naam | A | 2.1 + 2.2 | Voldoet | Opgelost (B-07): axe label-content-name-mismatch 0 in alle 155 metingen; taalknop "NL, taal kiezen", taalhulp "AR – Laat zien in العربية", opmaakbalk "Utrecht, Sjabloon", stopknop "Stoppen. Terug naar overzicht". |
| 2.5.4 | Bewegingsactivering | A | 2.1 + 2.2 | Niet van toepassing | Geen devicemotion/deviceorientation. |
| 2.5.7 | Sleepbewegingen | AA | 2.2 | Voldoet | Opgelost (B-17): "… omhoog/omlaag" bij cv-onderdelen (32×32) en secties (28×28), met melding "Verplaatst. Nu op plek 2 van 3." |
| 2.5.8 | Grootte aanwijsgebied (minimum) | AA | 2.2 | Voldoet | Opgelost (B-15): woordhulp 24 px hoog, sluitknop vertaalmelding 24×24, selectievakjes klikvlak 26×26. Overgebleven meldingen van de meetfunctie: "CompetentNL"/"CC BY 4.0" (in een zin, uitzondering "inline") en elementen die op 320 px net onder een vaste balk schuiven (stand van het scrollen, geen vaste afstand). |
| 3.1.1 | Taal van de pagina | A | 2.1 + 2.2 | Voldoet | <html lang> en dir volgen de schermtaal (nl, ar/rtl, fr, en, ti, ru gemeten). Pagina's die alleen in het Nederlands bestaan (W05 Praktijk bevestigen, W02 Kopersdossier, juridische teksten) zetten de inhoud in een element met lang="nl" (bv. <main lang="nl">); daarmee is de taal van alle inhoud bepaalbaar. Alleen de tabtitel valt onder de taal van <html>; advies A-4. |
| 3.1.2 | Taal van onderdelen | AA | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-05): het blok "Nieuws en acties" in Instellingen, de namen van vaardigheden uit de landelijke lijst en de vacaturegegevens hebben lang="nl". Opnieuw gemeten in het Arabisch op S50 en S51: alleen de naam van de organisatie (een eigennaam) en een vaardigheid die de deelnemer zelf intypte staan nog zonder taal; de taal van eigen invoer is de app niet bekend. Eerder al: opgelost (B-19): Privacy, Voorwaarden, Cookies, intake-samenvatting; taalmenu met lang per taal en aria-current; hulptaal in lessen en eindvragen met eigen lang. |
| 3.2.1 | Bij focus | A | 2.1 + 2.2 | Voldoet | In alle Tab-rondes geen contextwissel door focus; de ATS-uitleg die bij focus verschijnt is een tooltip (geen contextwissel). |
| 3.2.2 | Bij input | A | 2.1 + 2.2 | Voldoet | Taalkeuze via een menu; keuzelijsten veranderen inhoud, geen context; geen formulier verstuurt zichzelf. |
| 3.2.3 | Consistente navigatie | AA | 2.1 + 2.2 | Voldoet | Menu per werkplek op elk scherm in dezelfde volgorde (deelnemer, begeleider, beheer), ook in het Arabisch. |
| 3.2.4 | Consistente identificatie | AA | 2.1 + 2.2 | Voldoet | Knopnamen per icoon en per werkwoord vergeleken over alle schermen: zelfde functie, zelfde naam ("Opslaan", "Sluiten", "Uitnodigen", "Afdrukken of opslaan als pdf", "NL, taal kiezen", "Tips stilzetten", "Stoppen. …"); het icoon met het streepje heeft per functie een eigen naam ("… afmelden" voor deelnemers, "… loskoppelen" in Beheer, "… verwijderen" in Team): andere functies, geen strijdigheid. |
| 3.2.6 | Consistente hulp | A | 2.2 | Voldoet | "Hulp" onderaan in de zijbalk op elk ingelogd scherm. |
| 3.3.1 | Foutidentificatie | A | 2.1 + 2.2 | Voldoet | Lege en foute invoer in P1, P2, P4, P5, P6, P6b: melding in tekst bij het veld, aria-invalid, aria-describedby, focus naar het eerste foute veld ("Kies wat het was.", "Geef de groep een naam …", "Plak of typ minstens één e-mailadres …", "Dit lijkt geen goed e-mailadres …"). Inloggen/registreren gebruiken de browsermelding. (Buiten de geteste toestand: N-02.) |
| 3.3.2 | Labels of instructies | A | 2.1 + 2.2 | Voldoet | Opgelost (B-13): verplichte velden tonen "(verplicht)" en hebben aria-required; de opslaanknop blijft bedienbaar en zegt wat er ontbreekt; geen veld zonder zichtbaar label. |
| 3.3.3 | Foutsuggestie | AA | 2.1 + 2.2 | Voldoet | Meldingen met een suggestie of voorbeeld: "Schrijf hoeveel uur het was, bijvoorbeeld 8 of 2,5.", "… bijvoorbeeld "Voorjaar Tilburg".", "… bijvoorbeeld jan.dekker@voorbeeld.nl", "Een e-mailadres ziet er zo uit: naam@voorbeeld.nl", "Kies een wachtwoord van minstens 8 tekens."; bij een fout wachtwoord bewust geen suggestie ("Onjuist e-mailadres of wachtwoord.", veiligheid). De browsermeldingen geven ook een suggestie ("@ ontbreekt"). |
| 3.3.4 | Foutpreventie (juridisch, financieel, gegevens) | AA | 2.1 + 2.2 | Voldoet | Account verwijderen pas na het typen van "VERWIJDER"; deelnemer afmelden met bevestiging; eindvragen opnieuw te maken. Betalen (Stripe) valt buiten de steekproef. |
| 3.3.7 | Overbodige invoer | A | 2.2 | Voldoet | Geen gegevens twee keer gevraagd in de processen; het cv haalt gegevens uit het masterprofiel. |
| 3.3.8 | Toegankelijke authenticatie (minimum) | AA | 2.2 | Voldoet | Geen cognitieve test in de eigen code; plakken niet geblokkeerd; autocomplete op e-mail, wachtwoord en code; wachtwoord tonen met spatie. Turnstile toont hooguit een vakje "Ik ben geen robot" (geen puzzel) en is met Tab bereikbaar. Kanttekening B-21 blijft (zie §6). |
| 4.1.1 | Parsen | A | 2.1 | Voldoet | Volgens de noot in WCAG 2.1 altijd voldaan voor HTML; gevolgen van foute code staan bij 1.3.1 en 4.1.2. |
| 4.1.2 | Naam, rol, waarde | A | 2.1 + 2.2 | Voldoet | Na de eindmeting hersteld (R-06): de taartgrafieken in Beheer → Statistieken zijn niet meer focusbaar (rootTabIndex -1, en inert op het verborgen grafiekvak). Opnieuw gemeten op S77s: axe 0, ook geen aria-hidden-focus. Het woordhulp-vel (R-07) is hersteld, zie 2.4.3. Eerder al: opgelost (B-11, B-02): geen naamloze knoppen, keuzelijsten, schuifregelaars of voortgangsbalken (axe en boom: 0); schuifregelaars met naam en waardetekst ("32 pt"); voortgangsbalken met waarde; de lesspeler is nu echt modaal . |
| 4.1.3 | Statusberichten | AA | 2.1 + 2.2 | Voldoet | "Opgeslagen", "Groep aangemaakt", "0 uitnodigingen verstuurd …", "Verplaatst. Nu op plek 2 van 3.", autosave ("Niet opgeslagen" → "Opslaan…" → "Opgeslagen om 21:37"), feedback bij oefeningen en de uitslag van de eindvragen via role=status/aria-live; foutmeldingen bij invoer via role=alert of gekoppeld aan het veld. Vaste mededelingen hebben geen role=alert meer (B-22). Zonder schermlezer beoordeeld. |
7. Bevindingen en herstel
De eerste meting vond 23 bevindingen (B-01 tot en met B-23); de eindmeting vond daarna nog 7 afwijkingen (R-01 tot en met R-07), waarvan 4 die al in de gegevens van de eerste meting zaten maar toen niet waren gemeld, en 1 die door het herstel was ontstaan (een grafiek die focusbaar was binnen een voor hulptechnologie verborgen gebied). Alle zijn hersteld en opnieuw gemeten.
| Kenmerk | Criterium | Wat er mis was | Status |
|---|---|---|---|
| B-01 | 2.4.11, 2.4.7 | In het Arabisch, Farsi en Dari lag het menu over de inhoud | Hersteld |
| B-02 | 2.4.3, 2.4.7, 4.1.2 | Focus kon achter de lesspeler verdwijnen | Hersteld |
| B-03 | 2.4.2 | Elk scherm had dezelfde titel | Hersteld |
| B-04 | 2.4.7, 1.4.11 | Focusring te licht (1,8–2,0:1) | Hersteld (nu ≥ 3,39:1 in alle thema's) |
| B-05 | 1.4.11 | Randen van invoervelden te licht | Hersteld (zie ook R-03) |
| B-06 | 2.4.11 | Mobiele onderbalk bedekte de focus | Hersteld |
| B-07 | 2.5.3 | Taalknoppen met een naam die niet begon met de zichtbare tekst | Hersteld |
| B-08 | 1.4.3 | Te lichte grijze tekst | Hersteld (zie ook R-02) |
| B-09 | 2.4.3 | Focus op de pagina na het sluiten van een venster | Hersteld |
| B-10 | 1.3.5 | Geen autocomplete op eigen gegevens | Hersteld |
| B-11 | 4.1.2 | Knoppen, keuzelijsten en schuifregelaars zonder naam | Hersteld |
| B-12 | 1.4.10 | Cv-voorbeeld te breed in het Arabisch op 320 px | Hersteld |
| B-13 | 3.3.2, 3.3.1 | Verplichte velden niet aangegeven, geen foutmelding | Hersteld |
| B-14 | 1.3.1 | Koppen en landmarks | Hersteld |
| B-15 | 2.5.8 | Te kleine klikvlakken | Hersteld |
| B-16 | 1.4.12 | Tekst afgekapt bij grotere tekstafstand | Hersteld (zie ook R-04) |
| B-17 | 2.5.7 | Volgorde alleen met slepen | Hersteld (knoppen omhoog en omlaag) |
| B-18 | 2.1.1 | Uitleg alleen met de muis | Hersteld |
| B-19 | 3.1.2 | Nederlandse tekst zonder taalaanduiding | Hersteld (zie ook R-05) |
| B-20 | 2.2.2 | Wisselende "Hallo" zonder pauze | Hersteld |
| B-21 | — | Cloudflare Turnstile (inlogcontrole) | Geen fout; zie §8 |
| B-22 | 4.1.3 | Vaste mededelingen als waarschuwing voorgelezen | Hersteld |
| B-23 | — | Decoratieve iconen zonder aria-hidden | Geen fout; advies in §10 |
| R-01 | 1.2.3, 1.2.5 | Uitlegvideo: beeldinformatie niet in het geluid | Hersteld (nieuwe stem en ondertitels) |
| R-02 | 1.4.3 | Witte letters op groen; tekst in grafieken | Hersteld |
| R-03 | 1.4.11 | Drie keuzelijsten met een te lichte rand | Hersteld |
| R-04 | 1.4.12 | Vacaturetitels en namen afgekapt bij tekstafstand | Hersteld |
| R-05 | 3.1.2 | Nederlandse blokken zonder lang="nl" in een andere taal | Hersteld |
| R-06 | 4.1.2 | Focusbare grafiek in een verborgen gebied (door het herstel ontstaan) | Hersteld |
| R-07 | 2.4.3 | Focus ging niet in het woordhulp-vel | Hersteld |
8. Vergelijking met de willekeurige steekproef en kanttekeningen
De willekeurige steekproef (§4.4) toonde geen nieuwe soorten inhoud, wel twee varianten van bekende fouten (de zijbalk in het Arabisch ook in Beheer, en de taal op pagina's die alleen in het Nederlands bestaan). Die zijn meegenomen in het herstel en in de eindmeting.
Kanttekeningen die geen afwijking zijn en niet in de score tellen:
- Cloudflare Turnstile controleert op de inlogschermen of er een mens inlogt. Voor gewone gebruikers is die onzichtbaar; een geautomatiseerde browser kreeg wel een uitdaging. De uitdaging is met het toetsenbord bereikbaar en heeft geen toetsenbordval. Hoe Cloudflare reageert op mensen met hulptechnologie of strikte privacy-instellingen, is niet gemeten; daarom staat het in het verbeterplan.
- Eigen invoer van gebruikers (bijvoorbeeld een vaardigheid die iemand zelf intypt) krijgt geen taalaanduiding, omdat de app de taal ervan niet kent.
- Decoratieve iconen hebben niet allemaal aria-hidden; ze hebben geen naam en geen rol en worden door gangbare schermlezers overgeslagen.
9. Beperkingen van dit onderzoek
- Geen echte schermlezer en geen spraakbediening. NVDA, JAWS, VoiceOver, TalkBack en Voice Access zijn niet gebruikt. Namen, rollen, toestanden, live regions, aria-modal/inert, leesvolgorde en uitspraak per taal zijn beoordeeld via de toegankelijkheidsboom van Chrome, attributen en code. Wat een schermlezer werkelijk voorleest (bv. bij het woordhulp-vel, de lesspeler en de statusberichten) is niet gehoord. Zie de criteria 1.3.1, 1.3.2, 4.1.2, 4.1.3, 3.1.2 en 2.5.3.
- Eén browser, één platform. Alleen Chrome 155.0.8059.39 headless op Windows 11 ARM64, via het DevTools-protocol met gesimuleerde toets- en muisgebeurtenissen. Niet getest: Firefox (echte alleen-tekst-zoom, 1.4.4), Safari/iOS, Android, een echt mobiel toestel, Windows Hoog contrast/forced-colors. Het gedrag van de focus bij verdwijnende knoppen verschilt per browser.
- Turnstile (B-21): de controle laat een geautomatiseerde browser niet door; inloggen via het formulier is daardoor niet tot het einde gedaan (ingelogd is via de API). Wat Cloudflare echte gebruikers met hulptechnologie of strikte privacy-instellingen toont, is niet gemeten.
- Pdf niet getoetst. DocRaptor is lokaal niet ingesteld; de cv-pdf (kernproduct) is niet onderzocht (advies: een productie-pdf toetsen met PAC). Wel: de afdrukweergave van het MAP-eindoverzicht; Chrome maakt er een getagde pdf van (met structuur en taal).
- Inloggen met Google, Microsoft, LinkedIn en de inloglink, betalen (Stripe) en de e-mails (uitnodiging, herstel) vallen buiten deze meting; ze zijn lokaal niet ingesteld.
- Talen en thema's: gemeten zijn nl (alles), ar (20 schermen + W02), en via de willekeurige steekproef fr, en, ti, ru; thema's standaard, februari en maart volledig, juni (W05) en de 13 thema's alleen voor het inlogvlak. Fa en prs delen de rtl-opmaak met ar (niet apart gemeten). Vertalingen zijn niet door moedertaalsprekers beoordeeld.
- Lokale verschillen met productie: de lokale opslag (bucket leren-media) is leeg: lesbeelden, het portret van de gids, de video en de voorgelezen lessen geven lokaal "Object not found" (de spelers en <track> staan er wel). Beelden, video, ondertitels en uitgeschreven tekst zijn daarom beoordeeld vanuit de projectmap en de lesmodules in de code (de bestanden die naar de opslag worden geüpload; de kopie op productie is niet vergeleken). De sessie-instelling van Supabase op productie is niet bekeken (2.2.1). Het cv-voorbeeld en de sjablonen (kleur door de gebruiker gekozen) zijn niet apart op contrast beoordeeld.
- Tab-rondes van de batterij beginnen waar de pagina de startplek voor de focus legt en stoppen bij <body>; in de cv-editor viel de kop (terugknop, Preview, tabs) daardoor buiten de ronde (in de eerste meting ook). De focusmeting ná de overgang heeft die kop wel gemeten (editor op 1280 en 320 px, vooruit en met Shift+Tab).
- Inhoudelijk oordeel (alt-teksten, koppen, instructies, ondertitels) is gegeven door de onderzoeker (AI-assistent) en niet door een tweede mens of door gebruikers met een beperking; WCAG-EM 2.0 beveelt dat laatste sterk aan.
- Steekproef: een steekproef levert geen conformiteitsclaim voor het hele product (WCAG-EM). De uitkomst geldt voor commit 5c3c000 (volledige meting) en bc14c97 (gerichte hermeting van de herstelde onderdelen), in deze lokale configuratie, op 7 oktober 2026.
- Eerste meting op S35–S41: die mat les 1, venster 10 in plaats van het genoemde blok (§4.3). De bevindingen van de eerste meting op die kenmerken gelden dus voor dat venster; de eindmeting heeft de bedoelde blokken alsnog gemeten (S35v–S41v).
10. Verbeterplan
| # | Wat | Waarom | Wanneer (voorstel) |
|---|---|---|---|
| 1 | Test met een echte schermlezer (NVDA, VoiceOver, TalkBack) en spraakbediening, door een ervaringsdeskundige, op de processen uit §4.5 | Grootste beperking van dit onderzoek | vóór 1 december 2026 |
| 2 | Pdf's van cv en sollicitatiebrief toetsen met PAC 2024 (en de tags verbeteren waar nodig) | Niet in dit onderzoek | vóór 1 december 2026 |
| 3 | Testen in Firefox, Safari en op echte telefoons (iOS en Android), en met Windows Hoog contrast | Alleen Chrome getest | vóór 1 december 2026 |
| 4 | Inloggen met Google, Microsoft, LinkedIn en de inloglink, en de e-mails van de app toetsen | Niet in dit onderzoek | vóór 1 december 2026 |
| 5 | Cloudflare Turnstile volgen: meldingen van gebruikers over de inlogcontrole verzamelen; zo nodig een andere controle | Niet volledig te meten | doorlopend |
| 6 | Decoratieve iconen standaard aria-hidden (lucide-react bijwerken) en de adviezen uit de eindmeting (focus na "Wachtwoord vergeten", één link in plaats van link-met-knop) | Kwaliteit, geen afwijking | vóór 1 januari 2027 |
| 7 | Vertalingen laten nalezen door moedertaalsprekers | Begrijpelijkheid in elf talen | doorlopend |
| 8 | Onafhankelijke toets door een gespecialiseerd bureau | Advies VNG ("waar mogelijk onafhankelijk") | eerste kwartaal 2027 |
| 9 | Hertest bij elke grote wijziging van de app, en ten minste jaarlijks een bijgewerkt rapport | Rapport mag maximaal 3 jaar oud zijn; verklaring jaarlijks bijwerken | jaarlijks, uiterlijk oktober 2027 |
Bijlagen
- A. Export voor het W3C WCAG-EM Report Tool (JSON-LD), met de oordelen per criterium: WCAG 2.1 en WCAG 2.2. Open het bestand in het Report Tool met "Open evaluation".
- B. Meetgegevens per scherm (axe-core en gescripte metingen) en schermafbeeldingen van de bevindingen; op aanvraag bij SMITO B.V.
SMITO B.V., Hoge Zand 39, 2512 EL Den Haag. Vragen over dit rapport of over de toegankelijkheid van maakeencv: support@maakeencv.nl.