<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Alexandria</title>
  <link>https://news.al007ex.com/</link>
  <atom:link href="https://news.al007ex.com/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Alex’s site. Writing about the web, software, and whatever else has my attention. No ads, no tracking.</description>
  <language>en</language>
  <lastBuildDate>Mon, 24 Aug 2026 22:06:06 +0000</lastBuildDate>
  <item>
    <title>I keep finding good websites again</title>
    <link>https://news.al007ex.com/posts/good-websites/</link>
    <guid isPermaLink="true">https://news.al007ex.com/posts/good-websites/</guid>
    <pubDate>Mon, 24 Aug 2026 09:00:00 +0000</pubDate>
    <category>Essay</category>
    <description>Personal sites never actually went away, but for about a decade they stopped turning up. Lately they do, and I think the reasons are mostly boring ones.</description>
    <content:encoded><![CDATA[<p><img src="https://news.al007ex.com/img/hero-quiet-web.svg" alt=""></p><p>A few months ago I started a text file called <code>sites.txt</code>. Nothing organised about it, just a URL per line and sometimes a word about why I kept it. It’s at sixty-one entries now.</p>
<p>Almost none of them are on a platform. There’s a man in Utrecht who writes about bridges. Someone’s twelve-year log of every bird seen out of one kitchen window, with counts. A woodworker who posts once a month, bad photos, very good writing. A retired air traffic controller taking apart old incidents in a level of detail no publication would ever pay for.</p>
<p>I wasn’t collecting personal sites on purpose. That’s just what the file filled up with.</p>
<h2 id="this-gets-announced-every-eighteen-months">This gets announced every eighteen months</h2>
<p>I should say up front that people have been calling the return of the personal website since about 2010, and have been wrong nearly every time. RSS is back. Blogs are back. The indie web is back. Usually it isn’t.</p>
<p>So take what follows with some salt. Something does feel different to me, but the reasons are less romantic than the usual version of this argument.</p>
<h2 id="search-stopped-doing-the-job">Search stopped doing the job</h2>
<p>The practical change is that search stopped surfacing this kind of thing, so I started finding it other ways. Links from other small sites, a couple of aggregators, people sending me stuff directly.</p>
<p>That’s mostly a downgrade and I’d rather have working search. But it does mean anything I find now arrives with a recommendation attached, which turns out to be a better filter than a ranking algorithm losing an arms race with the SEO industry.</p>
<figure>
  <img src="https://news.al007ex.com/img/plate-dissolve.svg" alt="A grid of dots thinning out from left to right, one of them ringed in red." loading="lazy" decoding="async">
  <figcaption>How I used to find sites, versus how I find them now.</figcaption>
</figure>
<h2 id="the-economics-broke-first">The economics broke first</h2>
<p>For a long time the deal was reasonable. You put your work on a platform and the platform gave you reach.</p>
<p>What broke wasn’t the idea, it was the arithmetic. Reach became something you rent. Publishers hit the same wall at a much larger scale and a few of them nearly died of it. If half your traffic comes from one referrer, you don’t have an audience, you have an arrangement, and the other party can change it on a Tuesday.</p>
<p>Running your own site doesn’t fix any of that. It just makes the number honest.</p>
<h2 id="building-one-got-easy-which-nobody-mentions">Building one got easy, which nobody mentions</h2>
<p>Here’s the part I don’t see written about much. Making a decent website is significantly less work than it was in 2012.</p>
<p>A lot of that is just the browser catching up. <code>clamp()</code> scales type from a phone to a monitor in one line. Grid does layouts that used to need a library. <code>prefers-color-scheme</code> turns dark mode into a media query instead of a feature. <code>loading=&quot;lazy&quot;</code> replaced most of what image plugins existed for. None of it needs a build step or a framework.</p>
<p>This site is the demonstration. Markdown files go through a Python script, the script writes HTML, nginx serves the HTML:</p>
<pre><code>content/posts/*.md   →   build.py   →   dist/**.html   →   nginx</code></pre>
<p>No database, no framework, nothing running per request. The only JavaScript on the page is about fifteen lines that remember whether you picked dark mode. It’s a few hundred lines of CSS and one Python file I’ll still be able to read in six months, which is the real test.</p>
<blockquote class="pullquote"><p>If half your traffic comes from one referrer, you don’t have an audience, you have an arrangement.</p></blockquote>
<h2 id="the-thing-i-actually-care-about">The thing I actually care about</h2>
<p>I lost a few years of writing once. Nothing dramatic. A service announced it was shutting down, I told myself I’d export everything, I didn’t, and the export tool broke before the domain did. I still remember two or three of those posts and I’d like to read them again and I can’t.</p>
<p>Everything I’ve put on my own domain since 2015 is still sitting at the same address. That isn’t an achievement, it’s just what happens when nobody else is in charge of the URL. You don’t really notice it as a feature until you’ve lost it once.</p>
<h2 id="what-its-bad-at">What it’s bad at</h2>
<p>Worth saying, because posts like this tend to oversell. One person with a static site is not going to run an investigations desk, or cover an election night, or fight a libel case. That takes a newsroom, newsrooms cost money, and a lot of that money currently comes from exactly the ad machinery I’d rather not have on my own pages. I don’t have a clean answer to that and I’m suspicious of people who do.</p>
<p>Small sites are good at something narrower. One person, one subject, no deadline, and enough room to get it right.</p>
<h2 id="if-you-want-one">If you want one</h2>
<p>The technical barrier isn’t the barrier. Buy a domain, put files on a server. A few things I’d tell myself if I were starting over:</p>
<ul><li>Pick a URL shape you can live with for ten years, then leave it alone. <code>/posts/slug/</code> is fine. Anything with a date in the path you’ll eventually regret.</li><li>Write for the version of you from before you knew the subject.</li><li>Ship it unfinished. Everything on the small web is slightly unfinished. That’s most of the charm.</li></ul>
<figure>
  <img src="https://news.al007ex.com/img/plate-blocks.svg" alt="Stacked blocks in muted tones." loading="lazy" decoding="async">
  <figcaption>A site is just a pile of pages you added to slowly.</figcaption>
</figure>
<p>Sixty-one entries. I’ll probably still be adding to that file next year.</p>
<hr>
<p><em>This is sample content, here to show off the layout and typography. The pictures are generated placeholders — drop real ones in <code>static/img/</code> and point the front matter at them.</em></p>]]></content:encoded>
  </item>
  <item>
    <title>Six megabytes for a thousand words</title>
    <link>https://news.al007ex.com/posts/six-megabytes/</link>
    <guid isPermaLink="true">https://news.al007ex.com/posts/six-megabytes/</guid>
    <pubDate>Mon, 17 Aug 2026 09:00:00 +0000</pubDate>
    <category>Notebook</category>
    <description>I opened a few news sites with the network panel running. The numbers were worse than I expected, and most of the weight isn’t the article.</description>
    <content:encoded><![CDATA[<p><img src="https://news.al007ex.com/img/plate-ridges.svg" alt=""></p><p>I did this partly out of curiosity and partly because a page had been chugging on my phone and I wanted to know why.</p>
<p>Six sites, one article each, network panel open, cache cleared. The lightest came in at 2.1 MB. The heaviest was just under nine. Every one of them kept loading things for several seconds after the text was already sitting there on screen, which is why the layout jumps around while you’re trying to read.</p>
<p>The article text itself, in every case, was somewhere between fifteen and forty kilobytes.</p>
<h2 id="where-it-goes">Where it goes</h2>
<p>Roughly, and it was consistent enough across all six to be worth writing down:</p>
<ul><li>Ads and the plumbing around them, usually more than half the total, spread over dozens of requests to servers the publisher doesn’t run.</li><li>Analytics and consent management, which exists to legally collect the data the ads want.</li><li>Fonts, often a few hundred kilobytes, frequently including weights the page never uses.</li><li>The writing, at somewhere under two percent.</li></ul>
<p>That last one is the number I keep thinking about. On a lot of the web the article is a rounding error inside its own delivery system.</p>
<h2 id="the-caveat">The caveat</h2>
<p>None of this makes a small site better journalism. Weight isn’t quality and a fast page can be completely empty. Those sites employ reporters, and I don’t, and the ad machinery I’m complaining about is what pays them.</p>
<p>What struck me wasn’t that the pages were heavy. It’s how much of the weight has nothing to do with either the writing or with funding it, and how much of it looks like stuff nobody has gone back and looked at in years.</p>
<p>For comparison, since it’s only fair: this page is about 20 KB of HTML, one stylesheet, and whatever pictures the post actually needs. That’s not clever engineering. I just didn’t add the other things.</p>]]></content:encoded>
  </item>
  <item>
    <title>The whole stack is a folder</title>
    <link>https://news.al007ex.com/posts/the-whole-stack-is-a-folder/</link>
    <guid isPermaLink="true">https://news.al007ex.com/posts/the-whole-stack-is-a-folder/</guid>
    <pubDate>Sun, 09 Aug 2026 09:00:00 +0000</pubDate>
    <category>Notebook</category>
    <description>Static files, one small server, and a certificate that renews itself. I wrote it down mostly to see how little there is.</description>
    <content:encoded><![CDATA[<p><img src="https://news.al007ex.com/img/plate-blocks.svg" alt=""></p><p>Someone asked what this site runs on and I realised the honest answer is “not much”, so here it is written out.</p>
<p>The pages are generated on my laptop and handed to nginx as files. There’s no application server, no database, no queue, nothing that can crash at three in the morning. If the build breaks it breaks while I’m looking at it. What ends up on the server is a directory.</p>
<p>The full list:</p>
<ol><li>A small VPS.</li><li>nginx, serving a folder.</li><li>A Let’s Encrypt certificate on a renewal timer.</li><li>Gzip, some cache headers, a handful of security headers.</li></ol>
<p>That’s it. It has no interesting failure modes because there’s almost nothing in it to fail.</p>
<h2 id="its-fast-because-its-lazy">It’s fast because it’s lazy</h2>
<p>A static file is the least work a web server can do. Nothing to render per request, no query, no cache to warm or invalidate. nginx reads from the page cache and writes to a socket. Response times are fractions of a millisecond and they don’t move much under load, because there’s nothing that gets slower when more people show up.</p>
<p>It’s also the easiest thing to keep secure, mostly by not having features. No upload handler, no comment form, no admin login, no session to steal. The attack surface is more or less “does nginx have a bug this month”, which is a much smaller question than the one a typical site has to answer.</p>
<h2 id="when-this-stops-working">When this stops working</h2>
<p>The obvious caveat: this works because the site is small and one person writes it. Add search, or comments, or accounts, and you’re back to running an application. At that point the boring option is a different boring option rather than none at all.</p>
<p>But a lot of sites are, functionally, a folder of documents that someone has wrapped in a CMS out of habit. Worth checking whether yours is one of them before reaching for anything bigger.</p>]]></content:encoded>
  </item>
  <item>
    <title>Nobody reads the cookie banner, including me</title>
    <link>https://news.al007ex.com/posts/nobody-reads-the-cookie-banner/</link>
    <guid isPermaLink="true">https://news.al007ex.com/posts/nobody-reads-the-cookie-banner/</guid>
    <pubDate>Thu, 30 Jul 2026 09:00:00 +0000</pubDate>
    <category>Opinion</category>
    <description>The law had a point. The interface it produced taught everyone to click accept without looking, and I’m not sure that’s fixable now.</description>
    <content:encoded><![CDATA[<p><img src="https://news.al007ex.com/img/plate-dissolve.svg" alt=""></p><p>I’ve clicked accept on thousands of these. I know roughly what’s in them. I still click accept, because the alternative is a second screen with thirty toggles and three paragraphs about legitimate interest, and I only wanted to read a recipe.</p>
<p>That’s the whole problem, and it isn’t really a problem with the law.</p>
<p>A consent dialog only works if saying no is as easy as saying yes. In practice “Accept all” is one big button and refusing is a maze. Given that, clicking accept isn’t consent. It’s just the rational way out of the maze.</p>
<h2 id="what-it-taught-everyone">What it taught everyone</h2>
<p>The wasted seconds aren’t the damage. The damage is that a whole generation of users has now been trained that a box asking about data is noise to be cleared, not a decision to make.</p>
<p>Then something genuinely important shows up. A permission prompt, a security warning, a browser telling you a certificate is wrong. It inherits the same reflex, because it looks like the same thing. We spent fifteen years making privacy decisions feel like an obstacle and then acted surprised when people started treating them as one.</p>
<h2 id="the-version-that-works">The version that works</h2>
<p>There’s a simpler route, and a fair number of sites have quietly taken it: don’t collect the stuff that needs consent.</p>
<p>No ad identifiers, no third-party embeds, no analytics beyond the log file the server writes anyway. Do that and there’s no banner, because there’s nothing to ask about.</p>
<p>That’s why nothing interrupted you on the way in here. I want to be clear it isn’t a principled stand so much as a shorter feature list. But the compliant, private, fast version of a site also turned out to be the cheapest one to build, and I don’t think that’s a coincidence.</p>]]></content:encoded>
  </item>
</channel>
</rss>
