<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
                        <id>https://andycarter.dev/rss</id>
                                <link href="https://andycarter.dev/rss" rel="self"></link>
                                <title><![CDATA[Andy Carter]]></title>
                    
                                <subtitle></subtitle>
                                                    <updated>2026-05-18T10:25:00+00:00</updated>
                        <entry>
            <title><![CDATA[A perfect Lighthouse score doesn’t mean an accessible website]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/a-perfect-lighthouse-score-doesnt-mean-an-accessible-website" />
            <id>https://andycarter.dev/blog/a-perfect-lighthouse-score-doesnt-mean-an-accessible-website</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Chrome’s Lighthouse provides an invaluable tool for identifying accessibility concerns. However, people often misunderstand what the given score means.</p>
<p>Far too many times, I’ve seen people confidently claim that their website is accessible because they’re scoring 100% for accessibility in Lighthouse. This is not what the metric is telling us; it’s really important that we understand this.</p>
<p>Lighthouse, like other accessibility tools, is limited by what can be effectively tested through automation. Things like meaningful link text, resizable text and clear keyboard navigation require manual, real user testing.</p>
<h2>Robson Square</h2>
<p>The Robson Square steps in Vancouver architecturally look beautiful and at first glance look accessible. There’s a ramp that zig-zags up the incline and handrails at the edges. However, looks can be deceiving. These steps present many accessibility issues:</p>
<ul>
<li>The ramp is too steep: the excessive incline is dangerous for most wheelchair users.</li>
<li>There are lots of trip hazards: the monochromatic concrete design makes it hard for visually impaired people to differentiate between the steps and ramp.</li>
<li>There’s a lack of safety railings: this creates a risk of falling for many people.</li>
</ul>
<p>At the time of construction, the steps were built to meet the accessibility requirements of the day. If Lighthouse could assess real world architecture, they’d have scored 100.</p>
<figure>
  <iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/Yv6izkxhAEA?si=DMQvNakea-ikuqCo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
  <figcaption>CBC News</figcaption>
</figure>
<h2>Lighthouse</h2>
<p>Tools like Lighthouse aren’t bad. They’re useful for catching technical accessibility issues. However, we need to remember who we are checking accessibility for.</p>
<p>Accessibility issues are human-centred problems. There’s only so far automation can go before we need to do real-person testing. Lighthouse can’t replicate the lived experience.</p>
<p>Lighthouse is at its most useful when the returned score is below 100. Not because this is a desired result, but because this is when it highlights possible issues worth investigating.</p>
<p>A score of 100 also doesn’t imply that the potential issues Lighthouse can test for aren’t still problematic. You may have provided alt text for all images, but whether that alt text is useful is another matter.</p>
<p>It is possible to get a 100% accessible Lighthouse score for the <a href="https://www.matuzo.at/blog/building-the-most-inaccessible-site-possible-with-a-perfect-lighthouse-score/">most inaccessible site</a>.</p>
<p>We need to recognise the limitations of Lighthouse and other automated testing tools for accessibility. Getting a perfect Lighthouse score is just the first step towards building an accessible Web.</p>
]]>
            </summary>
                                    <updated>2026-05-18T10:25:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[The final All Day Hey]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/the-final-all-day-hey" />
            <id>https://andycarter.dev/blog/the-final-all-day-hey</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Yesterday, I attended the final, and my first, <a href="https://heypresents.com/conferences/2026">All Day Hey</a> with some of team Evoluted. I’ve come away feeling very enthusiastic and motivated about the Web.</p>
