Building textlog without JavaScript A developer built textlog, a web app that runs React on the server but sends only plain HTML and CSS to the browser, with no JavaScript. The constraint of no client-side JavaScript influenced design decisions, leading to simpler interactions using native HTML features and meaningful URLs. Building textlog without JavaScript ai;dr — This post has been enhanced with AI. When I started building textlog https://textlog.cc , I gave myself a constraint: no JavaScript in the browser. Not “minimal JavaScript”, or “JavaScript only where necessary” which inevitably turns into a bundle, a router and hydration a few weeks later. I wanted the normal experience of using the site to be plain HTML and CSS. The slightly funny thing is that textlog is still a React app. React just never reaches the browser. A request comes in, we get whatever data we need, React renders the page on the server and we send the resulting HTML. There is no hydration afterwards and no second application waking up in the browser. The HTML arrives and that's the page. At first this mostly felt like a technical experiment. I wanted to see how much of a modern web app I could actually build this way. But after working on it for a while, the constraint started influencing almost every decision I made about textlog, including decisions that had very little to do with JavaScript. The first thing I noticed was how much HTML already does. When you've been building client-side applications for years, your instinct when you need an interaction is to write some state and an event handler. Without that option, you have to look again at what the browser can already do. Links navigate. Forms change things. URLs hold state. Radio buttons are pretty good at being radio buttons.