# Progressive enhancement for AI-generated UI

> Some people will not get the full experience. That was true of old browsers, and it is true again now that a model sits inside the interface.

- Author: Marcello Oliveira (https://mrcll.me/about/)
- Published: Nov 5, 2026
- Topics: AI, Frontend
- URL: https://mrcll.me/stories/progressive-enhancement-ai-ui/

Does it really matter to use a feature that not every browser supports? We already accept different experiences on different devices. Why not on different browsers?

The answer turns on one detail. People on an older browser may have no choice, or may not know how to upgrade. That is not their fault, so the core has to work everywhere and the rest comes on top: `@supports` to detect CSS features, Modernizr when you need more. Progressive enhancement is an old idea. It is about to be useful again.

AI-generated UI adds a dependency that behaves worse than any browser ever did. It is sometimes slow, sometimes wrong, sometimes down, and sometimes switched off by the user. If the page only makes sense when the model answers, your provider’s worst day becomes your product’s worst day. The model is the least reliable layer you have ever shipped.

Here is a card built in layers. Take them away one at a time.

> Interactive figure (LayeredCard): open the web version at https://mrcll.me/stories/progressive-enhancement-ai-ui/

Turn JavaScript off and the facts are still there. Pretend the browser has no container queries and the filters stay, only stacked. Make the model fail and only the summary goes away; its reserved slot says so instead of collapsing the layout. Make the model slow and the text arrives in pieces, in a place that was already its own.

Zero model calls are needed for the page to be useful. That is the whole design.

The tools changed; the idea did not. Where `@supports` used to stand, there is now a timeout, a kill switch and a user setting. The core does not depend on the new layer, and the new layer announces itself when it arrives: streamed into a slot that was reserved for it, so nothing jumps, and labelled, so nobody mistakes generated text for the facts around it.