<p>These current times can seem strange, and sometimes even scary, for our industry. In the last few years AI has become a major disruptor. So it was refreshing to see so many talks demonstrating the power of human creativity and engineering; people from our industry who care about the Web and the people it serves.</p>
<p>It was also great getting to meet so many new and old friends at the conference and evening social. Community is so important. Keeping connected with real people really helps us move forward, and build better.</p>
<p>I’m now super excited about heading to Hull next month for <a href="https://www.developersupnorth.co.uk/">Developers Up North</a>. This should be another great community-led conference. Plus, I’ll be on stage speaking at this event.</p>
]]>
            </summary>
                                    <updated>2026-05-08T08:28:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Toast notifications are now a Laravel default — that's a problem]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/toast-notifications-are-now-a-laravel-default-thats-a-problem" />
            <id>https://andycarter.dev/blog/toast-notifications-are-now-a-laravel-default-thats-a-problem</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Last week I read that <a href="https://laravel-news.com/laravel-starter-kits-now-include-toast-notifications">Laravel’s starter kits now ship with Toast notifications by default</a>. Many seem excited about the news. I’m not one of them.</p>
<p>Toast notifications may look clean and modern, but they pose serious issues for many people. I believe that making them a default in a popular framework like Laravel is a wrong direction.</p>
<p>Let me explain why this is a poor choice, and why it should matter to you, even if you consider yourself a backend developer.</p>
<h2>What’s wrong with Toast notifications?</h2>
<h3>They can be invisible to screen reader users</h3>
<p>If a Toast notification isn’t correctly set up with an ARIA live  region, screen reader users will not hear it. Screen readers are used by those who are blind, visually impaired or have other disabilities like dyslexia.</p>
<p>In fairness to Laravel, my initial tests with two screen readers did announce the notifications. I set up a basic Laravel app using the Livewire starter kit and tested the settings page. I tested with the widely used NVDA screen reader and MacOS’s inbuilt VoiceOver.</p>
<p>Whether the Toast notifications remain discoverable to screen readers as an app develops remains unclear.</p>
<h3>They disappear before many users can read them</h3>
<p>Cognitive impairments are common. They can impact the speed at which someone processes information, or cause attention difficulties. The short-lived nature of Toast notifications means that many users will not have chance to read them.</p>
<p>Once the notification has disappeared, some will be left unaware of the status of the process they’ve just triggered. This leaves the user having to guess, refresh or simply try again.</p>
<p>You don’t have to have a cognitive impairment for this to affect you. If a user is distracted — perhaps a colleague interrupts them or the phone rings — they miss the notification too.</p>
<h3>They appear off-screen for screen magnification users</h3>
<p>For those with a visual impairment, screen magnification is a commonly used assistive technology. For these users, they typically only see a fraction of the screen at a given time.</p>
<figure>
<img src="/assets/laravel-toast-notifications/magnification-toast-notification.jpg" alt="Screenshot representing how only a small fraction of the viewport is visible when using screen magnification" />
<figcaption>Representation of the visible area of the viewport when screen magnification is used. The Toast notification is hidden off-screen in the bottom right.</figcaption>
</figure>
<p>Toast notifications typically appear in the corner of the viewport. For screen magnification users, these notifications will often appear off-screen with no indication of any status change.</p>
<p>As someone who <a href="/blog/world-keratoconus-day">regularly needs to use screen magnification</a>, this is a real problem.</p>
<h3>They break when users increase text size</h3>
<p>Lots of users choose to change their browser’s default text size. A Dutch study has found that <a href="https://appt.org/en/stats">26% of smartphone users increase the text size</a>.</p>
<p>A well-configured app will scale text to support the user’s preferences. This should include Toast notifications.</p>
<p>My quick tests of Laravel’s Toast notifications revealed that they do scale with the browsers text size settings. However, this does reveal another common issue with Toast notifications: the text can overflow the viewport.</p>
<figure>
<img src="/assets/laravel-toast-notifications/toast-text-size.jpg" alt="Mobile device with large text size showing a Toast notification that overflows the viewport" />
<figcaption>Mobile device with large text size enabled. The Toast notification overflows the viewport with only some of the text visible.</figcaption>
</figure>
<p>When the notification doesn’t fit the viewport, it means some of the text becomes hidden to the user.</p>
<h3>Keyboard users should be able to dismiss them</h3>
<p>If a user is navigating by keyboard, they should be able to tab to close it as soon as it appears. However, the close button of a Toast notification is often not the next logical focusable element.</p>
<p>My tests with Laravel’s implementation revealed it is possible to dismiss the notification with the keyboard, but navigating to the close button was problematic. It was not the next element in the tab sequence.</p>
<h2>The real cost of Toast notifications</h2>
<p>When a notification fails to be fully perceived by a user, they lose confidence in your app.</p>
<p>Did a form submit? Was a payment successful? Did the file upload? If the only way to confirm is by refreshing the page and checking for yourself, you have a problem. If this becomes a repeated experience, you lose a user.</p>
<p>Accessibility failures don’t just impact a small group of edge case users. Disabilities affect a large number of people, we just often don’t recognise this.</p>
<p>Accessibility failures can also impact everyone when we find ourselves in situations that affect our workflow: a user that is stressed, distracted or mentally fatigued; or someone that is using a screen in bright sunlight.</p>
<p>When we build applications that work for those with assistive needs, we build for everyone.</p>
<h2>Why this is a backend developer’s problem</h2>
<p>As backend developers, we often hold a lot of influence over choice of framework and starter kit.</p>
<p>Admin panels and internal tooling are often built entirely by backend engineers; frontend developers and UX specialists often never get involved. It means user experience and accessibility are often forgotten.</p>
<p>Backend developers rarely talk about accessibility. Either through a lack of awareness or a misplaced assumption that it is someone else’s problem. However, our decisions often have a direct impact on the people that need accessibility considerations.</p>
<p>The people that use are apps are real. Many have assistive needs. They deserve to be able to work with the tools we build like everyone else.</p>
<p>When you choose a framework, starter kit or UI component library, you are making an accessibility decision. When you choose to use a default that creates barriers for many users, you are making an accessibility decision. This is your choice, and your responsibility.</p>
<h2>The alternative</h2>
<p>Instead of using Toast notifications, we should use a more inclusive solution. I would recommend using inline notifications that respect the user’s text sizing preferences; and if you must make them dismissible, let the user decide when they want the message to disappear.</p>
<p>Good notifications should be persistent and visible.</p>
<p>Accessibility is more than a frontend developer or UX specialist’s problem. It’s an engineering problem. We must recognise that the decisions we make have consequences. Enabling Toast notifications by default is one of them.</p>
]]>
            </summary>
                                    <updated>2026-04-20T09:15:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[The importance of captions: ensuring your content is heard]]></title>
            <link rel="alternate" href="https://www.evoluted.net/blog/design/the-importance-of-captions" />
            <id>https://www.evoluted.net/blog/design/the-importance-of-captions</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[]]>
            </summary>
                                    <updated>2026-04-13T00:00:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[2026's WebAIM Million report suggests we're regressing]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/2026s-webaim-million-report-suggests-were-regressing" />
            <id>https://andycarter.dev/blog/2026s-webaim-million-report-suggests-were-regressing</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>This year’s <a href="https://webaim.org/projects/million/">WebAIM Million report</a> is out. As always, it provides an interesting insight into how well we’re doing as an industry building an accessible Web.</p>
