This site is a few files of HTML
The previous version of this site was one page: a canvas radar animation, a sticky header, project cards. It looked fine and it was useless, because there was no place to write. A brochure is not a site you come back to.
This version goes back to how personal pages looked before frameworks: plain HTML, one column, the fonts the system already has, no JavaScript, nothing that moves. The about page is a hand-written HTML file. The blog is a directory of Markdown files and a build script. The idea that a blog can be a text file and a script is old, and I owe it to a few people who never stopped doing it that way, antirez among them.
How it works
index.htmlis the about page. To change it, edit the HTML.posts/2026-10-17-this-post.mdis a post. The front matter has a title and a date. The rest is Markdown.build.pyreads the posts and writesdist/: the list page, one page per post, and an RSS feed. It is about 300 lines of Python with no dependencies.wrangler pages deploy distuploadsdist/to Cloudflare Pages.
Writing a post is three commands:
python3 build.py new "Title of the post"
python3 build.py serve
wrangler pages deploy dist --project-name=trustsentinel
What is not here
No analytics, no cookies, no comments, no JavaScript, no web fonts. Nothing leaves the page. The response headers carry a strict Content Security Policy, HSTS, and X-Frame-Options: DENY. The build output is reproducible: the same posts produce the same bytes, so a diff of dist/ is a diff of what changed on the site.
If you want to reuse the setup, the whole thing is a Python file and a stylesheet. Take them.