<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Praise Agbabiaka</title>
    <description>The latest articles on DEV Community by Praise Agbabiaka (@praiztech).</description>
    <link>https://dev.to/praiztech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1177654%2F3dda3c81-77fc-4fc1-8a05-93d4488c0e1e.jpg</url>
      <title>DEV Community: Praise Agbabiaka</title>
      <link>https://dev.to/praiztech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/praiztech"/>
    <language>en</language>
    <item>
      <title>A broken heading hierarchy is an architecture problem, not a markup one</title>
      <dc:creator>Praise Agbabiaka</dc:creator>
      <pubDate>Sun, 09 Aug 2026 21:59:34 +0000</pubDate>
      <link>https://dev.to/praiztech/a-broken-heading-hierarchy-is-an-architecture-problem-not-a-markup-one-489n</link>
      <guid>https://dev.to/praiztech/a-broken-heading-hierarchy-is-an-architecture-problem-not-a-markup-one-489n</guid>
      <description>&lt;p&gt;On a recent BigCommerce remediation, an audit flagged the heading hierarchy. Levels skipped and jumped across the page, so the structure a screen-reader user navigates by didn't hold together.&lt;/p&gt;

&lt;p&gt;The checklist fix is obvious. Open each template, retag the headings, close the finding.&lt;/p&gt;

&lt;p&gt;But the levels weren't the bug. They were the symptom.&lt;/p&gt;

&lt;p&gt;Each heading was hardcoded into its own template. A section rendered an &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; because whoever wrote that template picked &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, with no view of where it would sit on the assembled page. Nothing owned the hierarchy. It emerged, wrongly, from dozens of local decisions.&lt;/p&gt;

&lt;p&gt;That's the real problem, and it's architectural.&lt;/p&gt;

&lt;p&gt;A reusable heading component has no inherent level. The same block might be an &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; on one page and an &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; nested inside a region on another. Its correct level depends on where it sits, not on what it is.&lt;/p&gt;

&lt;p&gt;Any component that bakes in a fixed level is going to be wrong somewhere because it can't see its own context.&lt;/p&gt;

&lt;p&gt;So the fix isn't to hardcode a different level. It's to stop hardcoding heading levels altogether and render each heading from one place that receives its level from whatever owns the page structure.&lt;/p&gt;

&lt;p&gt;The principle is portable. The idiom changes per stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BigCommerce (Handlebars): a single partial that receives the level as a parameter, replacing heading markup repeated across a dozen templates.&lt;/li&gt;
&lt;li&gt;Shopify (Liquid): a snippet that takes the level through &lt;code&gt;render&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;React: pass the level as a prop, or use context when the hierarchy needs to be derived from component composition.&lt;/li&gt;
&lt;li&gt;Astro: let the parent own the structure and pass the level through props, rather than having the child commit to a level it can't know from its own context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different mechanisms, one move.&lt;/p&gt;

&lt;p&gt;Headings render in a single place, and the level is an input from context, not a constant.&lt;/p&gt;

&lt;p&gt;It's also the fix that lasts. A hardcoded level regresses the moment a section is reused or a template is copied. A contextual one stays correct because the decision lives with the page structure instead of being re-decided everywhere.&lt;/p&gt;

&lt;p&gt;That's the difference between closing a finding and fixing the system that produced it.&lt;/p&gt;

&lt;p&gt;The accessibility failure was in the markup. The fix was in the architecture.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>webdev</category>
      <category>bigcommerce</category>
      <category>react</category>
    </item>
    <item>
      <title>You don't have to choose between Shopify updates and accessibility fixes</title>
      <dc:creator>Praise Agbabiaka</dc:creator>
      <pubDate>Mon, 03 Aug 2026 01:23:41 +0000</pubDate>
      <link>https://dev.to/praiztech/you-dont-have-to-choose-between-shopify-updates-and-accessibility-fixes-fm8</link>
      <guid>https://dev.to/praiztech/you-dont-have-to-choose-between-shopify-updates-and-accessibility-fixes-fm8</guid>
      <description>&lt;p&gt;A while back, a developer told me something that stuck with me. He said fixing Shopify Liquid files is a hassle, because customizations don't scale with theme updates. The moment you start editing a theme, you've effectively forked it, and every future update has to be diffed and re-applied by hand.&lt;/p&gt;

