I grew up with search. From the early days of Yahoo—built as a directory of links—to the modern algorithmic engines we have spent our careers optimizing for, search has been our compass. Today, we are witnessing a rapid transition from this classic "index-and-referral" model to an "all-in-one answer engine." That shift is not merely a software update; it is a structural realignment of the web’s economic and cultural foundation. The web is reaching a critical inflection point. Generative AI is being embedded directly into browser interfaces and search products, changing not only how people find information but also how websites...
The software engineering industry is constantly tempted by the new. Whenever a new framework, database, or library appears, it quickly becomes the default recommendation for projects of all sizes. That temptation leads to premature optimization and over-engineering from day one. A growing counter-movement argues for a more radical form of restraint. By revisiting the "You Might Not Need" era of frontend development and applying its lessons to modern backend architecture, especially through the lens of "Postgres is Enoughhttps://postgresisenough.dev/", teams can reclaim productivity, simplify infrastructure, and focus on solving real business problems. This post makes that case in four steps. First,...
Eventhough CSS provides a set of filters like blur, brightness, and drop-shadow, SVG filters offer a much more powerful and flexible way to create complex visual effects. By defining custom filters using SVG, you can achieve unique looks that are not possible with standard CSS filters. This post will cover how to define SVG filters and use them in CSS to enhance the web experience. It will not cover the individual filter primitives in detail, but will focus on how to set up and apply filters in a web context. Defining the filters There are two ways to define SVG...
SVG filters are among the most powerful graphics features available in modern browsers, yet they remain notoriously challenging to master. While CSS provides convenient shortcuts like blur and drop-shadow, SVG filters expose the full image-processing pipeline behind those effects. If you require precise control over composition, masking, and texture, SVG filters provide the necessary architecture. If you understand CSS filters and want to build visual effects beyond a single function, SVG filters are your next step. They allow you to branch, merge, and layer effects in ways CSS alone cannot match. This post covers: The SVG filter mental model Data...
This post started as an addendum to my article about responsive images and the sizes="auto" attribute, but I realized it deserved its own post. When you use the element for format fallbacks, adopting a modern format stack is crucial for performance. Like with video, the browser will select the first format it supports from the list of elements. Therefore, you should list the most efficient formats first, followed by older formats as fallbacks and finally a baseline format in the img tag for legacy support. However, the issue is not as simple as "use AVIF and WebP." You still need...
The Ideal Viewport Doesn't Existhttps://viewports.fyi/ made me think about the CSS I write and how much it has changed since I started. CSS has evolved from a simple styling language into a powerful system that adapts to devices and user preferences. Developers once controlled nearly every detail of layout and presentation, but now we can delegate much of that work to the browser and let it make smarter decisions based on the user's context. This post explores what it means to "trust the browser" and how to use its built-in capabilities to create better web experiences. Be the Browser's Mentor,...
Reactive programming is a declarative paradigm centered around data streams and the automatic propagation of change. Instead of writing imperative code that explicitly updates the user interface UI or recalculates variables when data shifts, a reactive system binds the UI directly to the state. When the state updates, the system pushes those changes to all interested subscribers. There are different models of reactivity, each with its own trade-offs. Knowing the differences between hooks, observables, and signals is crucial for choosing the right tools for your application. In this post, we will explore the history of reactivity in web development, the...
How we interact with the web has evolved significantly. The days of a single mouse pointer on a desktop monitor are long gone. Today, users expect seamless interactions across a wide range of devices: touchscreens, styluses, trackpads, and even emerging input methods like voice and gesture control. To handle this range of inputs, developers had to write complex, separate event listeners for MouseEvent and TouchEvent interfaces. This led to bloated codebases, fragile abstractions, and complex edge cases. The Pointer Events API, initially championed by Microsoft in Internet Explorer 10 and eventually standardized by the W3C, solves this fragmentation. It provides...
Responsive images have significantly improved web performance by saving users from downloading unnecessary bytes. However, implementing them effectively has long been a source of frustration for developers. The new sizes="auto" feature changes the way you write image markup, significantly reducing developer overhead. This article explores the evolution of responsive images, explains the mechanics of srcset and , and details how sizes="auto" simplifies the process. The evolution of responsive images Before responsive image standards existed, developers used a single src attribute. This forced all users—regardless of device size or network connection—to download a single, often enormous, image file. As mobile web...
One of the things that concerns me about the current state of AI in instructional design is that it often feels like a rehash of every technology hype cycle we've seen before. We get excited about the potential of a technology, we see some early successes, but then we hit a wall where the technology can't quite deliver on the promises. I worry that we might be in for a long period of disillusionment before we see any real breakthroughs. This post is not meant to be a critique of AI in instructional design, but rather a reflection on the...