<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged a11y</title>
<link>https://coderlegion.com/tag/a11y</link>
<description>Powered by Question2Answer</description>
<item>
<title>I'm Blind. I Built a Professional Video Editor. Here's Why.</title>
<link>https://coderlegion.com/29903/im-blind-i-built-a-professional-video-editor-heres-why</link>
<description>&lt;p&gt;Every time I opened Adobe Premiere, DaVinci Resolve, or any other professional video editor, I hit the same wall. Buttons without labels. Timelines that exist only as visual elements. Drag-and-drop workflows that assume you can see where you're dragging. For a sighted user, these tools are industry standard. For me — a blind developer using JAWS for Windows — they are practically unusable.&lt;br&gt;
I got tired of waiting for someone else to fix this.&lt;br&gt;
So I built Ultra Creative Suite.&lt;br&gt;
What it is&lt;br&gt;
Ultra Creative Suite is a professional video and audio editor for Windows, built from the ground up with one rule: every single feature must work equally for blind, low-vision, and sighted users. No &quot;accessible mode&quot; that hides features. No stripped-down alternative workflow. The same full editor, for everyone.&lt;br&gt;
What it can do&lt;br&gt;
Give it an audio file — a song, a narration, anything — and it will:&lt;/p&gt;
&lt;p&gt;Analyze lyrics using a local AI model (Ollama / Qwen 2.5 14B)&lt;br&gt;
Detect mood, season, and energy per lyric line&lt;br&gt;
Automatically download matching stock footage from Pixabay&lt;br&gt;
Apply per-lyric color grading via FFmpeg curves&lt;br&gt;
Mix ambient sounds from a library of 1,279+ categorized clips&lt;br&gt;
Render the finished video to 4K&lt;/p&gt;
&lt;p&gt;All of this is controllable entirely through the keyboard. Every action is announced by the screen reader. No mouse required for any core workflow.&lt;br&gt;
The technical decisions that made accessibility possible&lt;br&gt;
The most important decision was the timeline. Most video editors use custom-drawn UI elements for their timelines — visually rich, but completely invisible to screen readers. I used a Win32 native ListView control instead. The same Windows control used in File Explorer. JAWS and NVDA read every clip natively, without plugins or workarounds: clip name, type, duration, position, and AI-generated audio description.&lt;br&gt;
Every dialog has proper focus management. Every action produces a live region announcement. The entire application is navigable with standard keyboard shortcuts.&lt;br&gt;
The demo&lt;br&gt;
The demo video linked in the repository was created entirely by me — blind, using JAWS only. No sighted assistance at any point. AI analyzed the lyrics, selected the footage, applied the effects, mixed the audio, and rendered to 4K. I controlled every step through the keyboard.&lt;br&gt;
Why open source&lt;br&gt;
Because I'm not the only blind developer who has hit this wall. And I'm not the only blind person who wants to create. Ultra Creative Suite is GPL-3, fully open source, and designed to be a reusable foundation for accessible creative software.&lt;br&gt;
If you've ever thought &quot;why isn't there accessible software for X&quot; — maybe this is the starting point.&lt;br&gt;
Links&lt;br&gt;
GitHub: github.com/demirajvazi10-max/Ultra-Creative-suite&lt;br&gt;
If you want to support the project: ko-fi.com/ultra-creativesuite or paypal.me/demirajvazi10&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29903/im-blind-i-built-a-professional-video-editor-heres-why</guid>
<pubDate>Mon, 05 Oct 2026 19:06:08 +0000</pubDate>
</item>
<item>
<title>Why I built Animal Sudoku without a single ad</title>
<link>https://coderlegion.com/29236/why-i-built-animal-sudoku-without-a-single-ad</link>
<description>&lt;p&gt;Screen time for children is broken. Most free games trade a childs focus for ad revenue. Flashing banners and loud interruptions shatter concentration during critical learning moments. I built Animal Sudoku Kids Puzzle to be a safe haven for logic.&lt;/p&gt;
&lt;h4 id=&quot;the-problem-that-bothered-me&quot;&gt;The problem that bothered me&lt;/h4&gt;
&lt;p&gt;If you've ever handed your phone or tablet to a child, you know the script:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &quot;free&quot; puzzle game opens with a 30-second video ad.&lt;/li&gt;
&lt;li&gt;A flashing &quot;UPGRADE NOW&quot; button takes up a third of the screen.&lt;/li&gt;
&lt;li&gt;A pop-up appears mid-game asking the child to rate the app.&lt;/li&gt;
&lt;li&gt;And somewhere, quietly, an SDK is collecting behavioral data on a 5-year-old.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'm a parent. I'm also an engineer. The combination made me increasingly uncomfortable with what I was seeing — apps designed to capture and monetize children's attention rather than support their development.&lt;/p&gt;
&lt;p&gt;I kept thinking: &lt;em&gt;the technology to do this better has existed for a decade. Why isn't anyone just… doing it?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So I built it.&lt;/p&gt;
&lt;h4 id=&quot;what-animal-sudoku-is-and-isn-t-&quot;&gt;What Animal Sudoku is (and isn't)&lt;/h4&gt;
&lt;p&gt;It's a kid-first introduction to Sudoku, with three difficulty levels — a gentle 4×4 grid for beginners, a harder 4×4 for the in-between phase, and a proper 6×6 for puzzle-loving 8+ year olds. Six animals, color-coded zones, smart hints when stuck, auto-save so progress is never lost, gentle background music, and a confetti celebration when you finish a puzzle.&lt;/p&gt;
&lt;p&gt;There is no &quot;Game Over.&quot; There's no time pressure unless the child wants to chase a score. There's no failure state — just exploration.&lt;/p&gt;
&lt;h4 id=&quot;what-it-isn-t-&quot;&gt;What it &lt;strong&gt;isn't&lt;/strong&gt;:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;❌ No advertising. None. Anywhere.&lt;/li&gt;
&lt;li&gt;❌ No third-party analytics or tracking SDKs.&lt;/li&gt;
&lt;li&gt;❌ No account creation or sign-up.&lt;/li&gt;
&lt;li&gt;❌ No internet connection required to play.&lt;/li&gt;
&lt;li&gt;❌ No &quot;watch a video to unlock&quot; mechanics.&lt;/li&gt;
&lt;li&gt;❌ No data collected from your child. None. The app is fully COPPA-compliant by virtue of collecting nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The full game is free. There are no required purchases. Future optional theme packs may exist, but the core game stays complete and free forever.&lt;/p&gt;
&lt;h4 id=&quot;engineering-for-every-child-accessibility-first&quot;&gt;Engineering for Every Child: Accessibility first&lt;/h4&gt;
&lt;p&gt;Inclusion was not a nice-to-have feature. It was a core requirement from day one. I spent a significant portion of development time ensuring that children with different physical or visual needs could play independently.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VoiceOver and TalkBack Support: Every animal icon and grid cell contains a semantic accessibility label.&lt;/li&gt;
&lt;li&gt;Voice Control: Children can navigate the board and place animals using only their voice.&lt;/li&gt;
&lt;li&gt;Haptic Logic: I integrated haptics to provide tactile vibrations for every move, allowing children to feel the logic of the game.&lt;/li&gt;
&lt;li&gt;Visual Clarity: Large touch targets and high-contrast color zones ensure the interface is easy to navigate for small hands.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;if-you-have-small-humans-in-your-life&quot;&gt;If you have small humans in your life&lt;/h4&gt;
&lt;p&gt;I'd love for you to try it. It's on the App Store, completely free, with no strings attached:&lt;/p&gt;
&lt;p&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://apps.apple.com/app/animal-sudoku-kids-puzzle/id6759012562&quot;&gt;Download Animal Sudoku on the App Store&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you give it a spin with a kid in your life, I genuinely want to hear how it goes — what worked, what didn't, what you wish it did. Reply here, send me a message, or email me directly. Every bit of feedback shapes what comes next.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Animal Sudoku Kids Puzzle is available now on iOS. Android version in development.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29236/why-i-built-animal-sudoku-without-a-single-ad</guid>
<pubDate>Wed, 30 Sep 2026 12:04:29 +0000</pubDate>
</item>
<item>
<title>Beyond a Country Explorer: Accessibility &amp; Architecture in React</title>
<link>https://coderlegion.com/29012/beyond-a-country-explorer-accessibility-architecture-in-react</link>
<description>&lt;p&gt;A country explorer can look like a simple React project: fetch some data, render a list of countries, and add a search field.&lt;/p&gt;
&lt;p&gt;But building a frontend that remains &lt;strong&gt;accessible, predictable, and maintainable&lt;/strong&gt; requires thinking beyond the visual interface.&lt;/p&gt;
&lt;p&gt;Here is how I structured my Rest Countries application with a focus on component boundaries, user interaction, and accessibility.&lt;/p&gt;
&lt;p&gt;⚡ &lt;strong&gt;The Architecture Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feature-Oriented Structure:&lt;/strong&gt; Country-related functionality is organized around the feature itself, separating the data layer, application logic, and UI components instead of grouping everything by file type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Custom State Logic:&lt;/strong&gt; Country filtering and selection are handled through a dedicated &lt;code&gt;useCountries&lt;/code&gt; hook, keeping stateful behavior separate from presentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keyboard-Accessible Region Selection:&lt;/strong&gt; The custom region selector supports keyboard interaction including &lt;code&gt;ArrowUp&lt;/code&gt;, &lt;code&gt;ArrowDown&lt;/code&gt;, &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;End&lt;/code&gt;, and &lt;code&gt;Escape&lt;/code&gt;, providing an interaction model closer to a native control.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Focus Management:&lt;/strong&gt; Focus is deliberately managed when navigating between the country list and country details. When returning from a country detail view, focus can be restored to the element that originally triggered the navigation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Semantic Interaction:&lt;/strong&gt; Interactive elements use appropriate HTML semantics and accessible labels rather than relying only on visual styling to communicate their purpose.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Controlled UI Boundaries:&lt;/strong&gt; The country grid, controls, and country detail view have separate responsibilities, making the interface easier to reason about and modify.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intentional Interaction Design:&lt;/strong&gt; Country information remains selectable and usable as text, while the country flag acts as the primary interactive target for opening details. This avoids turning an entire information card into an unnecessarily large interactive control.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;strong&gt;The Result:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A React country explorer designed not only to display data, but to provide a more predictable experience for keyboard users while maintaining clear boundaries between state, UI, and interaction logic.&lt;/p&gt;
&lt;p&gt;The project is built with accessibility as part of the architecture rather than as a final visual polish step.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://ahmed-rest-countries.vercel.app/&quot;&gt;https://ahmed-rest-countries.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;GitHub Repo:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/a-sayed123/Rest_Countries_API&quot;&gt;https://github.com/a-sayed123/Rest_Countries_API&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;react-accessibility-frontendarchitecture-webdevelopment-cleancode-a11y&quot;&gt;React #Accessibility #FrontendArchitecture #WebDevelopment #CleanCode #A11y&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29012/beyond-a-country-explorer-accessibility-architecture-in-react</guid>
<pubDate>Tue, 29 Sep 2026 08:01:34 +0000</pubDate>
</item>
<item>
<title>Automated Accessibility Testing: axe-core, Keyboard Navigation, and WCAG in the Browser</title>
<link>https://coderlegion.com/21693/automated-accessibility-testing-axe-core-keyboard-navigation-and-wcag-in-the-browser</link>
<description>&lt;p&gt;Automated accessibility testing usually means one thing: point a scanner at the page, let it check the initial HTML against a set of WCAG rules, and turn green. Missing alt text, an unlabeled input, low-contrast text at load. Caught. Done.&lt;/p&gt;
&lt;p&gt;Then a user opens the menu, submits the empty form, expands the accordion, and lands in a state your scanner never saw. The newly revealed panel steals focus and never gives it back. The modal traps a keyboard user with no way out. None of that exists in the first render, so none of it was tested.&lt;/p&gt;
&lt;p&gt;That is the gap this post is about. Accessibility is not a property of a page, it is a property of every state a page can reach, and most of those states only exist after someone interacts. The fix is to run your accessibility checks in a real browser, after the interaction, with two complementary tools: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/axe-core&quot;&gt;axe-core&lt;/a&gt; for WCAG rule checks, and keyboard navigation tests for focus order. This walks through both.&lt;/p&gt;
&lt;h3 id=&quot;the-gap-accessibility-tests-that-run-in-jsdom&quot;&gt;The gap: accessibility tests that run in jsdom&lt;/h3&gt;
&lt;p&gt;The default setup runs your tests in jsdom. Render a component with Testing Library, run axe-core over it with &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/jest-axe&quot;&gt;jest-axe&lt;/a&gt; or &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/vitest-axe&quot;&gt;vitest-axe&lt;/a&gt;, assert no violations. It is fast, and it is fine for catching the obvious stuff: a button with no accessible name, an input with no label, a misused ARIA attribute.&lt;/p&gt;
&lt;p&gt;It also has a hard ceiling. jsdom does no layout and no rendering, so any check that depends on what actually paints on screen cannot run there. axe-core's &lt;code&gt;color-contrast&lt;/code&gt; rule is the clearest example: in jsdom it comes back as &quot;incomplete,&quot; not pass or fail, because there is nothing to measure. And that is before you get to anything interactive.&lt;/p&gt;
&lt;p&gt;What it cannot tell you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whether focus moves somewhere sensible after a dialog opens, and comes back when it closes.&lt;/li&gt;
&lt;li&gt;Whether the validation summary that renders after a failed submit is actually announced and reachable.&lt;/li&gt;
&lt;li&gt;Whether your tab order matches the visual order once a section expands.&lt;/li&gt;
&lt;li&gt;Whether a custom component announces its name, role, and state to a screen reader after it changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not edge cases. They are where most real accessibility complaints come from. And they all depend on layout, focus, and event behavior that jsdom only approximates. To test them you need the real thing: a real browser, real focus, real events.&lt;/p&gt;
&lt;p&gt;That is the part TWD is built for. Tests run inside the actual browser, against your real app, and you drive them the way a user would. Which means you can scan accessibility &lt;em&gt;after&lt;/em&gt; the interaction, not just before it.&lt;/p&gt;
&lt;h3 id=&quot;approach-1-axe-core-scanned-after-the-interaction&quot;&gt;Approach 1: axe-core, scanned after the interaction&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/axe-core&quot;&gt;axe-core&lt;/a&gt; is the engine behind most accessibility tooling. It is excellent at the rule-based checks: contrast, names, roles, ARIA misuse. The trick is not running axe. The trick is running it against the state that matters.&lt;/p&gt;
&lt;p&gt;A small helper turns axe results into a readable failure instead of a wall of JSON:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import axe from &quot;axe-core&quot;;

type AxeResults = import(&quot;axe-core&quot;).AxeResults;
type RunOptions = import(&quot;axe-core&quot;).RunOptions;
type ElementContext = import(&quot;axe-core&quot;).ElementContext;

/**
 * Run axe-core against the page (or a scoped element) and throw a
 * formatted error if there are any accessibility violations.
 */
export async function checkA11y(
  context?: ElementContext,
  options?: RunOptions
): Promise&amp;lt;AxeResults&amp;gt; {
  const results = await axe.run(context ?? document, options);

  if (results.violations.length) {
    const report = results.violations
      .map((v, i) =&amp;gt; `${i + 1}. [${v.impact ?? &quot;n/a&quot;}] ${v.id}: ${v.help}\n   ${v.helpUrl}`)
      .join(&quot;\n\n&quot;);
    throw new Error(
      `Found ${results.violations.length} accessibility violation(s):\n\n${report}`
    );
  }

  return results;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A baseline scan of the page that loads is the easy case:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import { twd, userEvent, screenDom } from &quot;twd-js&quot;;
import { describe, it, beforeEach } from &quot;twd-js/runner&quot;;
import { checkA11y } from &quot;./helpers/axe&quot;;

// Only WCAG 2.0/2.1 A &amp;amp; AA rules. Skips axe &quot;best-practice&quot; rules
// (region, landmark-one-main, ...) which are recommendations, not failures.
const WCAG = {
  runOnly: {
    type: &quot;tag&quot; as const,
    values: [&quot;wcag2a&quot;, &quot;wcag2aa&quot;, &quot;wcag21a&quot;, &quot;wcag21aa&quot;],
  },
};

describe(&quot;Accessibility&quot;, () =&amp;gt; {
  beforeEach(() =&amp;gt; {
    twd.clearRequestMockRules();
  });

  it(&quot;should have no WCAG 2 A/AA violations on the home page&quot;, async () =&amp;gt; {
    await twd.visit(&quot;/&quot;);
    await checkA11y(document, WCAG);
  });
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the part every tool can do. Here is the part that needs a real browser and a real interaction: scanning a state that only exists &lt;em&gt;after&lt;/em&gt; the user does something.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;it(&quot;should stay accessible after form validation errors render&quot;, async () =&amp;gt; {
  await twd.mockRequest(&quot;getTodoList&quot;, {
    method: &quot;GET&quot;,
    url: &quot;/api/todos&quot;,
    response: [],
    status: 200,
  });
  await twd.visit(&quot;/todos&quot;);
  await twd.waitForRequest(&quot;getTodoList&quot;);

  // Submit the empty form to force the validation error messages to render.
  const submitButton = await screenDom.findByRole(&quot;button&quot;, { name: &quot;Create Todo&quot; });
  await userEvent.click(submitButton);

  // Confirm the new dynamic content actually appeared before scanning.
  const error = await screenDom.findByText(&quot;Title is required&quot;);
  twd.should(error, &quot;be.visible&quot;);

  // Scope the scan to just the form so the report is about this component.
  const form = await screenDom.findByTestId(&quot;todo-form&quot;);
  await checkA11y(form, WCAG);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The error messages in that test do not exist in the initial HTML. They render after a failed submit. A static scan never reaches them, so it never checks whether they are associated with their fields, announced, or reachable. Driving the interaction first, then scoping the scan to the form, checks the state a user actually lands in.&lt;/p&gt;
&lt;p&gt;Scoping matters too. Passing the form element instead of &lt;code&gt;document&lt;/code&gt; keeps the report about the component you just exercised, rather than re-flagging everything else on the page.&lt;/p&gt;
&lt;h3 id=&quot;approach-2-keyboard-navigation-and-focus-order&quot;&gt;Approach 2: keyboard navigation and focus order&lt;/h3&gt;
&lt;p&gt;axe will not tell you whether your tab order makes sense. It cannot. Whether &lt;kbd&gt;Tab&lt;/kbd&gt; moves through controls in an order that matches the visual flow, whether focus is visible, whether a control is even reachable by keyboard: that is behavior, and you have to drive it.&lt;/p&gt;
&lt;p&gt;Because TWD tests run in the real browser, &lt;code&gt;userEvent&lt;/code&gt; drives real focus. So you can walk the page the way a keyboard user does and assert where focus lands at each step.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;it(&quot;keyboard navigation should work&quot;, async () =&amp;gt; {
  await twd.visit(&quot;/chat&quot;);

  const user = userEvent.setup();

  // Tab from the top of the page. First stop should be the back link.
  await user.tab();
  const backToLanding = screenDom.getByRole(&quot;link&quot;, { name: &quot;← Back to Landing&quot; });
  twd.should(backToLanding, &quot;be.focused&quot;);

  // Tab again. Focus should land on the prompt input, and typing should work.
  await user.tab();
  await user.keyboard(&quot;write some text&quot;);
  const textarea = screenDom.getByLabelText(&quot;Main prompt input (required)&quot;);
  twd.should(textarea, &quot;have.text&quot;, &quot;write some text&quot;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is a deterministic check of two things a scanner cannot see: the focus order is correct (back link, then input), and the input is reachable and usable by keyboard alone. If someone later drops a non-focusable &lt;code&gt;div&lt;/code&gt; with a click handler into the flow, or reorders the DOM so tab order no longer matches the layout, this test fails. You find out in the run, not from a user report.&lt;/p&gt;
&lt;p&gt;You can extend the same pattern to the cases that bite hardest: open a dialog and assert focus moved into it, close it and assert focus returned to the trigger, tab to the end of a menu and assert it does not escape into the page behind it.&lt;/p&gt;
&lt;h3 id=&quot;watch-out-with-automated-accessibility-testing&quot;&gt;Watch out with automated accessibility testing&lt;/h3&gt;
&lt;p&gt;Automated accessibility testing has a ceiling. Rule-based tools catch roughly a third of WCAG issues. axe is very good inside that third, and driving the interaction first stretches it to states a load-time scan cannot reach, but it is still a third. The rest needs a human: real screen reader testing, and judgment about whether labels, content order, and motion actually make sense.&lt;/p&gt;
&lt;p&gt;So treat this as the regression net, not the whole strategy. It is the part you can run on every change, in CI, that stops obvious and post-interaction failures from sliding back in between manual audits.&lt;/p&gt;
&lt;h3 id=&quot;why-this-matters-to-us&quot;&gt;Why this matters to us&lt;/h3&gt;
&lt;p&gt;We build the tool this runs on, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/twd-js&quot;&gt;twd-js&lt;/a&gt;, and we treat its own accessibility as a first-class requirement, not a nice-to-have. A tool whose entire job is to help people ship correct software has no business locking anyone out of using it. So the sidebar UI is fully keyboard navigable with a logical focus order and no traps, the focus indicator is visible in both light and dark themes, and text and controls meet WCAG contrast ratios. We had it audited by an external accessibility consultancy against WCAG 2.2 Level AA, and it came back at full conformance. You can read the &lt;a rel=&quot;nofollow&quot; href=&quot;https://twd.dev/accessibility-statement&quot;&gt;accessibility statement&lt;/a&gt; for the full scope and methodology.&lt;/p&gt;
&lt;h3 id=&quot;try-it&quot;&gt;Try it&lt;/h3&gt;
&lt;p&gt;Both approaches are just tests, running in your real app, in a real browser:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install twd-js
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Docs: &lt;a rel=&quot;nofollow&quot; href=&quot;https://twd.dev/&quot;&gt;twd.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The axe-core helper and the validation-state example live in the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/BRIKEV/twd&quot;&gt;tutorial repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source and issues: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/BRIKEV/twd&quot;&gt;github.com/BRIKEV/twd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Point a scan at the page that loads if you want a baseline. Then write the one that clicks the button first. That second test is the one your users were waiting for.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21693/automated-accessibility-testing-axe-core-keyboard-navigation-and-wcag-in-the-browser</guid>
<pubDate>Wed, 01 Jul 2026 12:52:42 +0000</pubDate>
</item>
<item>
<title>As We May Code: Why Software Is a Human Problem Dressed in Logic</title>
<link>https://coderlegion.com/20652/as-we-may-code-why-software-is-a-human-problem-dressed-in-logic</link>
<description>&lt;p&gt;&lt;em&gt;On interfaces, accessibility, wicked problems, and the illusion that machines can write code for us.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The first time I used NotebookLM, I fed it an essay I'd been meaning to read for months: Vannevar Bush's &quot;As We May Think,&quot; published in &lt;em&gt;The Atlantic&lt;/em&gt; in 1945. I knew it was the essay that predicted the internet. What I didn't know was that it was about something much more fundamental.&lt;/p&gt;
&lt;p&gt;Bush's central concern was that humanity generates knowledge faster than any individual can absorb it — that the collective output of science, culture, and experience had outgrown the tools we had for navigating it. He proposed a machine called the Memex to help: not a machine that thinks for us, but one that helps us think. A tool for making associative trails through the ever-expanding record of human knowledge, mirroring the way thought actually moves — by meaning, by context, not by alphabetical index.&lt;/p&gt;
&lt;p&gt;The synchronicity wasn't lost on me. I was using an AI tool to navigate a piece of that very record, to absorb an essay I hadn't found the time to read. And the tool worked. It helped me absorb the essay faster, make connections, follow the thread. It was doing, in a small way, what Bush imagined eighty years ago: amplifying my thought, not replacing it.&lt;/p&gt;
&lt;p&gt;But here's what stayed with me. Bush wasn't just predicting a technology. He was drawing a line. On one side: technology that extends what humans can do. On the other: technology that substitutes for what humans do. He was firmly, explicitly, on the side of amplification.&lt;/p&gt;
&lt;p&gt;That line matters now more than ever. Because there is a quiet assumption that most people hold about software: that it is, fundamentally, a problem of logic. You define what you want, you write the rules, the machine executes them. Input, process, output. Deterministic. Clean.&lt;/p&gt;
&lt;p&gt;This assumption is wrong. And it is the root of a much larger misunderstanding — one that shapes how we think about AI-generated code, about the role of developers, and about what it actually means to build something that people use.&lt;/p&gt;
&lt;h3 id=&quot;i-the-deterministic-illusion&quot;&gt;I. The deterministic illusion&lt;/h3&gt;
&lt;p&gt;Software runs on deterministic machines. Given the same input, a CPU will produce the same output, every single time. This is a fact about execution, and it is what makes computers useful.&lt;/p&gt;
&lt;p&gt;But somewhere along the way, we confused the nature of &lt;em&gt;running&lt;/em&gt; software with the nature of &lt;em&gt;creating&lt;/em&gt; it. Because the machine is deterministic, we assumed that building software must also be a deterministic process: define the requirements, translate them into code, compile, ship. A pipeline. A factory.&lt;/p&gt;
&lt;p&gt;Fred Brooks dismantled this illusion in 1986. In &quot;No Silver Bullet,&quot; he distinguished between two kinds of complexity. Accidental complexity is what we create ourselves — the friction of our tools, the limitations of our languages, the overhead of our processes. This is the complexity that better tools can eliminate. Essential complexity is something else entirely. It comes from the problem itself: from what the software needs to do, for whom, in what context, under what constraints. No tool can remove it, because it is not an artifact of the process — it is the substance of it.&lt;/p&gt;
&lt;p&gt;Brooks's claim was radical and, forty years later, still widely misunderstood: the hard part of software is not writing code. The hard part is deciding what to build. And that decision is irreducibly human.&lt;/p&gt;
&lt;p&gt;In 1992, Jack Reeves took this further with an essay that should be required reading for anyone who writes code. In &quot;What Is Software Design?&quot;, he argued that source code is not the construction of software — it is the &lt;em&gt;design&lt;/em&gt;. Compiling is construction: it's cheap, it's automatic, you press a button. But the act of writing code? That is a design activity. It is creative, contextual, full of trade-offs and judgment calls. It is, in the deepest sense, a human endeavor.&lt;/p&gt;
&lt;p&gt;If code is design, then the developer is not a technician executing a blueprint. The developer is a designer making decisions that directly shape how people experience a product. Every line of code carries assumptions about who will use it, how, and why.&lt;/p&gt;
&lt;h3 id=&quot;ii-interfaces-are-wicked-problems&quot;&gt;II. Interfaces are wicked problems&lt;/h3&gt;
&lt;p&gt;In 1973, Horst Rittel and Melvin Webber published a paper that gave vocabulary to something designers and planners had always felt but could never quite name. They called it &quot;wicked problems&quot; — not wicked in the moral sense, but in the sense of being deeply resistant to the kind of linear, analytical problem-solving that works so well in engineering and mathematics.&lt;/p&gt;
&lt;p&gt;Wicked problems have no definitive formulation. They have no stopping rule — no signal that tells you the problem is solved. Their solutions are not true or false, only better or worse. Every attempt at a solution changes the problem itself. And they are essentially unique: what works in one context may fail in another.&lt;/p&gt;
&lt;p&gt;User interfaces are wicked problems. Not metaphorically — structurally. Consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is no single correct interface for any given task. The &quot;right&quot; design depends on the user, their device, their abilities, their context, their mental model, their culture, their patience, their internet connection.&lt;/li&gt;
&lt;li&gt;Interfaces are never finished. Every new feature, every new user, every new device introduces new interactions, new edge cases, new failures.&lt;/li&gt;
&lt;li&gt;You cannot test your way to a perfect interface. You can only test your way to a &lt;em&gt;less wrong&lt;/em&gt; one, because the space of human variability is infinite.&lt;/li&gt;
&lt;li&gt;Every design decision carries consequences that ripple outward. A color choice excludes people with low vision. A navigation pattern confuses people using screen readers. A gesture-based interaction locks out people with motor disabilities. A modal dialog that &quot;works&quot; for sighted users traps keyboard users in an invisible cage — or, conversely, lets their focus escape into a background that is supposed to be inert.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Richard Buchanan connected wicked problems to design thinking in 1992, arguing that what many people dismiss as &quot;impossible&quot; may actually be a failure of imagination — one that better design thinking can overcome. Don Norman, through decades of work from &lt;em&gt;The Design of Everyday Things&lt;/em&gt; to &lt;em&gt;Living with Complexity&lt;/em&gt;, showed that the complexity of our tools must match the complexity of our lives. Simplifying an interface beyond a certain point doesn't make it better — it makes it dishonest about the problem it's trying to solve.&lt;/p&gt;
&lt;p&gt;The temptation, always, is to treat interfaces as tame problems. Define the requirements. Implement the spec. Check the boxes. Ship. But the users were never part of the spec, not really — not in all their unpredictable, embodied, diverse humanity.&lt;/p&gt;
&lt;h3 id=&quot;iii-html-the-most-human-language-in-code&quot;&gt;III. HTML: the most human language in code&lt;/h3&gt;
&lt;p&gt;Here is something people rarely say about HTML: it is beautiful.&lt;/p&gt;
&lt;p&gt;Not in the way that an elegant algorithm is beautiful, or a well-factored function. HTML is beautiful because it is a language of &lt;em&gt;meaning&lt;/em&gt;. It is a declarative API — arguably the most successful one ever created — whose purpose is not to instruct a machine but to communicate intent.&lt;/p&gt;
&lt;p&gt;When you write &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;, you are not telling the browser to render a box. You are saying: this is navigation. When you write &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, you are not just creating a clickable element — you are declaring that this element is interactive, that it can receive focus, that it responds to keyboard events, that it announces itself to assistive technology as something a person can press. A &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; carries decades of human expectations in six characters.&lt;/p&gt;
&lt;p&gt;HTML is not a programming language in the classical sense. It has no conditionals, no loops, no variables. And yet it may be the most consequential language on the web, because it is the layer where machine logic meets human meaning. It is the interface between the accessibility tree and the person. Between the browser and the body.&lt;/p&gt;
&lt;p&gt;And it is also, without question, the most widely written and most widely written &lt;em&gt;poorly&lt;/em&gt; language on the web. Because it is forgiving. Because a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; with an &lt;code&gt;onclick&lt;/code&gt; looks the same as a &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; — to sighted users, on a good day, with a mouse. The damage is invisible until someone tries to navigate with a keyboard, or a screen reader, or a switch device. And by then, the developer has moved on.&lt;/p&gt;
&lt;p&gt;This is the paradox: the language that carries the most human meaning is treated as though it carries the least. Because it &quot;works.&quot; Because it renders. Because the tests pass.&lt;/p&gt;
&lt;h3 id=&quot;iv-what-the-machines-see&quot;&gt;IV. What the machines see&lt;/h3&gt;
&lt;p&gt;In 2024, Michael Fairchild at Microsoft built a tool to answer a simple question: when you ask an LLM to generate HTML for common UI components, how accessible is the result?&lt;/p&gt;
&lt;p&gt;The answer, documented in the A11y LLM Eval project, is sobering. Without explicit accessibility instructions, most models score near zero. The average across all tested models is around 10%. Even the best-performing model only passes 41% of tests. And these are not obscure edge cases — they are fundamental patterns like forms, navigation, dialogs, and data tables.&lt;/p&gt;
&lt;p&gt;An important caveat: these percentages do not mean &quot;41% accessible according to WCAG.&quot; The tool evaluates code against axe-core (an automated accessibility scanner) plus a set of custom assertions per component. But automated tools can only catch a fraction of real accessibility barriers — perhaps 30-40% of WCAG criteria. Everything that requires human judgment — whether the reading order makes sense, whether an alt text is actually meaningful, whether a focus management pattern is appropriate for the context, whether the right ARIA design pattern was chosen — is beyond what any scanner can measure. So when we say &quot;90% pass rate with good instructions,&quot; we mean 90% of the &lt;em&gt;automatable&lt;/em&gt; tests pass. The full picture still requires a human who understands what accessible means.&lt;/p&gt;
&lt;p&gt;Fairchild is explicit about this: these tests do not fully evaluate WCAG or guarantee accessible results. Manual testing remains essential.&lt;/p&gt;
&lt;p&gt;With that caveat in mind, the results are still revealing. Why do models perform so poorly by default? Because approximately 95% of websites have accessibility issues. The training data is the web, and the web is broken. LLMs don't learn what HTML &lt;em&gt;should&lt;/em&gt; be — they learn what HTML &lt;em&gt;is&lt;/em&gt;, statistically. And statistically, it's &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; soup.&lt;/p&gt;
&lt;p&gt;But Fairchild's research reveals something even more interesting. When you add explicit accessibility instructions — custom instruction files that tell the model to use semantic HTML, follow WCAG, ensure keyboard support — the automatable pass rates jump dramatically. A minimal instruction (&quot;All output MUST be accessible&quot;) alone produced an 18 percentage point improvement. Detailed, expert-level guidance pushed some models from near-zero to over 90%.&lt;/p&gt;
&lt;p&gt;Think about what this means. The models &lt;em&gt;can&lt;/em&gt; generate code that passes automated checks. The knowledge is somewhere in the weights. But without a human explicitly asking for it — without someone who understands accessibility framing the problem — the model defaults to the statistical average. The inaccessible average. And even at its best, it still cannot evaluate the things that matter most: the human things, the contextual things, the wicked things.&lt;/p&gt;
&lt;p&gt;This is not a bug. This is the fundamental nature of what LLMs do: they index. They find the most probable pattern given the input. Vannevar Bush warned us about this in 1945 — that the artificiality of indexing systems would always be a poor substitute for the associative, contextual, meaning-driven way humans actually think. LLMs are the most sophisticated indexing system ever built. They are extraordinary at finding what is common. They are structurally incapable of understanding what is &lt;em&gt;right&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;v-the-old-tension-resurfaced&quot;&gt;V. The old tension, resurfaced&lt;/h3&gt;
&lt;p&gt;There is a deeper reason why AI struggles with interfaces and accessibility, beyond training data. Interfaces are fundamentally human problems. They are wicked problems where context, intent, and user behavior all shape what the right solution looks like.&lt;/p&gt;
&lt;p&gt;A modal is not a modal because of its markup. It is a modal because of what it means to the user in that moment: stop, pay attention, deal with this before you continue. A &lt;code&gt;role=&quot;status&quot;&lt;/code&gt; is not a technical annotation — it is a social contract: this information changed, and you should know, but I won't interrupt you. These are not pattern-matching problems. They are problems of human communication, encoded in HTML.&lt;/p&gt;
&lt;p&gt;AI approaches this as a statistical exercise: given this prompt, what code is most likely? But accessibility — and interface design more broadly — requires understanding &lt;em&gt;why&lt;/em&gt; a pattern exists, not just &lt;em&gt;what&lt;/em&gt; it looks like. It requires knowing that a person using a screen reader will navigate by headings, not linearly. That a person with low vision needs more than a change in opacity to perceive a state change. That a person with a motor disability needs every interactive element to be reachable by keyboard. That these are not edge cases — they are the full spectrum of how humans meet technology.&lt;/p&gt;
&lt;p&gt;Kat Holmes calls this the &quot;mismatch&quot; — the idea that disability is not in the person but in the gap between the person and the design. Sara Hendren goes further: nearly everything we build is assistive technology, designed to bridge the gap between body and world. The question is whether we acknowledge this or pretend the gap doesn't exist.&lt;/p&gt;
&lt;p&gt;What AI brings to the table is not a new problem. It is an old tension, resurfaced with new urgency: the temptation to reduce a human problem to pure logic. Herbert Simon dreamed of this in &lt;em&gt;The Sciences of the Artificial&lt;/em&gt; — a world where design could be formalized, optimized, computed. Fred Brooks answered him: the complexity of software is essential, not accidental. You cannot abstract it away without abstracting away its meaning.&lt;/p&gt;
&lt;p&gt;The illusion is seductive. If software were truly deterministic — if interfaces were tame problems with optimal solutions — then of course machines could write them better than we can. They are faster, cheaper, tireless. But interfaces are not tame. They are wicked. They involve bodies, contexts, cultures, disabilities, emotions, expectations. They involve &lt;em&gt;people&lt;/em&gt;. And people resist reduction to statistics.&lt;/p&gt;
&lt;h3 id=&quot;vi-as-we-may-code&quot;&gt;VI. As we may code&lt;/h3&gt;
&lt;p&gt;I started this essay describing a small moment: using an AI tool to read a text about the limits of human processing. The tool helped. It genuinely did. It compressed time, surfaced connections, let me absorb an 80-year-old essay in a fraction of the time it would have taken otherwise. Bush would have recognized it as a Memex — a machine that extends human thought.&lt;/p&gt;
&lt;p&gt;But the understanding that came from that essay — the realization that its argument about amplification versus substitution was directly relevant to my own work in accessibility and code — that was not something the tool provided. That was association. That was meaning. That was the intricate web of trails carried by the cells of a brain that has spent years thinking about HTML, about screen readers, about the gap between what we build and who we build it for.&lt;/p&gt;
&lt;p&gt;Eighty years after Bush, we have tools that can generate code at extraordinary speed. They can produce a login form in seconds, a dashboard in minutes, an entire landing page before you finish your coffee. But speed is not understanding. And production is not design.&lt;/p&gt;
&lt;p&gt;The question Bush asked is still open: does our technology amplify human thought, or does it replace it? With LLMs applied to code, we are in danger of choosing the second option — not by conscious decision, but by the quiet assumption that software is a deterministic problem that machines can solve. It isn't. It never has been.&lt;/p&gt;
&lt;p&gt;The developers, designers, and accessibility specialists who understand this are not being replaced by AI. They are becoming more essential. Because someone needs to write the custom instructions that turn a 0% automated pass rate into a 90% one — and then do the manual work that covers everything automation can't. Someone needs to know that a &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; is not just a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; with a backdrop. Someone needs to understand that the user on the other side of the screen might not see, might not hear, might not use a mouse, might not think the way the designer assumed — and that this is not an edge case but the human condition.&lt;/p&gt;
&lt;p&gt;HTML is a declarative API of meaning. The most successful one ever built. It was designed to be read by machines and understood by people. It is, in its quiet way, a bridge between logic and humanity. And the decision of which element to use — &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; — is never a technical decision. It is a decision about who gets to participate.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Bush, V. (1945). &quot;As We May Think.&quot; &lt;em&gt;The Atlantic Monthly&lt;/em&gt;, July 1945.&lt;/li&gt;
&lt;li&gt;Rittel, H.W. &amp;amp; Webber, M.M. (1973). &quot;Dilemmas in a General Theory of Planning.&quot; &lt;em&gt;Policy Sciences&lt;/em&gt;, 4(2), 155–169.&lt;/li&gt;
&lt;li&gt;Brooks, F. (1986). &quot;No Silver Bullet: Essence and Accident in Software Engineering.&quot; &lt;em&gt;Proceedings of the IFIP Tenth World Computing Conference.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Reeves, J.W. (1992). &quot;What Is Software Design?&quot; &lt;em&gt;The C++ Journal.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Buchanan, R. (1992). &quot;Wicked Problems in Design Thinking.&quot; &lt;em&gt;Design Issues&lt;/em&gt;, 8(2), 5–21.&lt;/li&gt;
&lt;li&gt;Norman, D. (2013). &lt;em&gt;The Design of Everyday Things.&lt;/em&gt; Revised and expanded edition. Basic Books.&lt;/li&gt;
&lt;li&gt;Norman, D. (2010). &lt;em&gt;Living with Complexity.&lt;/em&gt; MIT Press.&lt;/li&gt;
&lt;li&gt;Simon, H. (1996). &lt;em&gt;The Sciences of the Artificial.&lt;/em&gt; 3rd edition. MIT Press.&lt;/li&gt;
&lt;li&gt;Holmes, K. (2018). &lt;em&gt;Mismatch: How Inclusion Shapes Design.&lt;/em&gt; MIT Press.&lt;/li&gt;
&lt;li&gt;Hendren, S. (2020). &lt;em&gt;What Can a Body Do? How We Meet the Built World.&lt;/em&gt; Riverhead Books.&lt;/li&gt;
&lt;li&gt;Fairchild, M. (2026). &quot;Embedding Accessibility into AI-based Software Development.&quot; Tool: github.com/microsoft/a11y-llm-eval.&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/20652/as-we-may-code-why-software-is-a-human-problem-dressed-in-logic</guid>
<pubDate>Mon, 15 Jun 2026 21:29:55 +0000</pubDate>
</item>
<item>
<title>Free upcoming accessibility education events in May</title>
<link>https://coderlegion.com/16836/free-upcoming-accessibility-education-events-in-may</link>
<description>&lt;h3 id=&quot;funka-foundation-accessible-name-make-it-or-break-it-&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://stiftelsenfunka.org/whats-up/free-friday-webinars/accessible-name-make-it-or-break-it/&quot;&gt;Funka Foundation: Accessible name – make it or break it&lt;/a&gt; &lt;/h3&gt;
&lt;p&gt;Friday, May 8, 13.30-14.00 CEST&lt;/p&gt;
&lt;p&gt;Every button, link, and image on your interface must have an accessible name. Get it right and assistive technology users can find it, understand it, and activate it. Get it wrong and you have locked them out completely.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;trusted-tester-study-group-8-sensory-characteristics-and-contrast-tables&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/events/details/google-gdg-vienna-presents-dhs-trusted-tester-study-group-8-sensory-characteristics-and-contrast-tables/&quot;&gt;Trusted Tester Study Group 8: Sensory Characteristics and Contrast + Tables&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Friday May 15, 4:00 – 5:00 PM (GMT+2)&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;accessible-does-not-equal-equitable-real-human-experience-vs-compliance&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://us06web.zoom.us/webinar/register/WN_Lx91kTk9TtqvMmhdLS_dGQ&quot;&gt;Accessible does not equal Equitable: Real Human Experience vs Compliance&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday, 20 May | 10 AM AEST&lt;/p&gt;
&lt;p&gt;In this webinar to celebrate Global Accessibility Awareness Day (GAAD), we explore the uncomfortable truth that a product can be fully compliant and still fail the people it’s meant to support. Drawing on real user experiences, we’ll expose the hidden friction that standards don’t capture, from cognitive overload to interaction fatigue and loss of confidence.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;all-the-questions-you-wanted-to-ask-during-gaad---but-didn-t-get-the-chance&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.eventbrite.co.uk/e/digital-accessibility-experts-live-tickets-111949261254&quot;&gt;All the questions you wanted to ask during GAAD - but didn’t get the chance&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday 28th May 4pm UK-time&lt;/p&gt;
&lt;p&gt;Global Accessibility Awareness Day (GAAD) on Thursday 21st May is always energising. But once the week is over, the momentum can fade. The questions people meant to ask never get asked. The practical “what do we actually do now?” conversations don’t happen.&lt;/p&gt;
&lt;p&gt;So the week after GAAD Hassell Inclusion is hosting an open Q&amp;amp;A session with many seasoned accessibility experts, so you can ask the questions you need to make accessibility for 2026 not just for GAAD.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16836/free-upcoming-accessibility-education-events-in-may</guid>
<pubDate>Wed, 06 May 2026 07:56:35 +0000</pubDate>
</item>
<item>
<title>I Built a Free Accessibility Auditor That Actually Passes Its Own Audit</title>
<link>https://coderlegion.com/13353/i-built-a-free-accessibility-auditor-that-actually-passes-its-own-audit</link>
<description>&lt;p&gt;Most free accessibility tools have an accessibility problem.&lt;/p&gt;
&lt;p&gt;WAVE is a browser extension with no keyboard-only workflow. Lighthouse runs in Chrome DevTools, a tool screen reader users navigate with workarounds. axe DevTools free tier gives you findings with no WCAG mapping unless you pay.&lt;/p&gt;
&lt;p&gt;I'm a CIS student in Grand Rapids, MI doing freelance web accessibility work on the side. I needed a tool I could actually use in client engagements — structured output, WCAG-mapped findings, severity grouping — without paying $200/month for a platform.&lt;/p&gt;
&lt;p&gt;So I built one.&lt;/p&gt;
&lt;p&gt;What It Does&lt;br&gt;
The MAS Accessibility Audit Toolkit is a free, open-source desktop GUI built in Python and Tkinter. Paste a URL, click Run Audit, get a structured findings report in under 60 seconds.&lt;/p&gt;
&lt;p&gt;It currently runs 14 WCAG 2.1 AA check modules:&lt;/p&gt;
&lt;p&gt;Alt text detection&lt;br&gt;
Heading structure (h1 count + descent order)&lt;br&gt;
Form label association&lt;br&gt;
Language attribute presence&lt;br&gt;
Tabindex abuse (positive values)&lt;br&gt;
Empty links and empty buttons&lt;br&gt;
Autoplay media detection&lt;br&gt;
PDF link warnings (no user notice)&lt;br&gt;
Page title check&lt;br&gt;
Duplicate ID detection&lt;br&gt;
Landmark roles (main, nav, header, footer)&lt;br&gt;
Skip navigation link check&lt;br&gt;
Accessibility patterns (generic link text, placeholder-as-label, onclick on non-interactive elements, missing table headers, blank target)&lt;br&gt;
62 more modules are in the queue — including Color Contrast, Screen Reader Simulation, Platform Detection, and Touch Target CSS checks.&lt;/p&gt;
&lt;p&gt;The Part I'm Most Proud Of&lt;br&gt;
The auditor itself is fully accessible. It seemed like the minimum viable requirement — an accessibility tool that doesn't pass its own audit is indefensible.&lt;/p&gt;
&lt;p&gt;Here's what that means in practice:&lt;/p&gt;
&lt;p&gt;Four themes: Dark, Light, High Contrast, CVD-Safe&lt;/p&gt;
&lt;p&gt;CVD simulation modes: Protanopia, Deuteranopia, Tritanopia, Monochrome — inside the tool, so you can see what your color choices look like to users with color vision deficiencies before you ship&lt;/p&gt;
&lt;p&gt;Dyslexia font presets — Normal, Large, X-Large — persisted across sessions&lt;/p&gt;
&lt;p&gt;Font family and size controls — 14pt to 20pt, user-adjustable, persisted&lt;/p&gt;
&lt;p&gt;Word spacing and line height sliders — persisted&lt;/p&gt;
&lt;p&gt;Screen reader announcements — on theme change, scan complete, and error states&lt;/p&gt;
&lt;p&gt;Non-color prefix cues throughout — [!] for errors, [OK] for passes, [&amp;gt;] for informational — because color alone isn't enough&lt;/p&gt;
&lt;p&gt;None of this exists in WAVE, Lighthouse, or the free tier of any tool I've used. An accessible auditor that audits for accessibility is the whole point.&lt;/p&gt;
&lt;p&gt;What It Can't Do&lt;br&gt;
Automated tools catch roughly 30–40% of WCAG failures. The MAS Toolkit is in that same range. It's static HTML analysis — it can't test keyboard interaction, evaluate screen reader announcements in real assistive tech, or assess cognitive load through user testing.&lt;/p&gt;
&lt;p&gt;It's a starting point. A fast, structured, WCAG-mapped starting point — but not a replacement for manual review.&lt;/p&gt;
&lt;p&gt;I say this upfront in every client engagement. The audit report documents it explicitly. Honesty about scope is a feature, not a disclaimer.&lt;/p&gt;
&lt;p&gt;Where It's Going&lt;br&gt;
The next phase of the build adds platform detection — identifying whether a client's site is on a locked CMS (Squarespace, Wix, res-menu.net) and flagging every finding with a PLATFORM RESTRICTED marker. Because there's no point handing a developer a remediation roadmap for a site they can't modify.&lt;/p&gt;
&lt;p&gt;After that: color contrast checking, viewport meta checks, touch target CSS checks, and eventually a web SaaS version with Stripe billing and team access.&lt;/p&gt;
&lt;p&gt;Try It&lt;br&gt;
GitHub: github.com/MosleyAutomationSystems/MAS-audit-toolkit&lt;/p&gt;
&lt;p&gt;MIT licensed. Free to use, fork, and build on.&lt;/p&gt;
&lt;p&gt;If you're doing accessibility work and have feedback on the module list, the findings format, or anything else — I'm building this in public and I want to know what's missing.&lt;/p&gt;
&lt;p&gt;Damascus (Bear) Mosley — Lead Developer &amp;amp; Accessibility Specialist, Mosley Automation Systems · Grand Rapids, MI&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13353/i-built-a-free-accessibility-auditor-that-actually-passes-its-own-audit</guid>
<pubDate>Mon, 23 Mar 2026 02:40:58 +0000</pubDate>
</item>
<item>
<title>20 Unknown HTML Tags That Will Make You Write Less And Better Code</title>
<link>https://coderlegion.com/12775/20-unknown-html-tags-that-will-make-you-write-less-and-better-code</link>
<description>&lt;p&gt;Ah, the classic developer trap.&lt;/p&gt;
&lt;p&gt;We spend days fighting with CSS transitions, ARIA roles, and &lt;code&gt;useState&lt;/code&gt; toggles for a custom &quot;accordion&quot; or &quot;progress bar,&quot; only to find out the W3C solved this a decade ago while we weren't looking. &lt;/p&gt;
&lt;p&gt;I’ll admit it—I’ve been that dev. I’ve built &quot;div-soups&quot; that looked like a search bar to me but meant absolutely nothing to a screen reader.&lt;/p&gt;
&lt;p&gt;But here is the truth: &lt;strong&gt;The best code is the code you don’t have to write.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before we dive in, if you want to see if you &lt;em&gt;actually&lt;/em&gt; know your stuff (HTML, CSS, Git, and more), I’ve been working on a project called &lt;a rel=&quot;nofollow&quot; href=&quot;https://ficus-web.netlify.app/&quot;&gt;Ficus&lt;/a&gt;. &lt;em&gt;C'est en français pour l'instant&lt;/em&gt;, because I wanted to support the local community first! It’s full of quizzes on these exact &quot;hidden&quot; tags and weird CSS properties to help you level up.&lt;/p&gt;
&lt;p&gt;Alright, enough intro. Let’s look at the tags that are going to make your DOM way smarter.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;the-semantic-seo-power-ups&quot;&gt;The Semantic SEO Power-Ups&lt;/h4&gt;
&lt;h5 id=&quot;-lt-search-gt-&quot;&gt;&lt;code&gt;&amp;lt;search&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;What problem it solves:&lt;/strong&gt;&lt;br&gt;
For years, we just wrapped search forms in a generic &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;. Screen readers had no native way to identify &quot;This is the search part of the app&quot; without adding manual &lt;code&gt;role=&quot;search&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Old way:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;div role=&quot;search&quot;&amp;gt;
  &amp;lt;form&amp;gt;...&amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;search&amp;gt;
  &amp;lt;form action=&quot;/search&quot;&amp;gt;
    &amp;lt;input name=&quot;q&quot;&amp;gt;
  &amp;lt;/form&amp;gt;
&amp;lt;/search&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;-lt-time-gt-&quot;&gt;&lt;code&gt;&amp;lt;time&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;What problem it solves:&lt;/strong&gt;&lt;br&gt;
Search engines are smart, but they aren't psychics. If you write &quot;Next Monday,&quot; they don't know the specific date.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;time datetime=&quot;2026-03-11&quot;&amp;gt;March 11th&amp;lt;/time&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Massive SEO win. It allows search engines to index your events or post dates accurately.&lt;/p&gt;
&lt;h5 id=&quot;-lt-address-gt-&quot;&gt;&lt;code&gt;&amp;lt;address&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;What problem it solves:&lt;/strong&gt;&lt;br&gt;
It’s not just for physical mail! It’s for the &lt;em&gt;contact information&lt;/em&gt; of the nearest &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; or the whole document.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;address&amp;gt;
  Contact the author at &amp;lt;a href=&quot;mailto:*Emails are not allowed*&quot;&amp;gt;*Emails are not allowed*&amp;lt;/a&amp;gt;
&amp;lt;/address&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-data-amp-precision-layout&quot;&gt;️ Data &amp;amp; Precision Layout&lt;/h4&gt;
&lt;h5 id=&quot;-lt-meter-gt-vs-lt-progress-gt-&quot;&gt;&lt;code&gt;&amp;lt;meter&amp;gt;&lt;/code&gt; vs. &lt;code&gt;&amp;lt;progress&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;The Confusion:&lt;/strong&gt;&lt;br&gt;
Most devs use &lt;code&gt;&amp;lt;progress&amp;gt;&lt;/code&gt; for everything. But they have two completely different semantic jobs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;progress value=&quot;70&quot; max=&quot;100&quot;&amp;gt;&amp;lt;/progress&amp;gt;

&amp;lt;meter min=&quot;0&quot; max=&quot;100&quot; low=&quot;30&quot; high=&quot;80&quot; optimum=&quot;90&quot; value=&quot;95&quot;&amp;gt;&amp;lt;/meter&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; A screen reader announces &lt;code&gt;&amp;lt;progress&amp;gt;&lt;/code&gt; as &quot;Loading...&quot; but announces &lt;code&gt;&amp;lt;meter&amp;gt;&lt;/code&gt; as a &quot;Gauge.&quot; Using the right one prevents user confusion.&lt;/p&gt;
&lt;h5 id=&quot;-lt-data-gt-amp-lt-abbr-gt-&quot;&gt;️ &lt;code&gt;&amp;lt;data&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;abbr&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;br&gt;
You have a price or a product ID that looks great to a human, but a computer has no idea what the &quot;Machine-readable&quot; version is.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;data value=&quot;7721&quot;&amp;gt;Premium Subscription&amp;lt;/data&amp;gt;

&amp;lt;p&amp;gt;I love &amp;lt;abbr title=&quot;Cascading Style Sheets&quot;&amp;gt;CSS&amp;lt;/abbr&amp;gt;!&amp;lt;/p&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; &lt;code&gt;&amp;lt;data&amp;gt;&lt;/code&gt; links a human-readable name to a machine-readable value (great for web scrapers). &lt;code&gt;&amp;lt;abbr&amp;gt;&lt;/code&gt; ensures screen readers can explain what an acronym stands for.&lt;/p&gt;
&lt;h5 id=&quot;-lt-figcaption-gt-&quot;&gt;️ &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;The Old Way:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;div class=&quot;img-box&quot;&amp;gt;
  &amp;lt;img src=&quot;cat.jpg&quot;&amp;gt;
  &amp;lt;p&amp;gt;A cute cat&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;figure&amp;gt;
  &amp;lt;img src=&quot;cat.jpg&quot; alt=&quot;Orange tabby sleeping&quot;&amp;gt;
  &amp;lt;figcaption&amp;gt;Fig 1: Simba, after a long day of doing nothing.&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-precision-typography-the-grammar-tags-&quot;&gt;✍️ Precision Typography (The &quot;Grammar&quot; Tags)&lt;/h4&gt;
&lt;h5 id=&quot;-lt-ins-gt-amp-lt-del-gt-&quot;&gt;&lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;br&gt;
Showing &quot;Track Changes&quot; or a sale price. Usually, we just use CSS &lt;code&gt;text-decoration: line-through&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;p&amp;gt;The price is &amp;lt;del&amp;gt;$50&amp;lt;/del&amp;gt; &amp;lt;ins&amp;gt;$30&amp;lt;/ins&amp;gt;!&amp;lt;/p&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; A screen reader will say &quot;Deleted: 50 dollars. Inserted: 30 dollars.&quot; If you only use CSS, a blind user just hears &quot;50 dollars 30 dollars.&quot;&lt;/p&gt;
&lt;h5 id=&quot;-lt-mark-gt-amp-lt-dfn-gt-&quot;&gt;&lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;dfn&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;p&amp;gt;The &amp;lt;dfn id=&quot;html-def&quot;&amp;gt;HTML&amp;lt;/dfn&amp;gt; is the backbone of the web.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;You searched for &amp;lt;mark&amp;gt;backbone&amp;lt;/mark&amp;gt;.&amp;lt;/p&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; &lt;code&gt;&amp;lt;dfn&amp;gt;&lt;/code&gt; identifies the &lt;em&gt;defining instance&lt;/em&gt; of a term for SEO. &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; means &quot;relevant to the user's current activity&quot; (like search highlights).&lt;/p&gt;
&lt;h5 id=&quot;-lt-kbd-gt-amp-lt-code-gt-&quot;&gt;⌨️ &lt;code&gt;&amp;lt;kbd&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;p&amp;gt;Press &amp;lt;kbd&amp;gt;Cmd&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt; to save your &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; It distinguishes between what the user &lt;em&gt;does&lt;/em&gt; (&lt;code&gt;kbd&lt;/code&gt;) and what the computer &lt;em&gt;shows&lt;/em&gt; (&lt;code&gt;code&lt;/code&gt;).&lt;/p&gt;
&lt;h5 id=&quot;-lt-ruby-gt-with-lt-rt-gt-and-lt-rp-gt-&quot;&gt;&lt;code&gt;&amp;lt;ruby&amp;gt;&lt;/code&gt; (with &lt;code&gt;&amp;lt;rt&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;rp&amp;gt;&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Annotations for pronunciation, usually for East Asian characters.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;ruby&amp;gt;AAA &amp;lt;rt&amp;gt;aaa&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;interactive-amp-internationalization&quot;&gt;Interactive &amp;amp; Internationalization&lt;/h4&gt;
&lt;h5 id=&quot;-lt-details-gt-amp-lt-summary-gt-&quot;&gt;&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;br&gt;
Building an &quot;Accordion&quot; usually requires 50 lines of JS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;details&amp;gt;
  &amp;lt;summary&amp;gt;What is Ficus?&amp;lt;/summary&amp;gt;
  C'est une plateforme pour tester vos connaissances en dev !
&amp;lt;/details&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Zero JavaScript. It’s accessible and keyboard-navigable by default.&lt;/p&gt;
&lt;h5 id=&quot;-lt-bdi-gt-amp-lt-bdo-gt-&quot;&gt;↔️ &lt;code&gt;&amp;lt;bdi&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;bdo&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;User &amp;lt;bdi&amp;gt;utilisateur&amp;lt;/bdi&amp;gt;: 15 points&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;User &amp;lt;bdi&amp;gt;Ian&amp;lt;/bdi&amp;gt;: 12 points&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; &lt;code&gt;&amp;lt;bdi&amp;gt;&lt;/code&gt; (Bi-Directional Isolation) prevents right-to-left text (like Arabic) from messing up the layout of the surrounding left-to-right text.&lt;/p&gt;
&lt;h5 id=&quot;-lt-output-gt-&quot;&gt;&lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;form oninput=&quot;res.value=parseInt(a.value)+parseInt(b.value)&quot;&amp;gt;
  &amp;lt;input type=&quot;number&quot; id=&quot;a&quot;&amp;gt; + &amp;lt;input type=&quot;number&quot; id=&quot;b&quot;&amp;gt;
  = &amp;lt;output name=&quot;res&quot; for=&quot;a b&quot;&amp;gt;&amp;lt;/output&amp;gt;
&amp;lt;/form&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; It semantically defines a &quot;live&quot; result, alerting assistive tech when the number changes.&lt;/p&gt;
&lt;h5 id=&quot;-lt-wbr-gt-&quot;&gt;&lt;code&gt;&amp;lt;wbr&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A &quot;Word Break Opportunity.&quot; It tells the browser &quot;If you have to break this long string into two lines, do it here.&quot; (Perfect for long URLs or file paths).&lt;/p&gt;
&lt;h5 id=&quot;-lt-cite-gt-amp-lt-q-gt-&quot;&gt;&lt;code&gt;&amp;lt;cite&amp;gt;&lt;/code&gt; &amp;amp; &lt;code&gt;&amp;lt;q&amp;gt;&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;p&amp;gt;As &amp;lt;cite&amp;gt;Steve Jobs&amp;lt;/cite&amp;gt; said, &amp;lt;q&amp;gt;Stay hungry.&amp;lt;/q&amp;gt;&amp;lt;/p&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; &lt;code&gt;&amp;lt;cite&amp;gt;&lt;/code&gt; handles the source, and &lt;code&gt;&amp;lt;q&amp;gt;&lt;/code&gt; handles the inline quote (adding quotes automatically based on language).&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;the-bigger-picture&quot;&gt;The Bigger Picture&lt;/h4&gt;
&lt;p&gt;Just like the JavaScript evolution, HTML isn't just about &quot;showing stuff on a screen.&quot; It’s about &lt;strong&gt;meaning&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When you use the right tag:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Your SEO goes up&lt;/strong&gt; because Google knows exactly what your data is.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your A11y is &quot;free&quot;&lt;/strong&gt; because the browser handles the screen reader logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your JS bundle shrinks&lt;/strong&gt; because you don't need a library for a simple accordion.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want to put your knowledge to the test, go check out &lt;a rel=&quot;nofollow&quot; href=&quot;https://ficus-web.netlify.app/&quot;&gt;Ficus&lt;/a&gt;. &lt;em&gt;Allez faire un tour sur le site pour voir si vous pouvez obtenir un score parfait sur le quiz HTML.&lt;/em&gt; It’s the best way to move from &quot;someone who writes code&quot; to an &quot;engineer who masters their craft.&quot;&lt;/p&gt;
&lt;p&gt;Happy coding! . Let me know if you have some tag i might have missed.!!!!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/12775/20-unknown-html-tags-that-will-make-you-write-less-and-better-code</guid>
<pubDate>Wed, 11 Mar 2026 09:31:23 +0000</pubDate>
</item>
<item>
<title>DHS Trusted Tester Certification Study Group: Mastering Dynamic Web Content</title>
<link>https://coderlegion.com/12510/dhs-trusted-tester-certification-study-group-mastering-dynamic-web-content</link>
<description>&lt;p&gt;Last week, we looked at and listened to the symphony of dynamic webpage content. If Session 1 was the quiet theory of Section 508, Session 2 was the loud, blinking, scrolling reality of the web. We tackled the trio of auto-playing audio, moving/blinking content, and auto-updating information, along with a critical detour into flashing content and seizure safety.&lt;/p&gt;
&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;
&lt;p&gt;As always, the slides, transcripts, and a condensed summary are available on the respective GDG Vienna event pages as well. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Laura-A11y/GDG-Study-Group&quot;&gt;GitHub reposit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/redirect?event=video_description&amp;amp;redir_token=QUFFLUhqbGpMWTNMel91RnM1RFU4SExjMUNYYnp3VkpnUXxBQ3Jtc0tuMkdWTmtwU0VNMjlSYUpVTzZTa0wySHhwQWxHMXhUXzJfSFhDbFRqUFoxM2NReHFmSzd6cHlpTkFvS25ucF9lRlc0bGM3bXE2eElMN2VUVk9COS1fUG85cDZnem1QVVU0WTEwakdaNUlhTUdrc1pDOA&amp;amp;q=https%3A%2F%2Fdrive.google.com%2Fdrive%2Ffolders%2F1CGFlwLSGL_tt1RNw12vuuOZEB_jjCaL8%3Fusp%3Ddrive_link&amp;amp;v=NzBo3sU0ki8&quot;&gt;Slides &amp;amp; Transcripts on Google Drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/NzBo3sU0ki8?si=ztp_rjQhzXcnHrXt&quot;&gt;YouTube recordings playlist&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.dhs.gov/trusted-tester&quot;&gt;Trusted‑Tester Portal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.access-board.gov/ict/&quot;&gt;Section 508 Standards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.ssa.gov/accessibility/andi/&quot;&gt;ANDI Bookmarklet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/redirect?event=video_description&amp;amp;redir_token=QUFFLUhqbDM4NDhncHpOeWppdHlTeFotblJIM2duSlQ1Z3xBQ3Jtc0tsZDJRY1J5RUt1enRuRDR4Yjl2cHFmSkpVN1RRSWo2TUFiSkxVTTZUc0pOc243ZG5wVFR5RXJGNlpvRWlZaDFxcVpMMWZnLWVXWmVuZFROQ1NJZFZkc2hFUUREWFh5aWxTdm9tRGdTSk9nQ0xFU0tDUQ&amp;amp;q=https%3A%2F%2Fwww.tpgi.com%2Fcolor-contrast-checker%2F&amp;amp;v=NzBo3sU0ki8&quot;&gt;Color Contrast Checker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/WCAG22/&quot;&gt;WCAG 2.2 Specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;study-group-session-2&quot;&gt;Study Group Session 2&lt;/h2&gt;
&lt;p&gt;The overarching theme of the session was the Numver 3: Whether it’s a button to pause an audio track, a link to stop a scrolling ticker, or a dialog to hide a live update, the Trusted Tester process demands that the mechanism to control these elements be found within the first three interactive elements a user encounters (or within three elements before or after the moving content). &lt;/p&gt;
&lt;p&gt;It’s a strict, pragmatic rule designed to ensure that users aren’t forced to hunt for a “stop” button while being bombarded by sensory input.&lt;/p&gt;
&lt;h3 id=&quot;audio-control-the-three-second-threshold&quot;&gt;Audio Control: The Three-Second Threshold&lt;/h3&gt;
&lt;p&gt;We started with the basics of audio. If audio plays automatically for more than three seconds, a mechanism must exist to pause, stop, or control the volume independently of the system volume. We walked through several examples: a passing case where a “Stop Ad” button sat right at the top of the page, and a failing case where a “Silent” link was buried fifteen elements deep, forcing keyboard users to tab through a maze just to find relief. The lesson? If the mechanism exists but is hard to find, it fails. Accessibility isn’t just about having a feature; it’s about making it reachable.&lt;/p&gt;
&lt;h3 id=&quot;blinking-moving-and-scrolling&quot;&gt;Blinking, Moving, and Scrolling&lt;/h3&gt;
&lt;p&gt;Next, we looked at visual motion. Any content that moves, blinks, or scrolls for more than five seconds in parallel with other content requires a pause, stop, or hide mechanism. We debunked a few myths: a loading spinner that prevents interaction is often considered “essential” and thus exempt, but a scrolling news ticker is not. We also saw a clever example where a blinking “Submit” button could be stopped via a keyboard shortcut (Ctrl+S), proving that text instructions can count as a valid mechanism—if they actually work. Unfortunately, we also saw a failing example where the shortcut was documented but broken, reminding us that documentation doesn’t equal functionality.&lt;/p&gt;
&lt;h3 id=&quot;auto-updating-content-live-regions-and-dialogs&quot;&gt;Auto-Updating Content: Live Regions and Dialogs&lt;/h3&gt;
&lt;p&gt;The session then shifted to content that changes on its own, like stock tickers or sports scores. Here, the rules are similar: users need a way to pause or hide the updates. But we also introduced the concept of Change Notification. If content updates automatically, how does a screen reader user know? We explored three valid methods: a keyboard-accessible dialog, moving focus to the new content, or using an aria-live region. Using the ANDI tool, we visualized how live regions highlight in purple, making it easier to spot if dynamic content is properly announced. We saw a passing example where a hockey score update was contained in a live region, and a failing one where a dialog box appeared but couldn’t be triggered by keyboard, rendering it useless for many.&lt;/p&gt;
&lt;h3 id=&quot;flashing-content-the-seizure-safety-net&quot;&gt;Flashing Content: The Seizure Safety Net&lt;/h3&gt;
&lt;p&gt;Finally, we touched on the most critical safety issue: flashing content. While the Trusted Tester process marks flashing content as “not tested” (since it requires specialized tools like the Photosensitive Epilepsy Analysis Tool - PEAT), we strongly emphasized that this doesn’t mean it’s safe to ignore. Content that flashes more than three times per second can trigger seizures. We reviewed examples where a “stop animation” button existed but was too far down the page, and where blinking text was indistinguishable from flashing. The takeaway: even if the formal test says “not tested,” the ethical and safety obligation to prevent seizures remains.&lt;/p&gt;
&lt;h3 id=&quot;knockout-criteria&quot;&gt;Knockout Criteria&lt;/h3&gt;
&lt;p&gt;A recurring point in the session was the “knockout” nature of these tests. If a mechanism fails any applicable test condition (like color contrast on a “Pause” button, or keyboard accessibility on a dialog), the entire feature fails. It’s a rigorous standard that leaves no room for partial credit.&lt;/p&gt;
&lt;h3 id=&quot;homework&quot;&gt;Homework&lt;/h3&gt;
&lt;p&gt;Your task this week is to complete the knowledge checks for auto-playing, auto-updating, and flashing content. If you haven’t installed ANDI or the TPGI Color Contrast Checker yet, now is the time! You will need them.&lt;/p&gt;
&lt;h3 id=&quot;next-session&quot;&gt;Next Session&lt;/h3&gt;
&lt;p&gt;Get ready for a deep dive into Keyboard Access and Focus. This is a massive topic, so we’ve moved the next session to Thursday, March 12th at 18:00 GMT+1 (note the day and time change!). We’ll be covering focus order, visible indicators, and keyboard traps. It’s going to be a long one, so bring your coffee.&lt;/p&gt;
</description>
<category>Videos</category>
<guid isPermaLink="true">https://coderlegion.com/12510/dhs-trusted-tester-certification-study-group-mastering-dynamic-web-content</guid>
<pubDate>Tue, 10 Mar 2026 07:35:30 +0000</pubDate>
</item>
<item>
<title>Accessibility Events in March 2026</title>
<link>https://coderlegion.com/11684/accessibility-events-in-march-2026</link>
<description>&lt;h2 id=&quot;trusted-tester-study-group&quot;&gt;Trusted Tester Study Group&lt;/h2&gt;
&lt;p&gt;Together with the &lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/gdg-vienna/&quot;&gt;Google Developer Group Vienna&lt;/a&gt;, I am hosting a study group for the Trusted Tester certification. The dates and topics this month are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Session 2: &lt;strong&gt;Auto-Playing and Auto-Updating Content + Flashing&lt;/strong&gt;&lt;br&gt;
Friday 6 March, 4:00 – 5:00 PM (GMT+1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Session 3: &lt;strong&gt;Keyboard Access and Focus&lt;/strong&gt;&lt;br&gt;
Thursday 12 March, 6:00 – 7:00 PM (GMT+1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Session 4: &lt;strong&gt;Forms&lt;/strong&gt;&lt;br&gt;
Friday 20 March, 4:00 – 5:00 PM (GMT+1) &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/11684/accessibility-events-in-march-2026</guid>
<pubDate>Fri, 27 Feb 2026 07:00:00 +0000</pubDate>
</item>
<item>
<title>Upcoming Accessibility Events in March 2026</title>
<link>https://coderlegion.com/12172/upcoming-accessibility-events-in-march-2026</link>
<description>&lt;h3 id=&quot;trusted-tester-study-group-1&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/gdg-vienna/&quot;&gt;Trusted Tester Study Group&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Together with the Google Developer Group Vienna, I am hosting a study group for the Trusted Tester certification. Watch the previous session recordings &lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/NzBo3sU0ki8?si=iMGiEJuSGJiMSTs0&quot;&gt;on YouTube&lt;/a&gt;. The dates and topics this month are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Session 2: Auto-Playing and Auto-Updating Content + Flashing&lt;br&gt;
Friday 6 March, 4:00 – 5:00 PM (GMT+1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Session 3: Keyboard Access and Focus&lt;br&gt;
Thursday 12 March, 6:00 – 7:00 PM (GMT+1)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Session 4: Forms&lt;br&gt;
Friday 20 March, 4:00 – 5:00 PM (GMT+1)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;digital-accessibility-experts-live-help-accessibility-is-going-in-the-wrong-direction-where-i-work-what-can-i-do-about-it-&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.eventbrite.co.uk/e/digital-accessibility-experts-live-tickets-1980705813407?utm-campaign=social&amp;amp;utm-content=attendeeshare&amp;amp;utm-medium=discovery&amp;amp;utm-term=listing&amp;amp;utm-source=cp&amp;amp;aff=ebdsshcopyurl&quot;&gt;Digital Accessibility Experts Live: Help! Accessibility is going in the wrong direction where I work. What can I do about it?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday 26th March 4 PM UK-time&lt;/p&gt;
&lt;p&gt;The global accessibility field grew in 2025. But many established accessibility initiatives in organisations also came under threat from the DEI backlash and economic budget cutting. 2026 is likely to be similar. So what can you do if your work comes under threat by decisions from your stakeholders?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;accessibleeu-latvia---people-living-with-dementia-accessibility-solutions-amp-innovations-international-experience&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://accessible-eu-centre.ec.europa.eu/content-corner/events_en&quot;&gt;AccessibleEU Latvia - People Living with Dementia. Accessibility, Solutions &amp;amp; Innovations. International Experience&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday 5 March 2026, 10:00 - 15:30 (EET)&lt;/p&gt;
&lt;p&gt;This AccessibleEU event organised in collaboration with the Latvia Alzheimer’s Association and the Association of Disabled Persons and their Friends ‘Apeirons’, aims to raise awareness among society, including policymakers, service providers, and professionals, about how to better support people with dementia and other cognitive disorders.&lt;/p&gt;
&lt;p&gt;Broadly defined accessibility plays a crucial role in enhancing the quality of life for these individuals - encompassing access to services, information, the built environment, and transportation.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vienna-game-dev-meetup-no-diversity-no-games---how-inclusion-is-no-longer-optional&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.meetup.com/vienna-game-dev-meetup/events/313384044/?utm_medium=referral&amp;amp;utm_campaign=share-btn_savedevents_share_modal&amp;amp;utm_source=link&amp;amp;utm_version=v2&quot;&gt;Vienna Game Dev Meetup: No Diversity, No Games - How inclusion is no longer optional&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tuesday, Mar 3 · 6:30 PM to 9:30 PM CET Das Packhaus: Marxergasse 24, 1030 Wien, Österreich&lt;/p&gt;
&lt;p&gt;The game industry has more talent, bigger budgets, and more powerful technology than ever before. Yet we’re stuck in sequels, safe bets, and recycled ideas. For decades, innovation was driven by hardware and graphics. That era is slowing down. Higher fidelity alone no longer creates novelty. Jack Gutmann argues that the next frontier of originality is perspective. Homogeneous teams create blind spots, predictable design, and cultural echo chambers, a form of creative inbreeding.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vienna-women-techmakers-conference-break-the-pattern-&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://womentechmakers.at/conference/2026&quot;&gt;Vienna: Women Techmakers Conference “Break the Pattern”&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Saturday 14 March, 9:00 - 15:00 TUtheSky (Getreidemarkt 9, 1060 Vienna)&lt;/p&gt;
&lt;p&gt;Women Techmakers Vienna invites you to our International Women’s Day 2026 conference, themed “Break The Pattern.” Expect stories of non-traditional paths into tech and the moments women stepped up beyond their role to drive real change at work—improving processes, quality, leadership, and team culture. Come for practical takeaways, honest lessons, and new connections.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/12172/upcoming-accessibility-events-in-march-2026</guid>
<pubDate>Wed, 25 Feb 2026 09:30:15 +0000</pubDate>
</item>
<item>
<title>Accessibility Education Events in February 2026</title>
<link>https://coderlegion.com/11685/accessibility-education-events-in-february-2026</link>
<description>&lt;h3 id=&quot;a11y-tokyo-meetup-accessibility-and-internationaization&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.meetup.com/a11ytokyo/events/313272227/?utm_version=v2&quot;&gt;A11y Tokyo Meetup: Accessibility and Internationaization&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tuesday, Feb 17 · 11:30 AM to 1:00 PM CET&lt;/p&gt;
&lt;p&gt;How does accessibility and internationalisation fit together?&lt;/p&gt;
&lt;p&gt;Why does one need the other, how do they relate, what does this all mean in real life and what can we do in practice? The talk is about how internationalisation and accessibility belong together and how considering internationalisation can improve products in general and provide a good access point to create more accessible products.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;rbi-amp-sebi-digital-accessibility-mandates-why-2026-is-a-compliance-inflection-point-for-india-s-financial-services&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://accessibility.deque.com/rbi-sebi-digital-a11y-mandates&quot;&gt;RBI &amp;amp; SEBI Digital Accessibility Mandates: Why 2026 Is a Compliance Inflection Point for India’s Financial Services&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Wednesday, 18 February | 12:00 - 1:00 PM (IST)&lt;/p&gt;
&lt;p&gt;As RBI and SEBI place stronger emphasis on inclusive and accessible digital experiences, many banks, NBFCs, fintechs, and market participants are asking the same questions: Which guidelines apply to us? Where are the real risks? And how do we move forward without disrupting business priorities?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;zero-project-conference-2026&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/zeroprojectorg&quot;&gt;Zero Project Conference 2026&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Wednesday 18th to Friday 20th&lt;/p&gt;
&lt;p&gt;Live content from #ZeroCon26 will be streamed in an accessible manner via the conference platform and the Zero Project's YouTube channel. Session recordings will be made available after the conference.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;axe-con-2026&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.deque.com/axe-con/schedule/&quot;&gt;Axe-Con 2026&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tuesday, February 24, through Wednesday, February 25, 2026&lt;/p&gt;
&lt;p&gt;Topics of focus will include accessibility in development, accessibility in design, organizational success with accessibility, and a wildcard track. Talks at Axe-con will include case studies from enterprise companies leading in large-scale accessibility efforts, as well as best practices and updates from technology leaders around the world.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;document-accessibility-in-2026&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.eventbrite.co.uk/e/digital-accessibility-experts-live-registration-111949261254&quot;&gt;Document Accessibility in 2026&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday 26 February 4pm UK-time&lt;/p&gt;
&lt;p&gt;Building on previous webinars from 2024 - Creating Accessible Documents – this webinar continues with Hassell Inclusion’s scoped model, by exploring what’s new, what’s changed, and what to prioritise in 2026 in the world of document accessibility.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/11685/accessibility-education-events-in-february-2026</guid>
<pubDate>Sun, 15 Feb 2026 12:05:30 +0000</pubDate>
</item>
<item>
<title>DHS Trusted Tester Study Group Session 1 Recap</title>
<link>https://coderlegion.com/11682/dhs-trusted-tester-study-group-session-1-recap</link>
<description>&lt;p&gt;Together with the &lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/gdg-vienna/&quot;&gt;Google Developer Group Vienna&lt;/a&gt;, I am hosting a study group for the Trusted Tester certification. You can watch the previous session recordings on YouTube and access the presentation and transcript.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/events/details/google-gdg-vienna-presents-dhs-trusted-tester-study-group-2-auto-playing-and-auto-updating-content-flashing-1/&quot;&gt;next session&lt;/a&gt; will be on Friday March 6, 4 PM CET, on GDG Vienna.&lt;/p&gt;
&lt;h2 id=&quot;what-is-section-508-&quot;&gt;What is Section 508?&lt;/h2&gt;
&lt;p&gt;Section 508 is part of the Rehabilitation Act of 1973. that requires any ICT developed, procured, maintained, or used by the U.S. Federal government to be accessible to people with disabilities. It guarantees that federal employees and the public can use government‑provided software, websites, hardware, and documents.&lt;/p&gt;
&lt;p&gt;The DHS Trusted Tester program is a manual‑testing methodology created by the Department of Homeland Security. &lt;/p&gt;
&lt;p&gt;It follows the ICT Testing Baseline and produces repeatable, reliable conformance results, and gives you a concrete, audit‑ready way to prove that a product meets Section 508 – far more trustworthy than relying only on automated tools.&lt;/p&gt;
&lt;p&gt;The study group is free and 100% online. We meet every other Friday for ~6 months to go over the testing topics and examples from the Trusted Tester course. To recieve a certification, you must enroll in and complete the DHS Trusted Tester course. &lt;/p&gt;
&lt;p&gt;Session 1 covered:&lt;/p&gt;
&lt;h3 id=&quot;functional-performance-criteria&quot;&gt;Functional Performance Criteria&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Vision: No‑vision (screen reader), limited vision (magnification), no&lt;br&gt;
colour perception (color contrast)&lt;/li&gt;
&lt;li&gt;Hearing: No‑hearing (captions, transcripts), limited hearing (visual&lt;br&gt;
alerts)&lt;/li&gt;
&lt;li&gt;Speech: No‑speech&lt;/li&gt;
&lt;li&gt;Manipulation Limited: fine motor control (keyboard‑only navigation)&lt;/li&gt;
&lt;li&gt;Reach &amp;amp; Strength: Ability to press large targets, use assistive&lt;br&gt;
switches&lt;/li&gt;
&lt;li&gt;Language / Cognitive: Simple language, clear instructions, consistent&lt;br&gt;
navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These map directly to the POUR principles (Perceivable, Operable, Understandable, Robust) that you’ll see throughout the course.&lt;/p&gt;
&lt;h3 id=&quot;electronic-content-beyond-the-web&quot;&gt;Electronic content beyond the web&lt;/h3&gt;
&lt;p&gt;One of the most eye‑opening moments for many participants was the realization that “electronic content” is a catch‑all term that includes PDFs, e‑books, emergency alerts, automated emails, survey forms, and even kiosk interfaces. The same accessibility principles that govern HTML also apply to these formats, albeit with different testing techniques. &lt;/p&gt;
&lt;p&gt;For PDFs, for instance, you still need proper tagging, logical reading order, and descriptive alt text for images. &lt;/p&gt;
&lt;p&gt;For e‑books, the focus shifts to structural markup that allows a screen reader to navigate chapters, tables of contents, and footnotes. The overarching message was clear: once you master the core concepts, you can transfer them to virtually any digital artifact.&lt;/p&gt;
&lt;h3 id=&quot;your-homework-should-you-choose-to-accept-it&quot;&gt;Your Homework, should you choose to accept it&lt;/h3&gt;
&lt;p&gt;If you plan on taking the certification at the end of the study group, here is your homework until the next session: Complete the first 3 modules we covered in the DHS CX Directive.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What is Section 508? – theory &amp;amp; history &lt;/li&gt;
&lt;li&gt;Standards for Web – POUR, WCAG, Functional Performance Criteria &lt;/li&gt;
&lt;li&gt;Testing Tools – ANDI, autoplay settings, and contrast checker&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Explore the ANDI bookmarklet on a few of your own sites, and familiarize yourself with the contrast‑checker. &lt;br&gt;
Also: Check how to enable your browser’s autoplay ahead of the next session because the topic will be “auto‑playing &amp;amp; Auto‑updating content”.&lt;/p&gt;
&lt;p&gt;Should you encounter any broken links in the official course, let me know. I’ve saved copies of the older resources.&lt;/p&gt;
&lt;h2 id=&quot;materials&quot;&gt;Materials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/NzBo3sU0ki8?si=iMGiEJuSGJiMSTs0&quot;&gt;Recordings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://drive.google.com/drive/folders/1CGFlwLSGL_tt1RNw12vuuOZEB_jjCaL8?usp=drive_link&quot;&gt;Slides &amp;amp; Transcripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/gdg-vienna/&quot;&gt;GDG Vienna&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.accessibilityfirst.at/webinar-series&quot;&gt;Previous Accessibility Webinar Series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Videos</category>
<guid isPermaLink="true">https://coderlegion.com/11682/dhs-trusted-tester-study-group-session-1-recap</guid>
<pubDate>Sun, 15 Feb 2026 11:45:42 +0000</pubDate>
</item>
<item>
<title>When ‘It Works’ Isn’t Enough: How a Blind Hackerspace Session Exposed Flaws in UX</title>
<link>https://coderlegion.com/7129/when-it-works-isnt-enough-how-a-blind-hackerspace-session-exposed-flaws-in-ux</link>
<description>&lt;p&gt;Recently, I visited my local hackerspace for the “Do it Blind” meetup. Do it Blind is the in-house effort to make the hackerspace itself accessible for people with visual impairments.&lt;/p&gt;
&lt;p&gt;My friend, who had invited me, was trying out how far he could get in the 3D printing process without any sighted assistance, only using his screen reader. While my holographic Eevee coin was printing, I followed along (minus the screen reader, plus the visuals) while he installed OctoPrint on Windows (which seems worth mentioning because the Linux users in the hackerspace believed it impossible).&lt;/p&gt;
&lt;p&gt;I want to say “it worked”, but it would be more accurate to say “he made it work”.&lt;/p&gt;
&lt;p&gt;There was a sign-up form with no form labels and a link instead of a button. Sure, with context clues, it’s kinda obvious what 3 consecutive text input fields would want you to enter: A username, a password, and password confirmation.&lt;/p&gt;
&lt;p&gt;But the ultimate knock-out: a modal window with 2 options to close it, but neither was present on keyboard navigation. There was no way to get past it without using the mouse.&lt;/p&gt;
&lt;p&gt;Regardless of the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/WCAG22/#keyboard&quot;&gt;2.1.1 keyboard navigation&lt;/a&gt; failure, this setup flow was far from accessible. The whole point of this experiment was to find out if the 3D printing process can be done with only a screen reader and a lot of dedication. But not all assistive tech users are power users like that.&lt;/p&gt;
&lt;h3 id=&quot;web-accessibility-best-practices-focus-on-assistive-tech-power-users-&quot;&gt;Web accessibility best practices focus on assistive tech power users.&lt;/h3&gt;
&lt;p&gt;Maybe the aforementioned Linux users in attendance were already a clue, but generally speaking, the digital literacy (and 3D printing knowledge) inside a hackerspace is significantly higher than what you find in the average population.&lt;/p&gt;
&lt;p&gt;Unlabelled forms and overlay-window softlocks are not uncommon issues - still, in the year of 2025 - and not only screen reader users but assistive tech users all over the world are left with no other option than to make it work. Somehow.&lt;/p&gt;
&lt;h3 id=&quot;dark-souls-level-user-experience&quot;&gt;Dark Souls Level User Experience&lt;/h3&gt;
&lt;p&gt;Again: circling back to Dark Souls. If you don’t know it, all you really need to know about it is that this game is notoriously hard to beat. Which is why I like to call user flows that are “accessible/compliant in theory” Dark Souls UX.&lt;/p&gt;
&lt;p&gt;I have compared using assistive tech to Dark Souls before, and I will say it again: Just because it is possible to do something with assistive tech does not mean that most users will have the nerve to complete it. Yet most accessibility evaluations only look at what’s possible for users with substantial digital skills. Just because your accessibility auditor, another power user who knows the differences between NVDA and JAWS in their sleep, can navigate the page just fine, does not mean all other screen reader users will.&lt;/p&gt;
&lt;p&gt;Yes, you can get through it. You can make it work.&lt;/p&gt;
&lt;p&gt;But at what cost?&lt;/p&gt;
&lt;h3 id=&quot;good-experience-or-just-experience-&quot;&gt;Good Experience or Just… Experience?&lt;/h3&gt;
&lt;p&gt;&quot;For the love of users, stop calling it a good experience if not everyone gets to have it.&quot; - &lt;a rel=&quot;nofollow&quot; href=&quot;https://a11ynews.substack.com/p/no-accessibility-no-ux-by-julia-undeutsch&quot;&gt;Julia Undeutsch&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Assistive tech users just don’t receive the same amount of love when it comes to user flow design.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;But why aren’t hoverstates designed to delight keyboard navigation users?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why isn’t microcopy written to seamlessly guide screen reader users through the flow?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why don’t brand guidelines include instructions on how to write descriptive alt text in line with the tone of voice?&lt;/p&gt;
&lt;p&gt;Accessibility is mostly regarded through the technical lens, not the human one. This makes it all too easy to forget that behind all those standards, regulations, and requirements is nothing but a person trying to make it work with their setup.&lt;/p&gt;
</description>
<category>Frontend Dev</category>
<guid isPermaLink="true">https://coderlegion.com/7129/when-it-works-isnt-enough-how-a-blind-hackerspace-session-exposed-flaws-in-ux</guid>
<pubDate>Mon, 10 Nov 2025 15:13:09 +0000</pubDate>
</item>
<item>
<title>Upcoming Accessibility Education Events in November 2025</title>
<link>https://coderlegion.com/7039/upcoming-accessibility-education-events-in-november-2025</link>
<description>&lt;h3 id=&quot;the-state-of-accessibility-in-wordpress&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://wpcampus-org.zoom.us/webinar/register/8517600114996/WN_QD246GTVQ6WakJHwd4RMSQ#/registration&quot;&gt;The State of Accessibility in WordPress&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday, November 6, starting 04:00 PM CET&lt;/p&gt;
&lt;p&gt;Join the WPCampus community on Thursday, November 6 at 10 a.m. Eastern (UTC -5) for a focused two-hour event exploring the current and future state of accessibility in WordPress through the lens of higher education.&lt;/p&gt;
&lt;p&gt;They bring together accessibility leaders, developers, and governance practitioners for a series of sessions that connect insight to action: understanding where accessibility in WordPress stands today, how to build stronger governance structures, and what new tools are emerging to make accessibility testing more seamless and integrated.&lt;/p&gt;
&lt;p&gt;Visit &lt;a rel=&quot;nofollow&quot; href=&quot;https://wpcampus.org/events/&quot;&gt;WPCampus.org/events&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h3 id=&quot;getting-tables-right-clear-accessible-and-effective&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://stiftelsenfunka.org/whats-up/free-friday-webinars/getting-tables-right-clear-accessible-and-effective/&quot;&gt;Getting tables right: Clear, accessible, and effective&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Friday, November 7, from 1:30 PM to 2 PM CET&lt;/p&gt;
&lt;p&gt;After the popular webinar on charts, Funka Foundation will now focus on tables. How do they work for people with different user needs? What are the main things to pay attention to? What are the main challenges? Join for an overview from the user perspective and some practical tips.&lt;/p&gt;
&lt;h3 id=&quot;world-usability-day-2025-emerging-technologies-and-human-experience-livestream&quot;&gt;World Usability Day 2025: &lt;a rel=&quot;nofollow&quot; href=&quot;https://wud.accessibilityfirst.at/&quot;&gt;Emerging Technologies and Human Experience Livestream&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday, November 13, 6 PM to 8:30 PM CET&lt;/p&gt;
&lt;p&gt;Talks and panel discussion on accessibility considerations through augmented reality, mobile app development, AI as assistive tech, and alternative interface design.&lt;/p&gt;
&lt;p&gt;All events listed on &lt;a rel=&quot;nofollow&quot; href=&quot;https://worldusabilityday.org/#upcoming-events&quot;&gt;WorldUsabilityDay.org&lt;/a&gt;&lt;/p&gt;
</description>
<category>Augmented Reality</category>
<guid isPermaLink="true">https://coderlegion.com/7039/upcoming-accessibility-education-events-in-november-2025</guid>
<pubDate>Wed, 05 Nov 2025 07:42:02 +0000</pubDate>
</item>
<item>
<title>Your summary of upcoming accessibility education events in October 2025</title>
<link>https://coderlegion.com/5835/your-summary-of-upcoming-accessibility-education-events-in-october-2025</link>
<description>&lt;h3 id=&quot;wordpress-accessibility-meetup&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://us02web.zoom.us/webinar/register/5917550928532/WN_pFsYqJqrTJyG5lvYe8xdog#/registration&quot;&gt;WordPress Accessibility Meetup&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday, October 2 at 10 AM Central&lt;/p&gt;
&lt;p&gt;It can be a struggle to convince your client to put in the effort and also conform to any regulation, like Section 508, the EU Accessibility Act, or otherwise. Drawing from her own experience with &quot;difficult&quot; clients and some basic psychology, Annelies Verhelst will provide you with compelling arguments and advice on how to make a business case.&lt;/p&gt;
&lt;h3 id=&quot;funka-foundation-friday-webinar-cybersecurity-accessibility-true&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://us06web.zoom.us/webinar/register/WN_0GwWshzNSOyJsXYMUmtP0w#/registration&quot;&gt;Funka Foundation Friday Webinar: Cybersecurity + Accessibility = True&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Friday, 3 October, 13.30-14.00 CEST&lt;/p&gt;
&lt;p&gt;Cybersecurity and accessibility are both critical for resilient digital infrastructures. This webinar explains how accessibility requirements are integrated with modern cybersecurity measures. Together, they form robust and inclusive standards that support the Cyber Resilience Act.&lt;/p&gt;
&lt;h3 id=&quot;wagtail-space&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://wagtail.org/wagtail-space-2025/&quot;&gt;Wagtail Space&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Wednesday, October 8th - Friday, October 10th&lt;/p&gt;
&lt;p&gt;Come join educators, publishing professionals, developers, open source enthusiasts, and leaders from organizations around the globe for three days of talks and networking. &lt;/p&gt;
&lt;h3 id=&quot;wordpress-accessibility-day&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://2025.wpaccessibility.day/schedule/&quot;&gt;WordPress Accessibility Day&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Wednesday, October 15th - Thursday, October 16th&lt;/p&gt;
&lt;p&gt;WordPress Accessibility Day is a 24-hour global event dedicated to promoting and learning website accessibility best practices for WordPress websites.&lt;/p&gt;
</description>
<category>Networking</category>
<guid isPermaLink="true">https://coderlegion.com/5835/your-summary-of-upcoming-accessibility-education-events-in-october-2025</guid>
<pubDate>Wed, 01 Oct 2025 11:52:09 +0000</pubDate>
</item>
<item>
<title>Today’s ship: Mock-Trade Lab, 5-min CSV Import, and bulletproof Price Fallbacks</title>
<link>https://coderlegion.com/5752/todays-ship-mock-trade-lab-5-min-csv-import-and-bulletproof-price-fallbacks</link>
<description>&lt;h2 id=&quot;today-s-ship-mock-trade-lab-5-min-csv-import-and-bulletproof-price-fallbacks&quot;&gt;Today’s ship: Mock-Trade Lab, 5-min CSV Import, and bulletproof Price Fallbacks&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;We’re building Pocket Portfolio in the open. Today we shipped three slices that make the app instantly useful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=18005583576448860457&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;1-mock-trade-amp-scenario-lab-live-&quot;&gt;1) Mock-Trade &amp;amp; Scenario Lab (live)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; Add/remove positions, tweak size/price, and watch totals update — &lt;strong&gt;without&lt;/strong&gt; touching real P/L.&lt;br&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; sanity-check ideas (hedges, rebalance, scale-in) before committing. It’s the “are we sure?” layer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; open the app → &lt;strong&gt;Add Mock Trade&lt;/strong&gt; → e.g., &lt;code&gt;TSLA +2 @ 260&lt;/code&gt;.&lt;br&gt;
App → &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.pocketportfolio.app/app?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&quot;&gt;https://www.pocketportfolio.app/app?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-5-minute-csv-import-with-samples-error-report-&quot;&gt;2) 5-minute CSV import (with samples + error report)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; Drag-drop a broker CSV; we normalize it and show a clean portfolio. Includes &lt;strong&gt;sample CSVs&lt;/strong&gt; and &lt;strong&gt;Download error report&lt;/strong&gt; if a row fails.&lt;br&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; no broker hookups, no paywalls — just get your data in and move.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to test quickly:&lt;/strong&gt; &lt;code&gt;Menu → Import CSV&lt;/code&gt; → use a sample (eToro / Coinbase / Generic).&lt;br&gt;
If a row trips, download the error CSV and paste a &lt;strong&gt;redacted line&lt;/strong&gt; in an issue — we’ll add the mapping.&lt;/p&gt;
&lt;p&gt;Repo → &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/PocketPortfolio/Financialprofilenetwork?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&quot;&gt;https://github.com/PocketPortfolio/Financialprofilenetwork?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-resilient-price-fallbacks-equities-fx-crypto-&quot;&gt;3) Resilient price fallbacks (equities, FX, crypto)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; Client→edge design with provider rotation + caching. If one endpoint blinks, we fail over.&lt;br&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; fewer “0.00” moments, snappier updates, more trustworthy P/L.&lt;/p&gt;
&lt;p&gt;No settings required — it just works across stocks, FX, and crypto.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;small-technical-notes&quot;&gt;Small technical notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scenario isolation:&lt;/strong&gt; mock trades are tagged and kept out of real totals.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge functions:&lt;/strong&gt; quote fallbacks and cache control live at the edge; client stays fast.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A11y/UX:&lt;/strong&gt; import flow has clear state + error CSV, and we’re adding shortcut keys next.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;contribute-good-first-issues-&quot;&gt;Contribute (good first issues)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CSV mapping for a new broker format  &lt;/li&gt;
&lt;li&gt;Playwright tests for error-CSV → fix → success  &lt;/li&gt;
&lt;li&gt;Price fallback telemetry (simple counters, no PII)  &lt;/li&gt;
&lt;li&gt;Small UI polish on the Mock-Trade modal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Repo → &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/PocketPortfolio/Financialprofilenetwork?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&quot;&gt;https://github.com/PocketPortfolio/Financialprofilenetwork?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.pocketportfolio.app/app?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&quot;&gt;https://www.pocketportfolio.app/app?utm_source=coderlegion&amp;amp;utm_medium=guest&amp;amp;utm_campaign=todays_ship&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Got stuck importing? Open an issue with one &lt;strong&gt;redacted row&lt;/strong&gt;; we’ll map it quickly.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
<category>Error Handling</category>
<guid isPermaLink="true">https://coderlegion.com/5752/todays-ship-mock-trade-lab-5-min-csv-import-and-bulletproof-price-fallbacks</guid>
<pubDate>Mon, 29 Sep 2025 12:44:26 +0000</pubDate>
</item>
<item>
<title>Differences and stats for screen reader testing.</title>
<link>https://coderlegion.com/5579/differences-and-stats-for-screen-reader-testing</link>
<description>&lt;h2 id=&quot;online-navigation&quot;&gt;Online Navigation&lt;/h2&gt;
&lt;p&gt;Online navigation works quite similarly to offline navigation, only the tools differ greatly. For online navigation, we mainly have zoom, screen magnifiers, and screen readers (or SR for short). Zoom and screen magnifiers are pretty easy to wrap your head around, either because you tested it on purpose or accidentally hit Ctrl while trying to scroll and got a jump scare by gigantic UI elements: They make things big. Checks out.&lt;/p&gt;
&lt;p&gt;But screen readers are more intimidating at first. You boot them up and suddenly everything starts talking! Most of us are not particularly fond of their device issuing unexpected noises because it’s usually a bad thing.&lt;/p&gt;
&lt;p&gt;While text-to-speech (or TTS for short) is the intended functionality of text-to-speech screen readers (shocking, I know), it is overwhelming at first. Monotone, technical-sounding voices are simply not a joy to listen to, especially when you have to concentrate on understanding what exactly these voices are describing to you. On another note: Braille displays peacefully coexist with TTS screen readers and are a staple for web access!&lt;/p&gt;
&lt;p&gt;It’s time to talk about the oh-so-dreaded screen reader testing! &lt;/p&gt;
&lt;h2 id=&quot;screen-reader-output&quot;&gt;Screen Reader Output&lt;/h2&gt;
&lt;p&gt;So screen readers read what’s on the screen? Wrong! They read what you wrote into your code! While a software tester who uses a mouse and screen might not notice that your menu exit button is actually a styled div, the SR will. And it will not work as well.&lt;/p&gt;
&lt;p&gt;This is where the accessibility tree comes into play. The accessibility tree is how SR and other assistive tech users navigate through a website, climbing along heading levels and structures to find the desired information. The accessibility tree is sprouted by the browser based on the DOM (shorthand for Document Object Model) tree and accessed by platform-specific Accessibility APIs.&lt;/p&gt;
&lt;p&gt;The DOM tree contains objects representing all the markup’s elements, attributes, and text nodes. This is precisely why following the h1, h2, h3 … heading structure is important. When you skip heading levels, you cut off the branches that assistive tech needs for a sound climbing route.&lt;/p&gt;
&lt;h3 id=&quot;example&quot;&gt;Example&lt;/h3&gt;
&lt;p&gt;But not all screen readers are the same. Let’s briefly go over the differences in screen reader output: Below are 2 popular screen readers reading the same thing in the same browser and both outputting something different. Feel free to copy the code, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.nvaccess.org/download/&quot;&gt;download NVDA&lt;/a&gt; and follow along. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=9743866561654982874&quot; alt=&quot;Starter Pokemon Table&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;testing-setup&quot;&gt;Testing setup&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NVDA 2024.1.0.31547 in Chrome v126.0.6478.127 on Windows 11 Enterprise&lt;/li&gt;
&lt;li&gt;JAWS 2022.2204.20.400 in Chrome v126.0.6478.127 on Windows 11 Enterprise&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-html&quot;&gt;The HTML&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;table&amp;gt;
&amp;lt;caption&amp;gt;Choose your Starter Pokemon?&amp;lt;/caption&amp;gt;
&amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;Person&amp;lt;/th&amp;gt;
  &amp;lt;th&amp;gt;Pokemon&amp;lt;/th&amp;gt;
  &amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;Julia&amp;lt;/th&amp;gt;
  &amp;lt;td&amp;gt;Pikachu&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;Electro&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;Laura&amp;lt;/th&amp;gt;
  &amp;lt;td&amp;gt;Eevee&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;Normal&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;Audience&amp;lt;/th&amp;gt;
  &amp;lt;td&amp;gt;Magikarp&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;Water&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-css&quot;&gt;The CSS&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;table {
  font-size: 1.5rem;
  margin: 50px;
  min-height: 200px;
  min-width: 500px;
}

tr:first-child &amp;gt; th {
  background-color: lightblue;
  border-bottom: 1px solid darkblue;
}

td {
  text-align: center;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NVDA will say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Choose your Starter Pokémon Table with 4 rows and 3 columns Choose&lt;br&gt;
your Starter Pokémon caption”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and JAWS will say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Table with 4 rows and 3 columns Choose your Starter Pokémon”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Same table, same code, same browser, yet 2 different outputs. That doesn’t mean that one is better than the other; they both get the job done. But be aware that there are some nuances between them.&lt;/p&gt;
&lt;h3 id=&quot;then-what-screen-reader-setup-is-best-for-testing-&quot;&gt;Then what Screen Reader Setup is best for Testing?&lt;/h3&gt;
&lt;p&gt;Classic UX answer: it depends. Firstly, on your target demographic, but more tangibly, on the operating systems you are developing for. Every year, WebAIM releases a survey for screen reader users where they ask which SR-browser combination they use.&lt;/p&gt;
&lt;p&gt;The latest survey was conducted between December 2023 and January 2024. Go check the &lt;a rel=&quot;nofollow&quot; href=&quot;https://webaim.org/projects/screenreadersurvey10/&quot;&gt;Screen Reader User Survey #10 Results&lt;/a&gt;! While you’re at it, check out the &lt;a rel=&quot;nofollow&quot; href=&quot;https://webaim.org/projects/million/&quot;&gt;WebAIM Million report&lt;/a&gt; as well. The Million report audited 1 million websites to give us a benchmark of progress in web accessibility over the years and the most common WCAG failures. (It’s still low contrast btw.)&lt;/p&gt;
&lt;h2 id=&quot;screen-reader-testing-summary-&quot;&gt;Screen Reader Testing Summary:&lt;/h2&gt;
&lt;p&gt;JAWS and NVDA came out on top with 40.5% and 37.7% respectively. The 3rd place on the podium took VoiceOver with 9.7%. As for browsers, the big 3 are Google Chrome, Microsoft Edge, and Mozilla Firefox.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=5221347027132859011&quot; alt=&quot;results for primary desktop or laptop screen reader use&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=17949134077682452036&quot; alt=&quot;results for browser usage with primary screen reader&quot;&gt;&lt;/p&gt;
</description>
<category>QA Best Practices</category>
<guid isPermaLink="true">https://coderlegion.com/5579/differences-and-stats-for-screen-reader-testing</guid>
<pubDate>Thu, 25 Sep 2025 13:34:22 +0000</pubDate>
</item>
<item>
<title>This is your event summary for upcoming opportunities in accessibility education in September 2025</title>
<link>https://coderlegion.com/5235/this-your-event-summary-upcoming-opportunities-accessibility-education-september-2025</link>
<description>&lt;h3 id=&quot;webaim-conference&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://conference.webaim.org/&quot;&gt;WebAIM Conference&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;September 16-17, from 12:15 PM– 5 PM (US Eastern Time)&lt;/p&gt;
&lt;p&gt;The Web Accessibility in Mind Conference is presented by WebAIM in partnership with Pope Tech. This virtual conference will provide conference participants with content that will help them mature their practice in digital accessibility. Our goals include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide a diverse range of perspectives from a diverse group of&lt;br&gt;
speakers.&lt;/li&gt;
&lt;li&gt;Share solutions to accessibility challenges.&lt;/li&gt;
&lt;li&gt;Give advice and guidance that helps our participants to actively&lt;br&gt;
contribute to providing more accessible digital spaces.&lt;/li&gt;
&lt;li&gt;Bring together a cross section of public and private sector&lt;br&gt;
technology professionals from organizations large and small.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;google-dev-group-vienna-ama-ask-us-anything-about-accessibility&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://gdg.community.dev/events/details/google-gdg-vienna-presents-ama-ask-us-anything-about-accessibility-2025-09-18/&quot;&gt;Google Dev Group Vienna AMA: Ask Us Anything about Accessibility&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday, September 18, 5:00 – 6:30 PM (GMT+2)&lt;/p&gt;
&lt;p&gt;This session is your chance to ask all your burning questions about accessibility! Whether you're struggling with WCAG guidelines, unsure about best practices, or curious about the latest accessibility tools and techniques, we'll be here to provide answers and share insights. Panelists have backgrounds in software development, product design, UX research, QA engineering, product operations, and every single one brings deep expertise in accessibility.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;inclusive-design-24&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://inclusivedesign24.org/2025/schedule/&quot;&gt;Inclusive Design 24&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Thursday, September 25, all day livestream on &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/inclusivedesign24&quot;&gt;YouTube&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Inclusive Design 24 (#id24) is a free 24-hour online event for the global community. It celebrates inclusive design and shares knowledge and ideas from analogue to digital, from design to development, from planners to practitioners, and everything and everyone in between.&lt;/p&gt;
</description>
<category>Mentorship</category>
<guid isPermaLink="true">https://coderlegion.com/5235/this-your-event-summary-upcoming-opportunities-accessibility-education-september-2025</guid>
<pubDate>Mon, 08 Sep 2025 19:46:08 +0000</pubDate>
</item>
<item>
<title>Quick manual testing to cover basic functionalities for accessibility.</title>
<link>https://coderlegion.com/5222/quick-manual-testing-to-cover-basic-functionalities-for-accessibility</link>
<description>&lt;h2 id=&quot;catch-em-all-hunting-accessibility-bugs-like-a-champion-with-manual-testing&quot;&gt;Catch ‘Em All: Hunting Accessibility Bugs Like a Champion with Manual Testing&lt;/h2&gt;
&lt;p&gt;This post is part of a series on web accessibility. Read the first part here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/5191/web-accessibility-and-automated-testing-basics-explained-with-pokemon&quot;&gt;Web accessibility and automated testing basics explained with Pokémon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There will come a point on your path to becoming an A11y Master when you will need to add manual testing to your team. Of course, getting proficient in testing with multiple assistive tech types would be like tapping into the power of Arceus, but you don't need to face legendary battles straight away to evolve your testing skills:&lt;/p&gt;
&lt;h3 id=&quot;magikarp-s-splash-1-tab&quot;&gt;Magikarp’s splash = 1 tab&lt;/h3&gt;
&lt;p&gt;A lot of assistive tech simply simulates inputs through keystrokes. This is not limited to form inputs; keystrokes or combinations are also used to navigate a webpage. Switch buttons work the same. No, not the on/off toggle kind, I’m talking about &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.perkins.org/resource/introduction-7-common-adaptive-switches/&quot;&gt;adaptive switches&lt;/a&gt;. Much like disabilities, they come in a variety of shapes and sizes. They are especially important for people with mobility, flexibility, and body structure disabilities.&lt;/p&gt;
&lt;p&gt;Functional keyboard navigation is also important for screen readers, as they mostly utilize the tab key to jump from one focusable element to the next. That makes the tab key a readily accessible tool to cover a lot of ground with. You can check which elements receive focus, if the focus follows the website structure, if one can interact with elements as expected, and if the focus is visible…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Like Magikarp's splash, the tab key doesn't do much on its own, but&lt;br&gt;
once you understand how keyboard navigation works, it's a strong&lt;br&gt;
addition to your testing lineup. And just like that, your keyboard&lt;br&gt;
evolves into your very own Gyarados.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;eevee-screen-readers&quot;&gt;Eevee = Screen Readers&lt;/h3&gt;
&lt;p&gt;The normal type Eevee is not only cute but very versatile, just like the wide range of screen reader software available!&lt;/p&gt;
&lt;p&gt;Screen readers also include the often-forgotten Braille display. Yes, it counts as a screen reader too! The only difference is that it doesn’t output in speech but translates the written text to Braille code instead.&lt;/p&gt;
&lt;h3 id=&quot;eeveelutions-amp-different-screen-readers-in-different-browsers&quot;&gt;Eeveelutions &amp;amp; different screen readers in different browsers&lt;/h3&gt;
&lt;p&gt;Just like an Eevee can evolve into different types, different screen readers and browser combinations will give you different outputs. But they all operate on the same foundation, so make sure landmarks and headings are in order, and your images have alt attributes filled with suitable text alternatives, so your Eevees can read every move of their opponent in battle!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=15409826329719153928&quot; alt=&quot;eeveelutions are similar but different, just like screen reader and browser combinations&quot;&gt;&lt;/p&gt;
&lt;p&gt;To build your ultimate screen reader team, check the &lt;a rel=&quot;nofollow&quot; href=&quot;https://webaim.org/projects/screenreadersurvey10/&quot;&gt;WebAIM screen reader user survey&lt;/a&gt; to find the most popular screen reader and browser pairings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Watch out&lt;/strong&gt;: The screen reader survey is not the ultimate representation of which combinations are the most used. The survey is sent out annually by WebAIM, but not every person who relies on it is actively keeping up with web accessibility. Especially persons with lower digital literacy who just started out using a screen reader out of necessity are unlikely to bother filling out a survey about their screen reader use. So don’t forget to test with in-built tools such as Talk Back on Android smartphones as well.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;start-your-adventure&quot;&gt;Start your adventure&lt;/h3&gt;
&lt;p&gt;With a strong team like that, you are well prepared to venture out into the World Wide Web and catch all accessibility bugs you encounter. Accessibility issues around the world are waiting for you!&lt;/p&gt;
</description>
<category>Web Dev</category>
<guid isPermaLink="true">https://coderlegion.com/5222/quick-manual-testing-to-cover-basic-functionalities-for-accessibility</guid>
<pubDate>Sun, 07 Sep 2025 07:16:38 +0000</pubDate>
</item>
<item>
<title>Web accessibility and automated testing basics explained with Pokémon.</title>
<link>https://coderlegion.com/5191/web-accessibility-and-automated-testing-basics-explained-with-pokemon</link>
<description>&lt;h2 id=&quot;catch-em-all-hunting-accessibility-bugs-like-a-champion-with-automated-testing&quot;&gt;Catch ‘Em All: Hunting Accessibility Bugs Like a Champion with Automated Testing&lt;/h2&gt;
&lt;h3 id=&quot;so-you-wanna-be-the-very-best-in-software-testing-like-no-one-ever-was-&quot;&gt;So, you wanna be the very best in software testing, like no one ever was?&lt;/h3&gt;
&lt;p&gt;Testing for access barriers is part of a comprehensive quality assurance process. But where does one start? While the WCAG are as extensive as the Pokédex, what exactly is the assistive tech equivalent of Bulbasaur? Where do you start to catch ‘em all?&lt;/p&gt;
&lt;p&gt;Accessibility is a key part of quality assurance, but navigating the world of accessibility testing tools can feel as overwhelming as choosing your first Pokémon. So, where do you start?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-wcag-are-your-pok-dex&quot;&gt;The WCAG are your Pokédex&lt;/h3&gt;
&lt;p&gt;How many Pokémon are there? Depends on the edition, but let’s go with the 151 from the 1st generation. How many success criteria are there? 85 in the 2.2 version. Just like Pokémon have their evolutions, success criteria have levels: A, Double A, and Triple A.&lt;/p&gt;
&lt;p&gt;You can think of them as the same thing: each Pokémon starts out at level A, which is its base form. You can’t battle with an egg (unless you’re Misty), and your website needs to pass at least level A to have basic functionality present. The better your website usability gets, the more high-level success criteria you can pass. Like a training montage!&lt;/p&gt;
&lt;p&gt;Not all success criteria are applicable to all websites or apps, but certain criteria are always required, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1.1.1 Non-text Content&lt;/li&gt;
&lt;li&gt;1.3.3 Sensory Characteristics&lt;/li&gt;
&lt;li&gt;1.4.1 Use of Color&lt;/li&gt;
&lt;li&gt;2.1.1 Keyboard Operable&lt;/li&gt;
&lt;li&gt;2.1.2 No Keyboard Trap&lt;/li&gt;
&lt;li&gt;2.3.1 Three Flashes or Below Threshold&lt;/li&gt;
&lt;li&gt;2.4.1 Bypass Blocks&lt;/li&gt;
&lt;li&gt;2.4.2 Page Titled&lt;/li&gt;
&lt;li&gt;2.4.3 Focus Order&lt;/li&gt;
&lt;li&gt;2.4.4 Link Purpose (In Context)&lt;/li&gt;
&lt;li&gt;2.5.3 Label in Name&lt;/li&gt;
&lt;li&gt;3.1.1 Language of Page&lt;/li&gt;
&lt;li&gt;3.2.1 On Focus&lt;/li&gt;
&lt;li&gt;3.2.6 Consistent Help (from WCAG 2.2, aka the 4th gen)&lt;/li&gt;
&lt;li&gt;4.1.2 Name, Role, Value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are the very, very basic requirements for your website, the very first Pokémon you catch on your adventure. Others will also be applicable, depending on the type of content you add, but these guys will be your MVP (minimal viable Pokémon) team to challenge the first gym leader to get your Level A compliance score.&lt;/p&gt;
&lt;p&gt;While some success criteria build on each other, others are stand alone criteria. Like Ditto, Lapras, and your favorite legendary, they are not part of an evolutionary line, but they could be Level A, AA or AAA in their default form.&lt;/p&gt;
&lt;p&gt;So while we can agree that Charmander is cute, ultimately we all want Charizard. In the same way, we shouldn’t be content with simply passing AA. If you want to become an Accessibility Champion, keep evolving and keep striving for AAA.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;pick-your-starter-&quot;&gt;Pick your starter!&lt;/h3&gt;
&lt;p&gt;Now that we’ve collected our WCAG Pokédex and encouraging words from Professor Oak, it’s time to pick a starter and get started with accessibility testing!&lt;/p&gt;
&lt;h3 id=&quot;automated-testing&quot;&gt;Automated Testing&lt;/h3&gt;
&lt;p&gt;Automated testing has come a long way, but it’s not yet good enough for the Champions League. So to become an Accessibility Champion, you need to learn how to pick the right starter testing tools, then, with a few manual testing tips and tricks, plus a training montage, you will be catching accessibility bugs and barriers, like no one ever has! Let’s go meet some starters:&lt;/p&gt;
&lt;h3 id=&quot;pikachu-google-lighthouse&quot;&gt;Pikachu = Google Lighthouse&lt;/h3&gt;
&lt;p&gt;I know Pikachu is as iconic as it can get, all the while, Google Lighthouse has a bad reputation due to a lack of accuracy. But hear me out: Lighthouse isn’t a bad tool. It can teach you a lot, but has its limits, and you won’t be able to challenge the Accessibility Champions League with it alone.&lt;/p&gt;
&lt;p&gt;It suffers from the same problems all automated testing tools have: They can only check what they can check, meaning that they may, for example, state that alt-text is used correctly, even if the string value looks something like “asdfgThisIsGibberishTM_randomStringOfNumbers”. Yes, alt text is technically present, but with content like that, the screen reader might as well be freestyling.&lt;/p&gt;
&lt;p&gt;But the errors it throws up are correct. You will have a straightforward list of what to fix, which makes for an easy starting point.&lt;/p&gt;
&lt;p&gt;Web accessibility is a long road to master, including knowledge of disabilities, assistive tech hardware &amp;amp; software, legal frameworks like the ADA or EAA, stretching all the way to human rights, but every now and then, you will still get stuck on a bridge with niche ARIA labels and the question of what they are compatible with, blocking your way.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=17506872028483276759&quot; alt=&quot;Your player character is trying to progress, but “A Pokémon is sprawled out in deep and comfortable slumber. “ It’s Snorlax.&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;bulbasaur-wave&quot;&gt;Bulbasaur = WAVE&lt;/h3&gt;
&lt;p&gt;WAVE is a web accessibility evaluation tool by WebAIM:&lt;/p&gt;
&lt;p&gt;Rather than providing a complex technical report, WAVE shows your original web content with embedded icons and indicators that reveal the accessibility information within your page. WAVE cannot tell you if your web content is accessible – only a human can determine true accessibility – but WAVE can help you evaluate the accessibility of your web content.&lt;/p&gt;
&lt;p&gt;It is a solid choice when you are starting out, but (like the plant starter in each generation) it also has its weaknesses. For example, Many landing pages use hero images at the top. WAVE doesn’t recognize if the color contrast between the background image and the text in an overlay on top of it is sufficient; all it sees is a textbox with a transparent background, so it will assume that&lt;/p&gt;
&lt;p&gt;What I like most about it is that it lets you reference the relevant part of the source code for each issue. To become an Accessibility Champion, you have to learn how to handle accessibility in code, too. With WAVE, it’s very much a bite-sized introduction to it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Both tools will point you toward learning resources for the particular errors they recognize. This is what makes them the perfect starter Pokémon: They are easy to use and show you where to go for more training.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/WAI/WCAG22/Understanding/&quot;&gt;WCAG 2.2 Understanding Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://webaim.org/blog/introducing-wave-4/&quot;&gt;WAVE Accessibility Testing Tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/docs/lighthouse/&quot;&gt;Google Lighthouse Chrome Browser Extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Web Dev</category>
<guid isPermaLink="true">https://coderlegion.com/5191/web-accessibility-and-automated-testing-basics-explained-with-pokemon</guid>
<pubDate>Thu, 04 Sep 2025 19:53:24 +0000</pubDate>
</item>
<item>
<title>When we construct the digital world to the limits of the best devices, we build a less usable one.</title>
<link>https://coderlegion.com/1455/when-we-construct-the-digital-world-to-the-limits-the-best-devices-we-build-less-usable-one</link>
<description>&lt;p&gt;The Mobile Performance Inequality Gap&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setting the Benchmarks&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Alex Russel, a lead performance developer at Google is a firm believer in “an internet for everyone”. He highlights this in a poignant &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/watch?v=4bZvq3nodf4&quot;&gt;Chrome Dev Summit talk in 2016&lt;/a&gt; where he showed that when we construct the digital world to the limits of the best devices, we build a less usable one for &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.idc.com/promo/smartphone-market-share/os&quot;&gt;80+% of the world’s users&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since things have changed since 2016, the updated golden web performance standard to achieve now is ~100KiB of HTML/CSS/fonts and ~300-350KiB of JS (gzipped). This rule-of-thumb limit typically lasts about two years and is a hard target to meet. Most modern development tooling easily surpasses this amount in lieu of providing a robust and intuitive developer experience but there is a high cost in doing so if you’re attempting to cater to an international market, as the data suggests.&lt;/p&gt;
&lt;p&gt;Your company’s poor site performance can manifest as lower engagement, higher bounce rates, or a reduction in conversions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Business Impacts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The harmful business impact of poor performance is constantly re-validated. Big decreases in performance predictably lead to (somewhat lower) decreases in user engagement and conversion. The scale of the effect can be deeply situational or hard to suss out without solid metrics, but it’s there. When doing user research, Google’s Web Team found some interesting patterns:&lt;/p&gt;
&lt;p&gt;Users hate delays and unreliability on mobile: the level of stress caused by mobile delays is  comparable to watching a horror movie .&lt;/p&gt;
&lt;p&gt;Fifty percent of smartphone users are more likely to use a company’s mobile site when browsing or shopping because they  don’t want to download an app .&lt;/p&gt;
&lt;p&gt;One of the top reasons for uninstalling an app is the  limited storage  (whereas an installed PWA usually takes less than 1MB).&lt;/p&gt;
&lt;p&gt;Smartphone users are more likely to purchase from mobile sites that  offer relevant recommendations on products, and 85% of smartphone users say  mobile notifications are useful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google's approach to this problem?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;According to those observations, Google found that customers prefer experiences that are fast, installable, reliable, and engaging (F.I.R.E.)! This means companies need to be laser-focused when it comes to performance budgeting. Check out the average device capability worldwide.&lt;/p&gt;
&lt;p&gt;From 2017 data, the default global baseline is a ~$200 Android device on a 400Kbps link with a 400ms round-trip time (“RTT”). This translates into a budget of ~130-170KB of critical-path resources, depending on composition — the more JS you include, the smaller the bundle must be.&lt;/p&gt;
&lt;p&gt;The single most important thing to understand about the landscape of devices your sites will run on is that they are not new phones. Two numbers set the stage:&lt;/p&gt;
&lt;p&gt;45% of  mobile connections occur over 2G worldwide&lt;/p&gt;
&lt;p&gt;75%  of connections occur on either 2G or 3G&lt;/p&gt;
&lt;p&gt;The median user is on a slow network. Just how slow is a matter of some debate.&lt;/p&gt;
&lt;p&gt;This makes some intuitive sense: smartphones are not in their first year (and haven’t been for more than a dozen years), and most users do not replace their devices every year. Most smartphone sales today are replacements (that is, to users who have previously owned a smartphone), and the longevity of devices continues to rise.&lt;/p&gt;
&lt;p&gt;The worldwide device replacement average is  now 33 months . In markets near  smartphone saturation , that means we can expect the median device to be nearly 18 months old.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PWAs leverage modern web capabilities&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How we can solve this issue of performance inequality? By recognizing the issue within our own products and services and using Progressive Web Applications as a way to overcome some technical obstacles and deliver performative, highly optimized apps quickly and effectively.&lt;/p&gt;
&lt;p&gt;Progressive Web Apps (PWAs) are web apps that use service workers, manifests, and other web-platform features in combination with progressive enhancement to give users an experience on par with native apps.&lt;/p&gt;
&lt;p&gt;PWAs provide a number of advantages to users — including being installable, progressively enhanced, responsively designed, re-engageable, linkable, discoverable, network independent, and secure.&lt;/p&gt;
&lt;p&gt;PWAs are not created with a single technology. They represent a new philosophy for building web apps, involving some specific patterns, APIs, and other features. It's not that obvious if a web app is a PWA or not from first glance. An app could be considered a PWA when it meets certain requirements, or implements a set of given features: works offline, is installable, is easy to synchronize, can send push notifications, etc.&lt;/p&gt;
&lt;p&gt;There are some key principles a web app should try to observe to be identified as a PWA. It should be:&lt;/p&gt;
&lt;p&gt;Discoverable, so the contents can be found through search engines.&lt;/p&gt;
&lt;p&gt;Installable, so it can be available on the device's home screen or app launcher.&lt;/p&gt;
&lt;p&gt;Linkable, so you can share it by sending a URL.&lt;/p&gt;
&lt;p&gt;Network independent, so it works offline or with a poor network connection.&lt;/p&gt;
&lt;p&gt;Progressively enhanced, so it's still usable on a basic level on older browsers, but fully functional on the latest ones.&lt;/p&gt;
&lt;p&gt;Re-engageable, so it's able to send notifications whenever there's new content available.&lt;/p&gt;
&lt;p&gt;Responsively designed, so it's usable on any device with a screen and a browser—mobile phones, tablets, laptops, TVs, refrigerators, etc.&lt;/p&gt;
&lt;p&gt;Secure, so the connections between the user, the app, and your server are secured against any third parties trying to get access to sensitive data.&lt;/p&gt;
&lt;p&gt;Offering these features and making use of all the advantages offered by web applications can create a compelling, highly flexible offering for your users and customers all while keeping the performance inequality gap top of mind.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Is it worth doing all that?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Absolutely! With a relatively small amount of effort required to implement the core PWA features, the benefits for people using older and slower devices are huge. For example:&lt;/p&gt;
&lt;p&gt;A decrease in loading times after the app has been installed, thanks to caching with service workers, along with saving precious bandwidth and time. PWAs have near-instantaneous loading (from the second visit).&lt;/p&gt;
&lt;p&gt;The ability to update only the content that has changed when an app update is available. In contrast, with a native app, even the slightest modification can force the user to download the entire application again.&lt;/p&gt;
&lt;p&gt;A look and feel that is more integrated with the native platform—app icons on the home screen or app launcher, applications that automatically run in full-screen mode, etc.&lt;/p&gt;
&lt;p&gt;Re-engaging with users through the use of system notifications and push messages, leading to more engaged users and better conversion rates.&lt;/p&gt;
&lt;p&gt;It's well worth trying out a PWA approach, so you can see for yourself if it works for your app.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Advantages of web applications&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A fully-capable progressive web application should provide all of the following advantages to the user.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Discoverability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The eventual aim is that web apps should have better representation in search engines, be easier to expose, catalogue and rank, and have metadata usable by browsers to give them special capabilities.&lt;/p&gt;
&lt;p&gt;Some of the capabilities have already been enabled on certain web-based platforms by proprietary technologies like Open Graph, which provides a format for specifying similar metadata in the HTML block using tags.&lt;/p&gt;
&lt;p&gt;The relevant web standard here is the Web app manifest, which defines features of an app such as name, icon, splash screen, and theme colours in a JSON-formatted manifest file. This is for use in contexts such as app listings and device home screens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A core part of the web app experience is for users to have app icons on their home screen, and be able to tap to open apps into their native container that feels nicely integrated with the underlying platform.&lt;/p&gt;
&lt;p&gt;Modern web apps can have this native app feel via properties set inside the Web app manifest, and via a feature available in modern smartphone browsers called web app installation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linkability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One of the most powerful features of the web is the ability to link to an app at a specific URL without the need for an app store or a complex installation process. This is how it has always been.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Network independence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Modern web apps can work when the network is unreliable, or even non-existent. The basic ideas behind network independence are to be able to:&lt;/p&gt;
&lt;p&gt;Revisit a site and get its contents even if no network is available.&lt;/p&gt;
&lt;p&gt;Browse any kind of content the user has previously visited at least once, even under situations of poor connectivity.&lt;/p&gt;
&lt;p&gt;Control what is shown to the user in situations where there is no connectivity.&lt;/p&gt;
&lt;p&gt;This is achieved using a combination of technologies: Service Workers to control page requests (for example storing them offline), the Cache API for storing responses to network requests offline (very useful for storing site assets), and client-side data storage technologies such as Web Storage and IndexedDB to store application data offline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progressive enhancement support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Modern web apps can be developed to provide an excellent experience to fully capable browsers, and an acceptable (although not quite as shiny) experience to less capable browsers. We've been doing this for years with best practices such as progressive enhancement. By using progressive enhancement, PWAs are cross-browser. This means developers should take into account the differences in the implementation of some PWA features and technologies between different browser implementations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Re-engage ability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One major advantage of native platforms is the ease with which users can be re-engaged by updates and new content, even when they aren't looking at the app or using their devices. Modern web apps can now do this too, using new technologies such as Service Workers for controlling pages, the Web Push API for sending updates straight from server to app via a service worker, and the Notifications API for generating system notifications to help engage users when they're not actively using their web browser.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Responsiveness&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Responsive web apps use technologies like media queries and viewport to make sure that their UIs will fit any form factor: desktop, mobile, tablet, or whatever comes next.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Secure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The web platform provides a secure delivery mechanism that prevents snooping while simultaneously ensuring that content hasn’t been tampered with, as long as you take advantage of HTTPS and develop your apps with security in mind.&lt;/p&gt;
&lt;p&gt;It's also easy for users to ensure that they're installing the right app because its URL will match your site's domain. This is very different from apps in app stores, which may have several similarly-named apps, some of which may even be based on your site, which only adds to the confusion. Web apps eliminate that confusion and ensure that users get the best possible experience.&lt;/p&gt;
</description>
<category>Web Dev</category>
<guid isPermaLink="true">https://coderlegion.com/1455/when-we-construct-the-digital-world-to-the-limits-the-best-devices-we-build-less-usable-one</guid>
<pubDate>Thu, 13 Mar 2025 20:14:34 +0000</pubDate>
</item>
</channel>
</rss>