&lt;p&gt;He's not wrong. That's effectively how maintaining a customized Shopify theme works.&lt;/p&gt;

&lt;p&gt;It's also why many teams avoid deep changes to a live theme, accessibility remediation included.&lt;/p&gt;

&lt;p&gt;Accessibility fixes often require changes that only exist in Liquid templates: adding semantic HTML, correcting heading hierarchy, exposing labels to assistive technology, or fixing landmark structure. Those aren't changes you can reliably layer on afterward with CSS or JavaScript.&lt;/p&gt;

&lt;p&gt;But "that's just how Shopify works" is where the conversation usually stops. I don't think it should stop there. The fork isn't a Shopify problem. It's a process problem. And process problems have process answers.&lt;/p&gt;

&lt;p&gt;Solving the update problem comes down to two ideas: isolate changes so most of them never collide with an update, and keep a clean, greppable record of the changes that can't be isolated so the manual diff stays small and predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core problem
&lt;/h2&gt;

&lt;p&gt;Two facts about Shopify themes create the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom edits don't carry through theme updates.&lt;/strong&gt; When Shopify ships a new version of the base theme, it doesn't merge your changes in. You get the new version, and reconciling your customizations is on you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A GitHub-connected theme stops receiving Shopify's theme updates.&lt;/strong&gt; Once a theme is connected to GitHub, Shopify's built-in "Update available" workflow no longer applies to that theme. If you want upstream theme updates, you need to bring them into your Git workflow yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you want two things at once: version control and the ability to take upstream updates. Do you have to choose one? No. You keep them in separate places on purpose. That's the core idea, and everything below is just the mechanics of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup, before any remediation starts
&lt;/h2&gt;

&lt;p&gt;This groundwork is what makes the update painless later. Do it first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Isolate CSS and JavaScript into custom files
&lt;/h3&gt;

&lt;p&gt;Any styling or scripting change goes into its own custom asset files instead of being edited into the theme's existing files. These almost never conflict with an update. Because these are new assets rather than modifications to the theme's files, upstream theme updates rarely touch them, so Git treats them as independent additions rather than conflicting edits. The one exception is the line that loads them: the &lt;code&gt;stylesheet_tag&lt;/code&gt; or &lt;code&gt;script_tag&lt;/code&gt; that enqueues these custom assets lives in Liquid, usually in &lt;code&gt;theme.liquid&lt;/code&gt;, so that single hookup is a Liquid edit an update can collide with. Tag it with your &lt;code&gt;A11Y-REMEDIATION&lt;/code&gt; marker like any other Liquid change. With that one line accounted for, most of your work is gone from the diff before the diff even starts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tag every Liquid change and keep a list
&lt;/h3&gt;

&lt;p&gt;Liquid is the part you can't fully isolate. Sometimes you have to edit a section or snippet directly. For every one of those edits, leave a clear comment describing what changed, and maintain a running list of every Liquid file you touched.&lt;/p&gt;

&lt;p&gt;One refinement pays off later. Use a consistent, greppable marker in those comments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;comment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;&lt;span class="c"&gt; A11Y-REMEDIATION: added aria-label + visible focus state to search toggle &lt;/span&gt;&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endcomment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your "list of changed Liquid files" isn't something you maintain by hand and hope is complete. It's one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rl&lt;/span&gt; &lt;span class="s2"&gt;"A11Y-REMEDIATION"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Designate an unconnected copy of the live theme to receive updates
&lt;/h3&gt;

&lt;p&gt;Before you start, duplicate the live theme and leave that copy &lt;em&gt;disconnected&lt;/em&gt; from GitHub. Because it isn't connected, it stays eligible for Shopify's updates. This copy is your update pipeline. The connected repo is your source of truth. Keeping them apart is the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  The update workflow
&lt;/h2&gt;

