<?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-08T08:28:00+00:00</updated>
                        <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>
            <entry>
            <title><![CDATA[2025 reflections]]></title>
            <link rel="alternate" href="https://andycarter.dev/blog/2025-reflections" />
            <id>https://andycarter.dev/blog/2025-reflections</id>
            <author>
                <name><![CDATA[Andy Carter]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>As 2025 draws to a close, I’ve been reflecting on what has been a truly rewarding year.</p>
<h2>Work</h2>
<p><a href="/blog/2024-reflections">Last year</a>, I returned to <a href="/talks">public speaking</a> after a bit of an extended break. I was eager to continue this and 2025 was full of opportunities.</p>
<p>This year, I delivered talks at Front End Sheffield, Leeds PHP and dot Net Sheffield. I was also invited to speak on a panel about digital accessibility at a11y North.</p>
<figure>
<img src="/assets/talks/techmids-2025.jpg" alt="Andy stood speaking in front of a Tech Mids banner" />
<figcaption>Tech Mids</figcaption>
</figure>
<p>I attended a couple of tech conferences. First as a backup speaker for Front End North; then later in the year I got my chance to deliver <a href="/blog/speaking-at-techmids-2025">my first conference talk at Tech Mids</a>.</p>
<p>Speaking at a conference hadn’t been on my bucket list at the start of the year. However, I realised I was ready to take public speaking to a larger audience and loved the experience.</p>
<p>I'm excited to see what new speaking opportunities 2026 will bring.</p>
<h2>Life</h2>
<figure>
<img src="/assets/itvx.jpg" alt="Andy being interviewed in front of a colourful mural of a kingfisher, an on-screen graphic for ITV News Calendar displays Andy Carter's name and affiliation to Street Art Sheffield" />
<figcaption>ITV News</figcaption>
</figure>
<p>Outside of work, my passion project, <a href="https://streetartsheffield.com">Street Art Sheffield</a>, opened up several exciting experiences. Recognised for my knowledge of Sheffield’s street art scene, I was interviewed by ITV News and BBC Radio Sheffield. When I first set up my website, I never anticipated it leading to me featuring in the news.</p>
<p>In 2025, Sheffield hosted its first street art festival; <a href="https://www.lickofpaintfest.com/">Lick of Paint</a> was organised by a couple of local artists, Peachzz and Alastair Flindall. They invited me to be part of the festival activities, running the official walking tours. I’ve run many tours before, but these felt special. The city buzzed with creativity that weekend and guiding people through the festival sites was unforgettable.</p>
<p>Despite all my personal highs of 2025, at times the world has felt like it’s been in a really dark place. This has impacted my mental health. It’s one of the reasons I have thrown myself into many things this year. Getting out and being part of the community has been really energising.</p>
<figure>
<img src="/assets/crossed-wires.jpg" alt="Close up of Andy in a blue lit room, in front of a wall featuring the BBC Sounds and Crossed Wires Fringe logos" />
<figcaption>Crossed Wires festival</figcaption>
</figure>
<p>One other thing I’ve done to combat my anxiety has been to attend lots of live comedy gigs. Being in a room full of people laughing is very uplifting. Highlights have included Rhys Darby, Zoe Lyons, Russell Howard, Angela Barnes and a somewhat chaotic live performance of  Johnny Vegas’ <em>Ideal</em>. Attending Sheffield's Crossed Wires podcast festival was also a lot of fun.</p>
<h2>2026</h2>
<p>2025 has been full of unexpected opportunities. I'm excited to see what 2026 has in store.</p>
]]>
            </summary>
                                    <updated>2025-12-17T18:50:00+00:00</updated>
        </entry>
    </feed>
