Accessibility
ARIA Authoring Practices Guide
Learn to use the accessibility semantics defined by the Accessible Rich Internet Application (ARIA) specification to create accessible web experiences. This guide describes how to apply accessibility semantics to common design patterns and widgets. It provides design patterns and functional examples complemented by in-depth guidance for fundamental practices.
How to (not) use aria-label, -labelledby and -describedby
Always consider the first rule of ARIA use before doing anything:
“If you can use a native HTML element or attribute […], then do so.”
Selfish reasons for building accessible UIs
All web developers know, at some level, that accessibility is important. But when push comes to shove, it can be hard to prioritize it above a bazillion other concerns. I would like to list some of my personal, completely selfish reasons for building accessible UIs. No finger-wagging here: just good old hardheaded self-interest.
What I Wish Someone Told Me When I Was Getting Into ARIA
Accessible Rich Internet Applications (ARIA) is an inevitability when working on web accessibility. That said, it’s everyone’s first time learning about ARIA at some point.
These are all things I wish someone had told me when I was getting started on my web accessibility journey. This post will:
- Provide a mindset for how to approach ARIA as a concept
- Debunk some common misconceptions
- Provide some guiding thoughts to help you better understand and work with it
Digital Trust Index 2025 - The State of Digital Accessibility in Europe
Digital services are the backbone of today’s society, from how we shop and bank to how we socialize and learn. But in a digital world, trust is everything. That’s why Craftzing created the Digital Trust Index: a benchmark for how trustworthy and inclusive European websites really are. With the European Accessibility Act coming into force on 28 June 2025, one question is more urgent than ever:
How accessible is the web today — and are businesses ready for tomorrow?
Spoiler: 93% of European websites fail accessibility requirements. That’s less than a 1% improvement compared to 2024.
CSS
Animating zooming using CSS: transform order is important… sometimes
How to get the right transform animation.
A new way to style gaps in CSS
Say goodbye to border and pseudo-element hacks, and hello to CSS gap decorations.
The Microsoft Edge team is excited to announce that CSS gap decorations, a new way to style the gaps between items in flex, grid, and multi-column layouts, is now available for developer trial in Chrome and Edge 139.
Scope in CSS
We’ve got @scope
in CSS now, and it’s got it’s uses. But the concept of scope in CSS is a wider idea.
Breaking Boundaries: Building a Tangram Puzzle With (S)CSS
We put it to the test and it turns out Sass can replace JavaScript, at least when it comes to low-level logic and puzzle behavior. With nothing but maps, mixins, functions, and a whole lot of math, we managed to bring our Tangram puzzle to life, no JavaScript required.
Drawing CSS Shapes using corner-shape
We recently got the new shape()
function for clip-path
which is a game changer for creating CSS shape. Another cool feature is on the way and will soon be available: corner-shape
.
When you define a border-radius
you will get rounded corners. corner-shape
allows you to change those rounded corners to something else. It’s in the name; it changes the “shape” of the “corner”.
At the time of writing, corner-shape
is available in Chrome v139 or 136+ with the experimental web features flag turned on, but no other browsers yet.
CSS Cascade Layers Vs. BEM Vs. Utility Classes: Specificity Control
CSS can be unpredictable — and specificity is often the culprit. Victor Ayomipo breaks down how and why your styles might not behave as expected, and why understanding specificity is better than relying on !important
.
HTML
An origin trial for a new HTML <permission> element
There are a number of imperative methods for asking for permission to use powerful features like location access in web apps. These methods come with a number of challenges, which is why the Chrome permissions team is experimenting with a new declarative method: a dedicated HTML <permission>
element. This element is in origin trial from Chrome 126, and ultimately we hope to standardize it.
JavaScript
Angular v20 might seem boring — Here are 6 reasons it’s not
Learn about the major upgrades in Angular v20, including the linkedSignal
API, incremental hydration, and new Gen AI tools and documentation.
Multithreading in JavaScript with Web Workers
JavaScript is single-threaded, but did you know you can simulate multithreading in JavaScript? Learn how to use web workers to perform operations in parallel.
Smooth Page Transitions in Next.js with next-view-transitions
Add smooth page transitions to Next.js using the View Transitions API.
These transitions provide visual continuity, make the app feel more responsive, and help users maintain context. The View Transitions API is supported in Chrome, Edge, and Opera, with graceful fallback to normal navigation in other browsers.
LyteNyte, Fastest in Class React Data Grid
LyteNyte Grid is a lightning-fast React data table with server-side loading, tree data, pivoting, and enterprise-grade features for scalable applications.
React Searchable Dropdown
A flexible and customizable searchable dropdown component for React applications. Built with performance, customization, and ease of use in mind.
Github repo here.
Using await at the top level in ES modules
Writing asynchronous code in JavaScript used to come with a limitation: the await
keyword could only be used inside an async
function. That changed when ES2022 introduced top-level await
: a modern ES module feature that enables new patterns for asynchronous code at the module level.
Custom elements
We can create custom HTML elements, described by our class, with its own methods and properties, events and so on. Once a custom element is defined, we can use it on par with built-in HTML elements. We can define them with a special class, and then use as if they were always a part of HTML.
There are two kinds of custom elements:
- Autonomous custom elements – “all-new” elements, extending the abstract HTMLElement class.
- Customized built-in elements – extending built-in elements, like a customized button, based on HTMLButtonElement etc.
First we’ll cover autonomous elements, and then move to customized built-in ones.
UX
Deceptive Patterns (aka Dark Patterns) - spreading awareness since 2010
Deceptive patterns (also known as “dark patterns”) are tricks used in websites and apps that make you do things that you didn't mean to, like buying or signing up for something.
This website (formerly darkpatterns.org) was started in 2010, born out of Harry Brignull's passion for addressing the growing issue of manipulative, deceptive and coercive design patterns in the digital world. Recognising the negative impact these patterns had on users, Harry was inspired to start a campaign that would expose these patterns, educate the public, and foster a more transparent digital landscape.
This site has played a pivotal role in shaping the conversation around ethical design practices. Its concepts and terminology have been adopted in new laws and regulations around the world, including the EU Digital Services Act (DSA), Digital Markets Act (DMA), California Privacy Rights Act (CPRA) and many others. Regulators have also taken a keen interest and it is becoming an increasingly common topic in class action lawsuits.
The Hamburger-Menu Icon Today: Is it Recognizable?
Hamburger menus are a more familiar pattern today than 10 years ago, but the same old best practices for hidden navigation still apply.
Miscellaneous
The Prompt Engineering Playbook for Programmers - Turn AI coding assistants into more reliable development partners
Developers are increasingly relying on AI coding assistants to accelerate our daily workflows. These tools can autocomplete functions, suggest bug fixes, and even generate entire modules or MVPs. Yet, as many of us have learned, the quality of the AI’s output depends largely on the quality of the prompt you provide. In other words, prompt engineering has become an essential skill. A poorly phrased request can yield irrelevant or generic answers, while a well-crafted prompt can produce thoughtful, accurate, and even creative code solutions. This write-up takes a practical look at how to systematically craft effective prompts for common development tasks.
Behavioral Interview List of Questions
Behavioral interviews are a great addition to understanding the candidate deeply on their motivations and overall fit within the company's culture and mission.
Always a good idea to review something like this before an interview as you will surely be asked these types of questions. Your answers to behavioral questions can easily be more important than your answers to random code trivia.
How to negotiate your salary package
The complete guide to salary negotiation for engineers and other professionals who think negotiating is morally questionable.