<p>Sadly, the findings aren’t encouraging. The slow progress made in past years is being undone. Not only are we still failing to get the basics right, things have actually gotten worse since 2025.</p>
<p><img src="/assets/webaim-million-2026.png" alt="Chart illustrating the percentage of homepages with the six most frequently detected WCAG failures over the past eight years." /></p>
<p>Homepages are becoming more complex, and with that complexity comes reduced accessibility. In just one year, the average number of elements on a homepage has increased by 22.5%.</p>
<p>When we don’t take accessibility into account, we inadvertently create barriers that exclude many people from using our sites. Those excluded users are our friends, family and neighbours. They are potential customers unable to complete a purchase. We can and need to do better.</p>
<p>A good starting point is to review your own websites for the six most common issues highlighted by WebAIM’s report. These six account for 96% of all detected errors. Addressing these would make a meaningful difference to your users.</p>
]]>
            </summary>
                                    <updated>2026-04-01T16:00:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Is your code ready for summer time?]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/is-your-code-ready-for-summer-time" />
            <id>https://andycarter.dev/blog/is-your-code-ready-for-summer-time</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>This weekend in the UK, the clocks jump forward. For developers, this is more than a lost hour of sleep. It’s a test of how our code handles shifts in timezones.</p>
<p>On Sunday, clocks go forward an hour at 1am. In other words, we go from 00:59 to 02:00.</p>
<p>It’s easy for us to write code for the ‘now’ and forget that twice a year we shift timezones. This often trips people up, especially early in their careers. Sometimes, the consequences of this oversight can lead to big headaches the day after the clocks have changed.</p>
<p>What things do you need to check ahead of the switch to summer time at the end of this week? Here are some suggestions.</p>
<h2>Scheduled jobs</h2>
<p>If you have automated jobs scheduled, do these fall within the skipped hour? What will happen when these fail to run? Similarly, when we fall back to GMT in the autumn, what happens if these jobs run twice?</p>
<h2>Third-party integrations</h2>
<p>If your code talks to remote APIs, are assumptions made about the timezones in the two systems? If the API uses UTC, but you’re passing local times, then you could be an hour different for the duration of summer time. This is unlikely to be the desired situation.</p>
<h2>Displayed dates</h2>
<p>Regardless of which timezone you store datetimes in your database (it probably wants to be UTC), your users will most likely expect to see dates and times in their local time. If a customer orders something on an ecommerce store at 11pm next week, what weekday will their account show for when the order was placed?</p>
<h2>Are you ready for British Summer Time?</h2>
<p>The lost hour of sleep this weekend is unavoidable, but bugs in code relating to the shift don’t have to be.</p>
]]>
            </summary>
                                    <updated>2026-03-23T10:00:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Always check the source]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/always-check-the-source" />
            <id>https://andycarter.dev/blog/always-check-the-source</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>The last couple of weeks I’ve been researching a blog post. During that process I came across a statistic that seemed perfect for what I was writing.</p>
