This blog is fully static, completely version-controlled, and hosted on Cloudflare Pages. It uses AsciiDoc for content, and it’s 100% JavaScript-free. Here’s how I set the whole thing up.
asciidoctor, which converts .adoc to clean HTMLblog/
├── index.adoc
├── posts/
│ ├── post1.adoc
│ ├── post2.adoc
├── custom.css
├── build.sh
└── _site/ # final output (what Cloudflare serves)
posts/build.sh script compiles all .adoc files to .html_site/, which is the deploy directoryThe script compiles each .adoc file using asciidoctor:
#!/bin/bash
rm -rf _site
mkdir -p _site/posts
for file in posts/*.adoc; do
asciidoctor "$file" -o "_site/posts/$(basename "${file%.adoc}.html")"
done
asciidoctor index.adoc -o _site/index.html
cp custom.css _site/
Make it executable:
chmod +x build.sh
AsciiDoctor has great defaults, but I added a minimal custom.css for:
prefers-color-schemeh2, h3 {
color: #c0392b;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #121212;
color: #dddddd;
}
}
Cloudflare makes it stupidly easy.
./build.sh_sitegit pushMost blogs are overengineered. Mine is aggressively underengineered - and that’s the point.
If you want a blog that feels like writing a README file, but looks like a clean academic site, this setup slaps.