Rebuilding lisovyi.net: static, typed, zero JavaScript
My previous site was a simple hand-rolled page. It worked, but it wasn’t mine in the ways that matter: no typed content, no source-controlled history, no way to publish from a terminal.
The rebuild has a few deliberate constraints:
No client-side JavaScript
Every page is server-rendered HTML. There are no hydration scripts, no framework runtime, no analytics. The result is a page that loads fast on any connection and works with JavaScript disabled.
Content collections with schemas
Every blog post is a Markdown file validated by a Zod schema at build time. If I forget a pubDate or mistype a tag, the build fails with a readable error instead of shipping broken metadata.
Raw Markdown mirrors and llms.txt
Every post is also served as raw Markdown at /blog/<slug>.md, and llms.txt is generated at build time listing every live page. AI agents (and humans with curl) can read the source directly.
Publishing is a git push
The whole workflow is:
write src/content/blog/my-post.md
git commit
git push
Push to beta for a staging deploy at beta.lisovyi.net, merge to main for production. That’s it. That’s the CMS.