&lt;p&gt;When Shopify releases a new version of the base theme, this is how you take it without losing remediation work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: bring the update into version control
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Update the theme copy in the Shopify admin. Shopify generates a new &lt;em&gt;Updated Copy&lt;/em&gt; of the theme with the new version applied.&lt;/li&gt;
&lt;li&gt;Create a backup branch from the connected repo's &lt;code&gt;main&lt;/code&gt;. If anything goes sideways, you have a clean restore point.&lt;/li&gt;
&lt;li&gt;Create an &lt;code&gt;update&lt;/code&gt; branch and pull the code from the &lt;em&gt;Updated Copy&lt;/em&gt; into it, not from the live theme. This gets the upstream changes into Git where you can actually diff them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Phase 2: reconcile, with a focus on every Liquid change
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Merge &lt;code&gt;update&lt;/code&gt; into &lt;code&gt;dev&lt;/code&gt; using &lt;code&gt;--no-commit&lt;/code&gt; (&lt;code&gt;git merge --no-commit --no-ff update&lt;/code&gt;). This leaves the merge staged but uncommitted, giving you a chance to inspect both conflicting and automatically merged changes before creating the merge commit. The &lt;code&gt;--no-ff&lt;/code&gt; flag forces an actual merge commit so you always land in that reviewable staged state, even when Git could have fast-forwarded.&lt;/li&gt;
&lt;li&gt;Diff every Liquid file you modified during remediation, file by file. This is the one deliberately manual step, and it's where your tagged comments and file list earn their keep. You know exactly which files to check, so you're reviewing a short list, not the whole theme. Keep, adapt, or discard each incoming change so accessibility fixes are preserved without missing legitimate improvements in the updated theme.&lt;/li&gt;
&lt;li&gt;Commit to &lt;code&gt;dev&lt;/code&gt; once the diff is clean, then merge &lt;code&gt;dev&lt;/code&gt; into &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Phase 3: push back to Shopify, in the right order
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Push &lt;code&gt;main&lt;/code&gt; to the Updated Copy, not to Live yet. Order matters here, to avoid schema errors: push the configuration files first, &lt;code&gt;config/settings_schema.json&lt;/code&gt; and &lt;code&gt;config/settings_data.json&lt;/code&gt;, then push the remaining theme files. Pushing the config first means that if there's a schema problem, the sync fails here, before the rest of the theme is touched, so you fix the JSON discrepancy and retry instead of discovering the problem after everything else has synced.&lt;/li&gt;
&lt;li&gt;Verify the Updated Copy on Shopify before publishing. Alongside the usual schema and functional checks, re-run your accessibility checks here: an upstream update can change base-theme files you never touched and quietly regress accessibility along the way, so confirm the copy still holds up before it goes live. Only then publish it as the Live theme.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why this holds up
&lt;/h2&gt;

&lt;p&gt;Notice what each piece is doing. The unconnected copy keeps you eligible for updates. Version control keeps your work reviewable and reversible. Isolated CSS and JavaScript mean most of your changes never enter the diff at all. Tagged Liquid comments turn the unavoidable manual step into a bounded, predictable one. The config-first push order fails loudly and early instead of quietly and late.&lt;/p&gt;

&lt;p&gt;None of this makes Shopify merge your changes. That was never on the table. What it does is shrink the manual work to the smallest surface possible and make every risky step recoverable.&lt;/p&gt;

&lt;p&gt;The theme stays maintainable. Updates stay boring. "We customized it" stops meaning "we're stuck on this version forever."&lt;/p&gt;

&lt;p&gt;That developer's complaint was fair. It just wasn't the end of the story. Shopify sets the constraint. A disciplined workflow keeps it manageable.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>liquid</category>
    </item>
    <item>
      <title>Building a Component Library: From First Component to Fully Automated Pipeline</title>
      <dc:creator>Praise Agbabiaka</dc:creator>
      <pubDate>Tue, 19 May 2026 21:20:19 +0000</pubDate>
      <link>https://dev.to/praiztech/building-a-component-library-from-first-component-to-fully-automated-pipeline-4dg4</link>
      <guid>https://dev.to/praiztech/building-a-component-library-from-first-component-to-fully-automated-pipeline-4dg4</guid>
      <description>&lt;p&gt;I was asked to architect and build a React component library from the ground up.&lt;/p&gt;

&lt;p&gt;The problem was clear. We kept rebuilding the same components across different applications. The same buttons, inputs, modals, and layouts, recreated from scratch every time. Someone needed to own a component library and that someone ended up being me.&lt;/p&gt;

&lt;p&gt;I nodded like I had a plan. I didn't.&lt;/p&gt;

