New site, who dis
I’ve had a corner of the web since around 2005. It has moved more times than I’d like to admit. This is the latest move, and — plot twist — it’s mostly a move back.
2005: a folder of files
My first site was classic HTML. I was working in Microsoft shops by day, but at home I had a LAMP box I barely used as a server. There was no real server-side anything. What I had was a pile of files, organized by hand into what I’d now generously call a proto-CMS — folders standing in for sections, a naming convention standing in for a database. I billed it, in the footer, as a “javascript, CSS, and DHTML experiment” and told you it was best viewed in Firefox 1.0. It was the new hotness: I was writing an AJAX lecture for Boulder Digital Arts the same year.
It worked. It still works — that first site is online to this day, a folder of hand-built files that has outlived every server I’ve run since. It was also a lot of manual labor, and it didn’t scale past the patience of one person.
WordPress + LAMP: my first OSS love
Then I found WordPress.
I’d learned Linux during my CS degree, but it hadn’t yet become a
trouble-free operating system with a killer app — at least not one that
made me want to put down the giant Windows laptop I was hauling around to,
mostly, download music. WordPress on LAMP was that app. It was the first
time free, open-source software solved a real problem for me instead of
being a thing I admired from a distance. I could write, hit publish, and
move on. I invested. The last post on that old static folder is the one
announcing the move — I was packing up for a real domain,
adamhevenor.com, running on WordPress.
Here’s the tell, though. The folder I was leaving behind is still up, serving itself exactly as I left it. The WordPress site I was so excited to move to is gone; the writing from those years only exists now because I pulled it back out of the Wayback Machine to seed this site. The hand-built files kept their own history. The database didn’t.
Mobile and social rotted my thinking
Then the phone showed up, and so did the feeds.
I told myself distribution was the point, and distribution lived on Medium and LinkedIn. Why run a server when someone else would run it for me? I’d be serverless before I had a word for it. So I let the corner of the web go.
It took me a while to feel what I’d actually given up. I had an audience, sort of, but I didn’t have a place. Everything I wrote lived on land I didn’t own, in a shape someone else chose. I felt homeless and couldn’t quite say why.
It didn’t help that building for the web seemed to have moved on without me. I could spin up containers in my sleep, but the modern JavaScript world had become a foreign country. The cost of coming home looked high, so I kept renting.
2025: reclaiming a corner
Last year I decided to take the corner back, under the hevmind brand.
I tried Ghost. Then I crawled back to WordPress and — I hated it. I should have bailed the first afternoon. Instead I spent far too long wrestling WordPress into something that looked like hevmind, fighting themes and plugins to express a fairly simple idea. The tool I’d once loved had become the thing standing between me and the writing.
2026: what I actually wanted
By the start of this year I knew I had to migrate. So I wrote down what I wanted, and the list was short:
- A CMS that’s mostly files. (Sound familiar?)
- Private access for clients.
- Email signup.
- Observability, so I can see what’s happening.
- A simple RAG — a way to ask my own writing questions.
That’s it. Twenty years later, the spec is basically the 2005 spec — a folder of files — plus the few things I’ve actually learned to want since.
The stack
What I wanted was a proto-CMS that’s mostly files. What I got is a folder of Markdown in git — which, two decades on, is finally a respectable way to run a website.
- Astro, static. No CMS, no React, no database. Posts and case studies are Markdown files with typed frontmatter; the build turns them into HTML. The “organize my files by hand” instinct from 2005 is now a content schema that yells at me when I get the shape wrong. That’s the whole upgrade: same folder of files, but the files are typed and the tooling is good.
- Cloudflare Pages for hosting. A direct upload from my machine, not a black-box deploy button. The site is static assets plus a thin shell of edge functions for the few places I need real server behavior.
- Private client access via those edge functions. Each engagement gets a password-gated workspace — a signed cookie checked at the edge, no backend, no user table. It’s the one place the static site grows a server, and only as much server as the job needs.
- Email through a form on the contact page. Signup without my running a mailing-list server.
- Observability with PostHog — analytics site-wide, plus LLM analytics on the agent: every answer reports its tokens, latency, and trace, so I can see what it’s doing and what it costs.
- A simple RAG — the “ask hev” agent. It’s the chat dock at the bottom
of this page. Less a vector pipeline than an agent with
searchandreadtools turned loose on a corpus of my own writing; it answers in my voice and points back at the source. The public one runs on a smaller model over the published posts. Each client workspace gets its own, grounded in that engagement’s documents — every proposal ships an agent. - And it’s tested. There’s an eval harness that checks the agents stay grounded in real material and don’t invent rates or facts — the same discipline I bring to client work.
The search underneath that agent is becoming its own thing. I’m packaging it as an open-source Astro integration — ask hev, a ⌘K box that’s keyword-instant while you type and turns into a bounded agent when you press Enter, with a knowledge graph Opus builds at compile time and results that deep-link to the exact heading. It’s still under development, running on the hev layer docs (coming soon) for now and headed back here next.
Back where I started
I went looking for a proto-CMS and a folder of files, and that’s exactly what I ended up with. The difference is everything underneath. In 2005 the folder was all there was. In 2026 it sits on a static build, an edge runtime, and an agent that can read it back to me.
There’s a quieter lesson sitting underneath the new stack, and the 2005 folder is still up to make the point: plain files on a boring host are the most durable thing I’ve ever shipped. The old domain even greets you with a WordPress “coming soon” page now — the dynamic thing forever about to launch, while the hand-built files have just kept serving for twenty years. That’s not nostalgia. It’s the spec.
The web didn’t pass me by. The abstractions just got good enough that coming home is cheap again.
Go ahead — ask the agent at the bottom of the page something. Or if you’ve got a real problem in front of you, let’s talk.