AI-Generated UI Is Inaccessible by Defaulthttps://frontendmasters.com/blog/ai-generated-ui-is-inaccessible-by-default/ presents a bleak picture of the current state of accessibility in AI-generated user interfaces. The article highlights that AI-generated UIs often lack proper semantic structure, ARIA attributes, and keyboard navigation support, making them inaccessible to users with disabilities. It also provides examples of how to incorporate accessibility into AI-generated designs. I agree with the critique, but I think it doesn't go far enough in addressing the root cause of the issue: the lack of specificity in AI prompts when it comes to accessibility. This post will explore the challenges of AI-generated UIs and offer...
A production-ready web component feels invisible to the developer using it. It should behave exactly like a native HTML element, such as an or a tag. Achieving this requires meticulous API design. This guide explores how to build predictable APIs for your custom elements and how to architect them so that simple tasks remain effortless while complex integrations remain possible. Predictable API Design When developers use your component, they bring expectations based on years of interacting with the standard Document Object Model DOM. Breaking these expectations creates friction and bugs. Synchronize Properties and Attributes HTML attributes like and JavaScript properties...
I love the way Lea Verou's web site looks, particularly the way the admonitions look on her site. I looked at t he CSS she used for the admonitions and thought it would be fun to create my own version that mimics the style of her admonitions. Along the way I decided to move it to a custom element and to keep the code dry by creating a base admonition and use custom versions to extend it. This way, I have more flexibility on styles and I can easiy create new types of admonitions without having to duplicate code. This...
In From Markdown to PDF: Pandoc/from-markdown-to-pdf-pandoc/, we explored how to use Pandoc to convert Markdown into PDF. While Pandoc is a powerful tool, it has limitations in terms of styling and layout control; it uses LaTeX under the hood, which can be difficult to customize and often locks dependencies into what's available in the TeX ecosystem. > Note: This post does not cover installation or setup of Pandoc, Saxon-HE, or PrinceXML. Please ensure these tools are installed and available in your environment before proceeding. Below is a summary diagram of the pipeline stages and file flow: mermaid graph TD AMarkdown...
When I first thought about automatically geneerating PDF version of my blog posts, I thought it would be easy: Just create a shell script that would run Pandoc to convert each document into its PDF equivalent. First discovery: Pandoc uses LaTeX to do the conversion. Second discovery: LaTeX is very strict on how it wants its input formatted and how it reacts when it isn't. This led to the two scripts that will be discussed in this post. In a later post I will discuss a different alternative using XSLT, CSS and PrinceXML as an alternative PDF generation alternative. Software...
Node.js developers frequently encounter situations where working with the real filesystem creates friction: Testing: Unit tests that manipulate files need cleanup, deal with disk I/O latency, and struggle with isolation. Tests often stub the fs module entirely, losing the ability to test file-system-dependent logic realistically. Development: Building tools like bundlers, code generators, and template engines often need to generate files temporarily. Managing temporary directories becomes boilerplate. Filesystem isolation: Applications sometimes need to isolate filesystem operations by scoping accessible paths so user-provided workflows cannot freely access the host filesystem. In-memory workflows: Dynamic environments like browsers with WebAssembly or serverless platforms may...
I stopped using WordPress in 2022 because the project was moving in a direction that no longer matched my needs. I still check new releases to see how the platform is evolving and whether enough has changed to make me consider switching back. WordPress 7.0 "Armstrong" was released on May 20, 2026. According to the documentation, it marks a fundamental shift in how WordPress operates. More than a visual refresh or a handful of new blocks, 7.0 positions WordPress as an AI-first application platform. For this review, I focused on features most likely to affect everyday WordPress users and intermediate...
Jens Oliver Meiert wrote an interesting article on SitePoint: There Is No "Wrong" in CSShttps://www.sitepoint.com/there-is-no-wrong-in-css/. He offers four reasons why CSS can't really be "wrong": 1. If It Works, It Works 2. The One Who Suffers Is You 3. It’s Easy to Change 4. Barriers for Users Are a Web Platform Responsibility I agree with part of his argument, but I think the conclusion is too broad. Whether CSS is "wrong" depends on what standard we apply: In this post, "wrong" means predictably creating avoidable user barriers or high change risk. 1. Rendering is the floor, not the standard. 2....
A Promise is an object representing the eventual completion or failure of an asynchronous operation and its resulting value. It acts as a proxy for a value not necessarily known when the promise is created. They are not always intuitive to reason through, especially for developers new to asynchronous programming. This post covers the core concepts, lifecycle, and best practices for using promises effectively in both JavaScript and TypeScript. Core concepts and lifecycle Every Promise exists in one of three mutually exclusive states: Pending: The initial state; the operation has not yet completed. Fulfilled: The operation completed successfully. The promise...
This is a follow-up to JavaScript and TypeScript Streams 2026 Edition/javascript-and-typescript-streams-2026-edition/ and covers advanced material removed from the previous Streams post. This post focuses on the moments when "normal" streaming code is technically correct but still fails under scale, latency, or reliability pressure. If your current workload is modest, you can safely skip most of this. If you run ingestion pipelines, large-file processing, media workflows, or long-lived stream services, these patterns are often the difference between stable production behavior and slow-burn incidents. Important Note on Scope This is a selective toolbox, not a checklist. Use the sections that match the...