<p>The statistic was being used to make a fairly bold claim. I hadn’t come across this ‘fact’ before, so decided I’d dig a little deeper.</p>
<p>A bit of searching revealed multiple articles repeating the same claim; some even citing the original research it supposedly came from.</p>
<p>After jumping over a few hurdles, I finally managed to get hold of the original white paper. To my surprise, the statistic didn’t represent what the many articles claimed it did. In fact, it told a very different story.</p>
<p>It turned out that several sites had taken the statistic and skewed its meaning to support their own arguments.</p>
<p>The fact that so many sites repeated the same misinterpretation suggests they hadn’t checked the original research at all. They were simply copying each other, much like a game of Chinese Whispers.</p>
<p>The Internet is rife with misinformation. My time in physics research taught me the importance of verifying sources. As professionals, we need to be confident that what we share is accurate; that means going back to the original evidence whenever we can.</p>
<p>Let’s help break the cycle of misinformation.</p>
]]>
            </summary>
                                    <updated>2026-03-06T11:00:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why colour matters for creating an accessible browsing experience]]></title>
            <link rel="alternate" href="https://www.evoluted.net/blog/design/why-colour-matters" />
            <id>https://www.evoluted.net/blog/design/why-colour-matters</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[]]>
            </summary>
                                    <updated>2026-02-17T00:00:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Is it really trivial?]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/the-problem-with-its-trivial" />
            <id>https://andycarter.dev/blog/the-problem-with-its-trivial</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>‘It’s trivial!’ An expression I often find myself saying. However, the word ’trivial’ can be dangerous, and perhaps I use it to freely.</p>
