<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>VeriWasp Docs Blog</title>
        <link>https://veriwasp.com/docs/learn</link>
        <description>VeriWasp Docs Blog</description>
        <lastBuildDate>Sat, 18 Jul 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[The accessibility issues that show up most (and how to fix them)]]></title>
            <link>https://veriwasp.com/docs/learn/common-accessibility-issues</link>
            <guid>https://veriwasp.com/docs/learn/common-accessibility-issues</guid>
            <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The handful of WCAG failures that account for most of what an accessibility scan finds: low color contrast, missing alt text, unlabeled form fields, keyboard traps, broken heading order, and color-only links. What each one is, who it affects, and how to fix it.]]></description>
            <content:encoded><![CDATA[<p>Accessibility can feel like an endless spec, but in practice a small number of issues account for the large majority of what any scan finds. Fix these and you clear most of the gap to WCAG 2.1 AA. Here is the short list, what each one means, who it hurts, and how to fix it.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-low-color-contrast">1. Low color contrast<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#1-low-color-contrast" class="hash-link" aria-label="Direct link to 1. Low color contrast" title="Direct link to 1. Low color contrast" translate="no">​</a></h2>
<p><strong>What it is.</strong> Text or interactive elements that do not stand out enough from their background. WCAG asks for a contrast ratio of at least 4.5:1 for normal text, and 3:1 for large text and for user interface components like icons and input borders.</p>
<p><strong>Who it affects.</strong> Anyone with low vision or color vision differences, and honestly everyone on a dim laptop screen in a bright room.</p>
<p><strong>How to fix it.</strong> Check your palette with a contrast checker and darken text or lighten backgrounds until it passes. The common trap is light gray "secondary" text and faint placeholder text, both of which fail constantly. Brand colors used for buttons and links are the next most frequent offender.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-missing-or-meaningless-alt-text">2. Missing or meaningless alt text<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#2-missing-or-meaningless-alt-text" class="hash-link" aria-label="Direct link to 2. Missing or meaningless alt text" title="Direct link to 2. Missing or meaningless alt text" translate="no">​</a></h2>
<p><strong>What it is.</strong> Images that carry information but have no text alternative, so a screen reader announces nothing useful (or reads out a filename like <code>IMG_2157.jpeg</code>).</p>
<p><strong>Who it affects.</strong> Screen reader users, and anyone on a slow connection where images fail to load.</p>
<p><strong>How to fix it.</strong> Give every meaningful image alt text that describes its purpose, not its appearance. A logo's alt should be the company name, a chart's alt should state the takeaway. Decorative images that add nothing should have an empty alt (<code>alt=""</code>) so assistive technology skips them rather than announcing clutter.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-form-fields-without-labels">3. Form fields without labels<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#3-form-fields-without-labels" class="hash-link" aria-label="Direct link to 3. Form fields without labels" title="Direct link to 3. Form fields without labels" translate="no">​</a></h2>
<p><strong>What it is.</strong> Inputs where the only visible cue is a placeholder, or a label that is not programmatically connected to its field.</p>
<p><strong>Who it affects.</strong> Screen reader users, who hear an unlabeled "edit text" with no idea what to type, and anyone relying on voice control to target fields by name.</p>
<p><strong>How to fix it.</strong> Every input needs a real label associated with it (a <code>&lt;label for&gt;</code> tied to the input's id, or an <code>aria-label</code>). Placeholders are not labels: they vanish the moment someone starts typing, and their contrast is usually too low anyway.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-no-keyboard-access">4. No keyboard access<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#4-no-keyboard-access" class="hash-link" aria-label="Direct link to 4. No keyboard access" title="Direct link to 4. No keyboard access" translate="no">​</a></h2>
<p><strong>What it is.</strong> Interfaces you can only use with a mouse: custom dropdowns that do not open on Enter, modals that trap focus, scrollable regions a keyboard cannot reach, or elements with no visible focus outline.</p>
<p><strong>Who it affects.</strong> People who cannot use a mouse, including many motor-impaired users and most screen reader users, plus keyboard power users.</p>
<p><strong>How to fix it.</strong> Tab through your whole app without touching the mouse. Every interactive element should be reachable, operable with Enter or Space, and should show a clear focus ring. Do not remove focus outlines in CSS without replacing them with something equally visible.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-broken-heading-order">5. Broken heading order<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#5-broken-heading-order" class="hash-link" aria-label="Direct link to 5. Broken heading order" title="Direct link to 5. Broken heading order" translate="no">​</a></h2>
<p><strong>What it is.</strong> Headings that skip levels (an <code>h1</code> followed by an <code>h3</code>) or are used for styling rather than structure.</p>
<p><strong>Who it affects.</strong> Screen reader users navigate by heading the way sighted users skim by eye. A broken outline makes a page hard to navigate and hard to understand.</p>
<p><strong>How to fix it.</strong> Use one <code>h1</code> per page, then nest headings in order without skipping. If you want a smaller heading, style it with CSS. Do not reach for a lower heading level just to get smaller text.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-links-you-can-only-tell-apart-by-color">6. Links you can only tell apart by color<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#6-links-you-can-only-tell-apart-by-color" class="hash-link" aria-label="Direct link to 6. Links you can only tell apart by color" title="Direct link to 6. Links you can only tell apart by color" translate="no">​</a></h2>
<p><strong>What it is.</strong> Inline links that look identical to the surrounding text except for their color. WCAG requires that links in a block of text be distinguishable by something other than color alone, unless the color contrast against the surrounding text is at least 3:1.</p>
<p><strong>Who it affects.</strong> People with color vision differences, who may not see the color cue at all.</p>
<p><strong>How to fix it.</strong> Underline inline links, or ensure the link color has enough contrast against the body text (not just the background). Underlines are the simplest, most universally understood signal.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-start">Where to start<a href="https://veriwasp.com/docs/learn/common-accessibility-issues#where-to-start" class="hash-link" aria-label="Direct link to Where to start" title="Direct link to Where to start" translate="no">​</a></h2>
<p>If you do nothing else, run an automated scan first. These six categories are exactly what an automated pass detects reliably and quickly, which is why it is the right first step before any manual review: the machine handles the mechanical, high-volume failures, and you spend human attention on the judgment calls it cannot make.</p>
<p>VeriWasp's <a href="https://veriwasp.com/scan" target="_blank" rel="noopener noreferrer" class="">free accessibility scanner</a> crawls your site, runs a real WCAG check on each page, and groups the results by rule so you see "12 images missing alt text across 3 pages" as one line item to work through, not a scattered list. Knowing which of these six is actually hurting you is most of the battle.</p>]]></content:encoded>
            <category>accessibility</category>
            <category>wcag</category>
        </item>
        <item>
            <title><![CDATA[Test your signup flow before your users do]]></title>
            <link>https://veriwasp.com/docs/learn/test-your-signup-flow</link>
            <guid>https://veriwasp.com/docs/learn/test-your-signup-flow</guid>
            <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Signup is the highest-stakes flow in most SaaS products, and it breaks in quiet ways manual testing misses: silent JavaScript errors, failed API calls, broken redirects, and email that never arrives. Here is what goes wrong and how to catch it.]]></description>
            <content:encoded><![CDATA[<p>Your signup flow is the one path every customer has to complete, and it is usually the least tested. You built it early, it worked, and you moved on. Meanwhile it quietly depends on your auth provider, your email service, a database write, a redirect, and a pile of client-side JavaScript, any of which can break without throwing an obvious error. When signup breaks, you do not get a bug report. You get silence, and a conversion number that drifts down for reasons nobody can explain.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-signup-breaks-so-quietly">Why signup breaks so quietly<a href="https://veriwasp.com/docs/learn/test-your-signup-flow#why-signup-breaks-so-quietly" class="hash-link" aria-label="Direct link to Why signup breaks so quietly" title="Direct link to Why signup breaks so quietly" translate="no">​</a></h2>
<p>Most flows fail loudly: a 500 page, a red error, a stack trace. Signup tends to fail in ways that still look fine on the surface.</p>
<ul>
<li class=""><strong>A silent JavaScript error.</strong> The form submits, the account is created, but a script that renders the welcome state throws, and the user lands on a blank or half-broken dashboard. The server thinks everything succeeded.</li>
<li class=""><strong>A failed background request.</strong> The page loads, then a <code>fetch</code> to load the user's profile returns a 404 or malformed JSON, and the personalized part of the app never appears. Nothing on the server logs an error, because the request that failed was a client-side one.</li>
<li class=""><strong>A broken redirect.</strong> After signup the app is supposed to send the user somewhere useful and sends them to a dead route, or back to the signup form, or into a loop.</li>
<li class=""><strong>Email that never arrives.</strong> Magic links and confirmation emails depend on a third party, a verified sending domain, and a spam reputation you do not fully control. When they land in spam or hit a quota, the user simply cannot finish, and you never hear about it.</li>
</ul>
<p>None of these show up in a unit test, because the unit test mocks away exactly the integration points that fail. They only appear when something drives the real flow in a real browser against your real deployment.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="manual-testing-is-not-enough">Manual testing is not enough<a href="https://veriwasp.com/docs/learn/test-your-signup-flow#manual-testing-is-not-enough" class="hash-link" aria-label="Direct link to Manual testing is not enough" title="Direct link to Manual testing is not enough" translate="no">​</a></h2>
<p>The usual answer is "we test signup by hand before a release." That catches the obvious breaks, but it has three problems. It is slow, so it happens rarely. It is done by someone who already has an account and knows the happy path, so they skip the edge cases. And it is not repeatable, so a regression that sneaks in next week goes unnoticed until a customer hits it.</p>
<p>The flows that matter most are the ones worth testing automatically, on every deploy, the same way every time.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-good-coverage-looks-like">What good coverage looks like<a href="https://veriwasp.com/docs/learn/test-your-signup-flow#what-good-coverage-looks-like" class="hash-link" aria-label="Direct link to What good coverage looks like" title="Direct link to What good coverage looks like" translate="no">​</a></h2>
<p>A useful signup test does what a new user does, in a real browser:</p>
<ol>
<li class="">Load the page and confirm it renders without console errors.</li>
<li class="">Fill in the form with fresh data (a unique email each run, so the second run does not collide with the first).</li>
<li class="">Submit, and confirm the account is actually created.</li>
<li class="">Confirm the user lands where they should, with the personalized state rendered, not a blank shell.</li>
<li class="">Watch the network and the console the whole time, so a failed background request or a thrown script is caught even when the page looks fine.</li>
</ol>
<p>That last point is the one manual testing almost always misses. The page can look completely normal while a request fails in the background, and only a tool watching the console and network traffic will notice.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-veriwasp-fits">How VeriWasp fits<a href="https://veriwasp.com/docs/learn/test-your-signup-flow#how-veriwasp-fits" class="hash-link" aria-label="Direct link to How VeriWasp fits" title="Direct link to How VeriWasp fits" translate="no">​</a></h2>
<p>This is exactly what a VeriWasp playtest does. You describe the flow in plain English, and Claude drives a real browser through it: loads the page, fills the form, clicks the button, and checks that the welcome state appears. Throughout, it captures every console error and failed network request and ties each one to the step that caused it, so a signup that "looks fine" but silently fails its profile load comes back as a clear finding with the 404 and the console error attached, not a green check.</p>
<p>Wire it into your deploy pipeline and it runs on every ship, so the day something breaks your signup, you find out before your users do. You can <a href="https://veriwasp.com/signup" target="_blank" rel="noopener noreferrer" class="">try it against your own app</a> with a few free runs, no card required.</p>
<p>The flow every customer must complete deserves better than a manual click-through you do twice a month. Test it like it matters, because it does.</p>]]></content:encoded>
            <category>testing</category>
            <category>playtests</category>
            <category>reliability</category>
        </item>
        <item>
            <title><![CDATA[What is WCAG, and why it matters for your SaaS]]></title>
            <link>https://veriwasp.com/docs/learn/what-is-wcag</link>
            <guid>https://veriwasp.com/docs/learn/what-is-wcag</guid>
            <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A plain-English guide to the Web Content Accessibility Guidelines: the POUR principles, the A/AA/AAA conformance levels, why AA is the practical target, and the legal, business, and UX reasons accessibility matters.]]></description>
            <content:encoded><![CDATA[<p>WCAG, the Web Content Accessibility Guidelines, is the standard that defines what it means for a website to be usable by people with disabilities. If you have ever wondered whether your SaaS is "accessible enough," WCAG is the yardstick almost everyone (including courts and procurement teams) actually measures against.</p>
<p>Here is what it is, how it is structured, and why it is worth caring about even before anyone forces you to.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-wcag-actually-is">What WCAG actually is<a href="https://veriwasp.com/docs/learn/what-is-wcag#what-wcag-actually-is" class="hash-link" aria-label="Direct link to What WCAG actually is" title="Direct link to What WCAG actually is" translate="no">​</a></h2>
<p>WCAG is published by the W3C, the same standards body behind HTML and CSS. It is not a law and not a piece of software. It is a set of testable success criteria: concrete statements like "text has a contrast ratio of at least 4.5:1 against its background" or "every form control has a label." Laws and contracts around the world then point at WCAG as the definition of "accessible," which is why it has become the de facto global standard.</p>
<p>The version you want to target today is WCAG 2.1 (or 2.2, which adds a handful of criteria). WCAG 3.0 is in draft and years away from being the reference anyone requires.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-four-principles-pour">The four principles: POUR<a href="https://veriwasp.com/docs/learn/what-is-wcag#the-four-principles-pour" class="hash-link" aria-label="Direct link to The four principles: POUR" title="Direct link to The four principles: POUR" translate="no">​</a></h2>
<p>Every WCAG criterion rolls up into one of four principles, easy to remember as POUR:</p>
<ul>
<li class=""><strong>Perceivable.</strong> Users can perceive the content through some sense. Images need text alternatives, video needs captions, and color alone can never be the only way information is conveyed.</li>
<li class=""><strong>Operable.</strong> Users can operate the interface. Everything works with a keyboard, not just a mouse, and nothing traps focus or flashes in a way that could trigger seizures.</li>
<li class=""><strong>Understandable.</strong> Content and controls behave predictably. Form errors are explained in text, labels are clear, and the interface does not surprise the user.</li>
<li class=""><strong>Robust.</strong> The markup is clean enough that assistive technology (screen readers, switch devices, voice control) can interpret it reliably.</li>
</ul>
<p>If you internalize nothing else, POUR is a good filter: when you build a new feature, ask whether someone could perceive it, operate it, understand it, and whether a screen reader could make sense of it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-three-levels-a-aa-aaa">The three levels: A, AA, AAA<a href="https://veriwasp.com/docs/learn/what-is-wcag#the-three-levels-a-aa-aaa" class="hash-link" aria-label="Direct link to The three levels: A, AA, AAA" title="Direct link to The three levels: A, AA, AAA" translate="no">​</a></h2>
<p>WCAG sorts its criteria into three conformance levels:</p>
<ul>
<li class=""><strong>Level A</strong> is the floor. Failing these makes content genuinely unusable for some people (an image button with no label, a video with no captions at all).</li>
<li class=""><strong>Level AA</strong> is the practical target. It covers the things that make a site usable rather than merely possible to use: color contrast, resizable text, consistent navigation, visible focus, and clear error handling.</li>
<li class=""><strong>Level AAA</strong> is the gold standard, but it is not expected for a whole site. Some AAA criteria are impractical or even conflicting for certain content, so almost no one commits to full AAA.</li>
</ul>
<p>When a law, a contract, or a customer says "must be accessible," they almost always mean <strong>WCAG 2.1 Level AA</strong>. That is the number to aim for.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-it-matters-beyond-the-checkbox">Why it matters, beyond the checkbox<a href="https://veriwasp.com/docs/learn/what-is-wcag#why-it-matters-beyond-the-checkbox" class="hash-link" aria-label="Direct link to Why it matters, beyond the checkbox" title="Direct link to Why it matters, beyond the checkbox" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="real-people-more-than-you-think">Real people, more than you think<a href="https://veriwasp.com/docs/learn/what-is-wcag#real-people-more-than-you-think" class="hash-link" aria-label="Direct link to Real people, more than you think" title="Direct link to Real people, more than you think" translate="no">​</a></h3>
<p>Around one in five people has a disability of some kind, and that number understates the reach. Accessibility also covers temporary situations (a broken arm, bright sunlight on a phone screen) and permanent ones (low vision, color blindness, motor differences). Building for accessibility is building for a much larger slice of your users than the label suggests.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-legal-reality">The legal reality<a href="https://veriwasp.com/docs/learn/what-is-wcag#the-legal-reality" class="hash-link" aria-label="Direct link to The legal reality" title="Direct link to The legal reality" translate="no">​</a></h3>
<p>In the United States, the Americans with Disabilities Act has been applied to websites, and WCAG 2.1 AA is the benchmark courts and settlements reference. Web accessibility demand letters and lawsuits number in the thousands each year, and they increasingly target small companies, not just household names. Public sector and enterprise buyers go further: Section 508 in the US and EN 301 549 in the EU both require WCAG conformance, so an accessibility gap can quietly disqualify you from a deal before anyone even tells you why.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="it-overlaps-with-things-you-already-care-about">It overlaps with things you already care about<a href="https://veriwasp.com/docs/learn/what-is-wcag#it-overlaps-with-things-you-already-care-about" class="hash-link" aria-label="Direct link to It overlaps with things you already care about" title="Direct link to It overlaps with things you already care about" translate="no">​</a></h3>
<p>Most accessibility work is also good engineering. Semantic HTML, meaningful alt text, proper headings, and labeled controls are exactly what search engines parse to understand your page, so accessibility and SEO pull in the same direction. Clear focus states, readable contrast, and predictable forms reduce support tickets and lift conversion for everyone, not only users with disabilities. Accessibility is rarely a tax you pay for a minority; it is usually a quality bar that helps the whole product.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-aa-conformance-looks-like-in-practice">What AA conformance looks like in practice<a href="https://veriwasp.com/docs/learn/what-is-wcag#what-aa-conformance-looks-like-in-practice" class="hash-link" aria-label="Direct link to What AA conformance looks like in practice" title="Direct link to What AA conformance looks like in practice" translate="no">​</a></h2>
<p>You do not need to memorize the spec to get most of the way there. A large share of real-world failures come down to a short list:</p>
<ul>
<li class="">Text and interactive elements meet contrast ratios (4.5:1 for normal text, 3:1 for large text and UI components).</li>
<li class="">Every image that carries meaning has alt text, and decorative images are marked so screen readers skip them.</li>
<li class="">Every form field has a programmatic label, not just a placeholder.</li>
<li class="">The whole interface works with a keyboard, and the focused element is always visible.</li>
<li class="">Headings describe the page structure in order, without skipping levels.</li>
<li class="">Links are distinguishable from surrounding text by more than color alone.</li>
</ul>
<p>Get those right and you have cleared the majority of what an audit will flag.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-check-your-own-site">How to check your own site<a href="https://veriwasp.com/docs/learn/what-is-wcag#how-to-check-your-own-site" class="hash-link" aria-label="Direct link to How to check your own site" title="Direct link to How to check your own site" translate="no">​</a></h2>
<p>You cannot fix what you cannot see, and manual review misses a lot. Automated tools catch the mechanical failures (contrast, missing alt text, unlabeled controls, heading order) quickly and consistently, which is the right first pass before any human review.</p>
<p>VeriWasp runs a real WCAG scan on every page it tests, and the <a href="https://veriwasp.com/scan" target="_blank" rel="noopener noreferrer" class="">free accessibility scanner</a> will crawl your site and group its findings by rule, so "color contrast too low on 72 elements across 5 pages" reads as one issue to fix, not seventy-two. It is a fast, honest way to see where you actually stand against AA before you decide what to do about it.</p>
<p>Accessibility is not a one-time project you finish. It is a quality bar you hold as you ship. Knowing where you stand today is the first step.</p>]]></content:encoded>
            <category>accessibility</category>
            <category>wcag</category>
        </item>
    </channel>
</rss>