There is a particular kind of website that has become common in the last decade: it loads a blank page, executes thirty seconds of JavaScript, and then assembles, in front of you, the same content that was sitting on the server the whole time. This is, technically, the world’s most expensive way to deliver a paragraph of text.
Our clients sell hotel rooms, supplements, legal advice, and books. Their customers are sometimes on a 4G connection in a parking lot in Iași, and sometimes on a wired desk in Munich. None of them care about React. All of them care about whether the page is there.
So we write HTML by hand. We write CSS by hand. We use vanilla JavaScript only where it earns its place — a navigation toggle, a pricing calculator, a contact form. The total weight of a typical page on a site we build is between 80 and 200 kilobytes. The total weight of a typical page on a framework-built site is between two and twelve megabytes. The math is not subtle.
There is a conversation worth having about whether frameworks are appropriate for application-shaped products. They sometimes are. Most websites are not application-shaped. Most websites are documents, with a small amount of interactivity bolted on. Documents do not need a virtual DOM.
The other reason we hand-build is the long tail. A site we ship today should be readable, editable, and deployable in 2036. PHP from 2014 still runs. React from 2014 mostly does not. We are not trying to be clever. We are trying to be quiet.