&lt;p&gt;I'd never built a component library before. I didn't know how to structure one, how to distribute one, or honestly how to scope one. But I figured the best way to learn was to start.&lt;/p&gt;

&lt;p&gt;So I started small. Buttons. Inputs. The boring stuff that touches everything.&lt;/p&gt;

&lt;p&gt;I focused on getting the foundations right, and I made the decision very early on that accessibility would be baked in from day one. Every component designed to be usable by keyboard users, screen readers, and other assistive technologies from the start. Not as a future improvement. Not as a "nice to have." Just part of the standard.&lt;/p&gt;

&lt;p&gt;Then, the library kept growing.&lt;/p&gt;

&lt;p&gt;Today, it's documented and hosted in Storybook, published as an npm package, and fully automated with CI/CD pipelines that handle Storybook deployments and npm publishing on every release.&lt;/p&gt;

&lt;p&gt;What started as a vague ask turned into real infrastructure the team relies on daily.&lt;/p&gt;

&lt;p&gt;A few things I'd tell anyone starting from zero:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don't need to know everything upfront. Start with the smallest components and let the architecture reveal itself.&lt;/li&gt;
&lt;li&gt;Treat accessibility like functionality. If it doesn't work with a keyboard, it's not done.&lt;/li&gt;
&lt;li&gt;Automate early. Setting up CI/CD for publishing and deployment saved me more time than I expected.&lt;/li&gt;
&lt;li&gt;Document everything. Storybook isn't just a demo tool. It's how the team actually adopts the library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap between "I have no idea what to do" and "this is running in production" is smaller than you think. It's just a lot of small steps.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>a11y</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Building My First Wagtail Site</title>
      <dc:creator>Praise Agbabiaka</dc:creator>
      <pubDate>Mon, 30 Oct 2023 04:09:01 +0000</pubDate>
      <link>https://dev.to/praiztech/building-my-first-wagtail-site-3hj7</link>
      <guid>https://dev.to/praiztech/building-my-first-wagtail-site-3hj7</guid>
      <description>&lt;p&gt;Software development is an ever-changing field. Often, one has to pick up new technologies rather quickly. This was the case for me with Wagtail. And thanks to its simplicity, I was able to do so in no time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Wagtail?
&lt;/h2&gt;

&lt;p&gt;An opportunity to improve the accessibility of websites built with Wagtail opened up recently. And I immediately jumped on it. I was so excited at the prospect of putting my accessibility skills to use that I didn’t give much thought to the fact that I had no experience with Wagtail. I figured I could pick up Wagtail quickly enough if I put my mind to it. And since I learn best by doing, I decided to build a blog site to gain hands-on experience with Wagtail.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Wagtail?
&lt;/h2&gt;

&lt;p&gt;Wagtail is an open-source Content Management System built on Django. So, much of the process for building websites with Django translates directly to Wagtail. But Wagtail abstracts the need to define &lt;code&gt;urls&lt;/code&gt;, &lt;code&gt;views&lt;/code&gt; and &lt;code&gt;admin&lt;/code&gt; functionality. In Wagtail, emphasis is placed on page and page content. Every page is built from a Django model that inherits from Wagtail’s &lt;code&gt;Page&lt;/code&gt; model. Wagtail also provides a number of custom template tags and filters that extend the capabilities of the Django templating engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Blog Site
&lt;/h2&gt;

&lt;p&gt;I decided that my blog site would have a home page, a blog index page, blog post pages, and an about page. Since a home app comes out of the box with Wagtail, I only had to create a base and blog app for my Wagtail project.&lt;/p&gt;

&lt;p&gt;In the home app, I updated the &lt;code&gt;HomePage&lt;/code&gt; model to include fields for a hero image, heading, introduction and link to the blog index page. I defined the image and link fields as a &lt;code&gt;Foreignkey&lt;/code&gt; to Wagtail’s &lt;code&gt;Image&lt;/code&gt; and &lt;code&gt;Page&lt;/code&gt; models, respectively.&lt;/p&gt;

