$30 off During Our Annual Pro Sale. View Details »

Workshop: The Cake is a Lie!

Workshop: The Cake is a Lie!

Much like the promise of cake in Portal, login forms are everywhere in web development. While they may seem functional at first glance, many users with disabilities encounter a maze of invisible walls, from keyboard traps to inaccessible CAPTCHAs. It's as if GLaDOS designed these forms herself to test us!

In this practical walkthrough, we will debug the accessibility issues of a real React login component live, similar to traversing those test chambers: Using an actual screen reader, we'll show how minor improvements, such as proper ARIA implementation and effective focus management, can transform a complex test chamber into a smooth user experience. Additionally, we will address the common pitfalls that GLaDOS might throw at us in both the Portal universe and the real world of accessibility, especially concerning authentication processes and its special needs. So grab your portal gun—let's work together to break down these barriers and ensure that authentication truly works for everyone. The cake might be a lie, but accessibility doesn't have to be!

Avatar for Ramona Schwering

Ramona Schwering

December 02, 2025
Tweet

More Decks by Ramona Schwering

Other Decks in Technology

Transcript

  1. @leichteckig The cake is a lie! Let’s use Slido… and

    LucidSpark …or enter #reactadvanced-a11y in slido.com
  2. @leichteckig The Cake is a Lie! "For your own safety

    and the safety of others, please refrain from-- [bzzzzzt]" "Por favor bord ó n de fallar Muchos gracias de fallar gracias"
  3. @leichteckig The Cake is a Lie! This could be how

    it feels, if you have a disability
  4. @leichteckig Title of my talk 01/XX "Hello and, again, welcome

    to the [a11y] enrichment center." - IRL Situation
  5. @leichteckig The Cake is a Lie! Cake [...] will be

    available at the conclusion of the test. a11y == cake
  6. @leichteckig The Cake is a Lie! The European Accessibility Act

    (EAA) The Americans with Disabilities Act (ADA)
  7. @leichteckig The cake is a lie! “main” for solutions, “dont”

    for fixing. https://github.com/leichteckig/ login-a11y/tree/dont
  8. @leichteckig Our Companions Screenreader • describes aloud what appears on

    your computer screen • Mac: Activate by Command-F5 • VoiceOver will be in use here • Windows: Win + Crtl + Enter • Linux: Super + Alt + S The Cake is a Lie! Google DevTools & Lighthouse • Dev-Tools: A Set of tools directly built into the browser • A11y: Are the page’s elements properly marked up for screen readers? • Lighthouse: Open-source, automated tools for audits… like a11y
  9. @leichteckig The Cake is a Lie! Repo 01/XX "Hello and,

    again, welcome to the [a11y] enrichment center.” - Let’s set up our sample app.
  10. @leichteckig The Cake is a Lie! What’s wrong with the

    form? Tipp: Use the tools we talked about! <3 Lucidshart
  11. @leichteckig The Cake is a Lie! 01/XX "Do not look

    directly at the operational end of The Device" - Semantics
  12. @leichteckig Semantics “What that <div> exactly?!” • HTML tags to

    define the meaning and structure of web content • …making it more understandable for both humans and search engines • The right HTML element for the right purpose • …instead of relying on generic tags for styling or layout Title of my talk
  13. @leichteckig Role-Attribute If you really need to go for the

    <div>… • role=“cakes” overwrites the native semantics • “I’m not a div, but a cake” directed to the screen reader • Like the promise to be cake • Doesn’t add functionality: the <div> stays a plain div • “No ARIA is better than bad ARIA” The Cake is a Lie!
  14. @leichteckig The Cake is a Lie! 01/XX "Do not look

    directly at the operational end of The Device" - Let’s bring the label back. Repo
  15. @leichteckig The Cake is a Lie! 01/XX "What is that?

    It's not the surprise... I've never seen it before" - Colors
  16. @leichteckig The Cake is a Lie! Choosing a darker color

    for the input fields border Mind the contrast!
  17. @leichteckig The Cake is a Lie! 01/XX "What is that?

    It's not the surprise... I've never seen it before" - Let’s Fix the Colors. Tipp: Use Google’s DevTools to test. Repo
  18. @leichteckig The Cake is a Lie! 03/XX "You are now

    in possession of the Aperture Science Handheld Portal Device" - Keyboard Navigation
  19. @leichteckig The Cake is a Lie! 01/XX "You are now

    in possession of the Aperture Science Handheld Portal Device" - Let’s fix the focus state of the input fields and the login button in an accessible way. Repo
  20. @leichteckig The Cake is a Lie! .input-field { outline: none;

    &:focus { border-color: var(--color-primary); } } .btn { outline: none; }
  21. @leichteckig The Cake is a Lie! .btn { /* Keep

    the outline and style it */ &:focus { outline: 2px solid var(--color-primary); outline-offset: 2px; } }
  22. @leichteckig The Cake is a Lie! .input-field { /* Keep

    the outline and style it */ &:focus { outline: 2px solid var(--color-primary); outline-offset: 2px; } } .btn { /* Keep the outline and style it */ &:focus { outline: 2px solid var(--color-primary); outline-offset: 2px; } }
  23. @leichteckig The Cake is a Lie! 04/XX “This Weighted Companion

    Cube will accompany you through the test chamber. Please take care of it.” - Error Handling in Code
  24. @leichteckig ARIA-Tags “Accessible Rich Internet Applications” • Specification of WCAG

    • A set of defined attributes and roles to describe the status of elements • Enables screenreader to interpret correctly • Roles belong to ARIA, too Title of my talk
  25. @leichteckig Title of my talk 04/XX “This Weighted Companion Cube

    will accompany you through the test chamber. Please take care of it.” - Please change the error handling into a form that can be read through a screen reader Consider… - Fixing required field handling - Reading all error messages aloud - Linking input field with the error message Repo MDN
  26. @leichteckig The Cake is a Lie! <input id={id} aria-describedby={errorMessage ??

    `input-error-${id}` : null} /> {errorMessage && <div id="{`input-error-${id}`}" className="input-error-msg"> {errorMessage} </div> }
  27. @leichteckig The Cake is a Lie! 01/XX "Most importantly, under

    no circumstances should you [bzzzpt]" - Error Handling in UX
  28. @leichteckig The Cake is a Lie! Thanks for inviting me

    in! <3 Don’t overshare in your error messages!
  29. @leichteckig The Cake is a Lie! 05/XX "Most importantly, under

    no circumstances should you [bzzzpt]" - Let’s change the form in a way that’s easier to use when colorblind. Repo
  30. @leichteckig The Cake is a Lie! 01/XX "Who's gonna make

    the cake when I'm gone? You?" - Authentication specifics
  31. @leichteckig Title of my talk Slido What can go wrong

    in accessibility, specifically with authentication?
  32. @leichteckig Web Content Accessibility Guidelines (WCAG) The gold standard of

    a11y • Currently in Version 2.1 • POUR Principle: Everything needs to be Perceivable, Operable, Understandable, and Robust • Three levels: A (absolute minimum), AA (global standard), and AAA (perfect!) • Two Success Criteria for Authentication: 3.3.8 and 3.3.9 The Cake is a Lie!
  33. @leichteckig The Cake is a Lie! Do NOT disable paste

    functionality Biometric authentication Passwordless, e.g. Passkeys and Magic Links
  34. @leichteckig Title of my talk Slido What can go wrong

    in accessibility, specifically with authentication?
  35. @leichteckig Multi-Factor Authentication (MFA/2FA) • Offer Multiple MFA Options: Do

    not limit users to a single MFA method • Consider Cognitive Load for OTPs • Use a generous Time Limit • facilitate auto-copy or provide a "copy code" button • User Interface for MFA • Step indication and reduce Context switches • Mind the QR codes! The Cake is a Lie!
  36. @leichteckig The Cake is a Lie! 01/XX "The experiment is

    nearing its conclusion." - Some more general tipps