<p>When I was younger, my dad used to love the game Trivial Pursuit. My main memory of this game was the frustration of everyone else around the table. My dad would sweep the board collecting the cheese wedges for each category; whilst the rest of us were desperately trying to get a single wedge. The game’s questions might have been trivial to my dad, but they weren’t to the rest of the family.</p>
<p>Trivial is an adjective we use to imply something has little value or importance. We often describe problems as trivial to imply they are easy to solve. Herein lies the danger.</p>
<p>When we use the word ‘trivial’ we make a couple of assumptions: firstly, the knowledge and experience of the recipient; and secondly, their current state of mind. If someone is stressed, the word ‘trivial’ is likely to contribute to their existing state of anxiety.</p>
<ul>
<li>‘Trivial’ can make people feel like imposters if something falls outside their experience</li>
<li>‘Trivial’ can over simplify a problem that in the details is actually complex</li>
<li>‘Trivial’ can imply something is going to be quick — in Tech, things are rarely quick to implement</li>
<li>‘Trivial’ risks bringing a discussion to an abrupt end, preventing questions and considerations of alternative solutions</li>
</ul>
<p>Our choice of words can make a real impact on those listening to us. Next time I reach to use ‘trivial’ in a sentence I will try and remember those games of Trivial Pursuit and the inbalance in trivial knowledge. Using the word ’trivial’ doesn’t have to be problematic, but the context needs to be considered. Perhaps, alternative language would suit the situation better.</p>
]]>
            </summary>
                                    <updated>2026-02-12T10:15:00+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Don't forget to test your accessibility solutions]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/dont-forget-to-test-your-accessibility-solutions" />
            <id>https://andycarter.dev/blog/dont-forget-to-test-your-accessibility-solutions</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>I’ve been taking a look at the accessibility of e-commerce websites. One in particular has amused me.</p>
<p>In many regards this site has gotten accessibility right. They’ve generally used good colour contrasts, images have alt text, there are skip links in helpful places and form inputs are labeled. However, visually impaired customers using a screen reader will be getting a very different shopping experience to sighted users.</p>
<p><img src="/assets/test-a11y/out-of-stock-label.png" alt="HTML code showing labels with a span containing the text ‘Variant sold out or unavailable’" /></p>
<p>Every product with sizes has a visually hidden label that reads ‘Variant sold out or unavailable’. That means if you are using a screen reader, it will appear that the store is completely out of stock. Have they really sold out? No, visually all sizes are shown as available and can be added to the cart.</p>
<p><img src="/assets/test-a11y/shop-sizes.png" alt="Screenshot showing a choice of sizes and an add to cart button. All sizes are visually shown to be available." /></p>
<p>To double check this, I looked for a product on the same site that had reduced availability. I found one where certain sizes were out of stock. Visually these sizes appear crossed out and faded (the colour contrast here is not good). You can still select these out of stock sizes, but can’t add them to the cart. Instead you are presented with a 'Notify me when available' button, a familiar e-commerce design pattern.</p>
<p><img src="/assets/test-a11y/shop-sizes-unavailable.png" alt="Screenshot showing product sizes, most are visually shown as unavailable including the current selection. There is a notify me when available button." /></p>
<p>So, this website is clearly well stocked if you are a sighted user, but not if you use a screen reader. I'm sure this wasn't the developers intention or the message the business wanted to give.</p>
<p>The developers for this website have clearly cared about accessibility in terms of the build. However, it appears that they haven’t fully tested their approach to ensure it works as intended. As a result the store is potentially losing customers without realising why.</p>
<p>I know from my own accessibility journey, that we can easily start incorporating accessibility considerations into our work without fully understanding the impact. We go off and learn about how we can programmatically make a page accessible, but this is dangerous if not paired with testing. Without both, we risk introducing new barriers.</p>
<p>Accessibility is important. Testing our work is accessible is more so.</p>
]]>
            </summary>
                                    <updated>2026-02-05T10:15:00+00:00</updated>
        </entry>
    </feed>