&lt;p&gt;As the name suggests, the base app defined functionalities shared across apps within the project. It contained &lt;code&gt;snippets&lt;/code&gt; for the site logo, main menu and breadcrumb navigation. Within this app, I constructed a &lt;code&gt;ContentBlock&lt;/code&gt; that allowed me to dynamically add subheading, image, list and rich text content to a page. This &lt;code&gt;ContentBlock&lt;/code&gt; inherited from &lt;code&gt;StreamBlock&lt;/code&gt;. It was used to define a &lt;code&gt;StreamField&lt;/code&gt; to populate the body field of the about and blog post pages. Because the about page didn’t belong in the home or blog app, I defined a &lt;code&gt;StandardPage&lt;/code&gt; model to create it.&lt;/p&gt;

&lt;p&gt;The blog app held models and templates for the blog index page and blog post pages. I defined the &lt;code&gt;BlogPage&lt;/code&gt; model as child page of the &lt;code&gt;BlogIndexPage&lt;/code&gt;. And I populated the blog index page with meta data for each blog post. Thus, a new blog site was built.&lt;/p&gt;

&lt;p&gt;I’m glad that I can now add Wagtail to my toolkit as a web developer. If you’d like to see my code, check out the &lt;a href="https://github.com/praiztech/praiztech_blog" rel="noopener noreferrer"&gt;praiztech_blog repository on GitHub&lt;/a&gt;. I'm still working on the front-end, though.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>webdev</category>
      <category>python</category>
      <category>django</category>
    </item>
    <item>
      <title>Growing My Skill in Web Accessibility</title>
      <dc:creator>Praise Agbabiaka</dc:creator>
      <pubDate>Fri, 27 Oct 2023 12:21:44 +0000</pubDate>
      <link>https://dev.to/praiztech/growing-my-skill-in-web-accessibility-2bij</link>
      <guid>https://dev.to/praiztech/growing-my-skill-in-web-accessibility-2bij</guid>
      <description>&lt;p&gt;As a self-taught web developer, my first impulse whenever I encounter a new concept is to search the Web. There's almost always a blog post or video that explains it in enough detail to help me understand. For the most part, this has been no different for web accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Online Resources
&lt;/h2&gt;

&lt;p&gt;Once I learnt about &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Accessibility" rel="noopener noreferrer"&gt;web accessibility on Mozilla&lt;/a&gt;, it was quite easy to find other related posts. I found several excellent posts to expand my knowledge of accessible web development. I learnt to write accessible code with semantic Hypertext Markup Language (HTML) elements. I also learnt to test my websites with automated testing tools such as WAVE, axe DevTools and ARC Toolkit. To understand how blind users experience my websites, I learnt to test with NVDA and TalkBack screen readers. I also learnt to enhance the output of screen readers with Accessible Rich Internet Applications (ARIA) when there are no HTML alternatives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning from a Great Mentor
&lt;/h2&gt;

&lt;p&gt;As my knowledge of web accessibility grew, I realized that I was lacking an important skill. I didn't know how to perform a manual accessibility audit. I searched the Web but I couldn't find a simple guide on the process of manual accessibility testing. Yet, I knew I had to gain this skill. Manual auditing is the only way to identify all accessibility issues on a website.&lt;/p&gt;

&lt;p&gt;So, when Rachele DiTullio posted on LinkedIn that they had created &lt;a href="https://racheleditullio.com/projects/accessibility-testing/" rel="noopener noreferrer"&gt;manual accessibility audit videos&lt;/a&gt;, I was excited. First, I watched the videos to understand their testing process. Then, I sent them an email requesting their mentorship. They were very receptive and agreed to mentor me. They agreed to provide weekly testing exercises and give feedback on the results. Thus began my journey into manual web accessibility auditing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzthbqwtwsfibuj8v6gp.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzthbqwtwsfibuj8v6gp.PNG" alt="A worksheet in a manual accessibility testing workbook showing the scope of the test" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br&gt;&lt;strong&gt;My first manual accessibility testing workbook&lt;/strong&gt;
  &lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Journey So Far
&lt;/h2&gt;

&lt;p&gt;As I've performed manual accessibility audits, my skill have evolved over time. I've learnt to break down each webpage into smaller sections to test. I'm learning to better interpret the Web Content Accessibility Guidelines (WCAG). I'm learning how WCAG failures impact the web experience of users with disabilities. It's a journey. I'm getting better at it. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>webaccessibility</category>
      <category>accessiblecode</category>
      <category>a11y</category>
    </item>
  </channel>
</rss>
