Skip to content

spike: Zola-based website replacing Hakyll#724

Draft
agentydragon wants to merge 9 commits intodevelfrom
spike/website-zola
Draft

spike: Zola-based website replacing Hakyll#724
agentydragon wants to merge 9 commits intodevelfrom
spike/website-zola

Conversation

@agentydragon
Copy link
Copy Markdown
Owner

Hakyll (rules_haskell + GHC bindist) can't build on NixOS and RBE doesn't help since repo rules run locally. Zola is a single static Rust binary that works everywhere.

This spike ports the website layout/style and 3 most recent posts to validate the approach. Includes Bazel genrule (http_archive for Zola binary, tar output), MIGRATION.md documenting URL compatibility strategy (nginx rewrites) and markup faithfulness analysis.

<link rel="alternate" type="application/rss+xml" title="RSS feed for agentydragon.com" href="/rss.xml" />
<link rel="alternate" type="application/atom+xml" title="Atom feed for agentydragon.com" href="/atom.xml" />
<link rel="me" href="https://mastodon.social/@agentydragon" />
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>

Check failure

Code scanning / CodeQL

Untrusted domain used in script or other content High

Content loaded from untrusted domain with no integrity check.
agentydragon and others added 2 commits March 21, 2026 16:38
Hakyll (rules_haskell + GHC bindist) can't build on NixOS and RBE
doesn't help since repo rules run locally. Zola is a single static
Rust binary that works everywhere.

This spike ports the website layout/style and 3 most recent posts to
validate the approach. Includes Bazel genrule (http_archive for Zola
binary, tar output), MIGRATION.md documenting URL compatibility
strategy (nginx rewrites) and markup faithfulness analysis.
Compares built Hakyll output against Zola output, accounting for URL
structure differences (flat .html vs directory/index.html). Reports
identical, different, and missing files with inline diffs for text.
Replace bash diff_sites.sh with Python diff_sites.py using html5lib for
DOM-aware HTML normalization. Eliminates noise from entity encoding,
self-closing tags, attribute order, doctype case, and indentation —
diffs now show only real content differences (URL changes, removed
comments, template structure).
Rewrite report generation to use Jinja2 instead of string concatenation.
Report includes: summary stats, color-coded TOC, side-by-side diff tables
with character-level inline highlighting (green/red spans), collapsible
sections per file, sticky table headers.
Remove all HTML comment nodes from the parsed DOM before serialization.
Eliminates noise from Hakyll-specific comments (old MathJax config,
template notes) that are intentionally absent in the Zola output.
Skip llm-instruct/ and llm/ directories from Hakyll side (not part of
Zola migration). Fix diff table line number columns rendering too wide
by removing table-layout:fixed and constraining ln cells to 2em.
Hugo (uglyURLs), Cobalt (permalink templates), Pelican, 11ty evaluated.
Hugo is the recommended alternative if flat .html URLs are a hard
requirement — single Go binary, same Bazel genrule pattern as Zola.
Hugo spike alongside Zola spike. Uses original Hakyll content with
minimal front matter additions (date, slug). Hugo's uglyURLs produces
identical URL structure to Hakyll (/posts/slug.html), eliminating the
need for nginx redirects.

Same 3-post scope as Zola spike. SASS compiled via Hugo Pipes.
Diff tool updated with --mode=hugo for identity path mapping.
<link rel="alternate" type="application/rss+xml" title="RSS feed for agentydragon.com" href="/rss.xml" />
<link rel="alternate" type="application/atom+xml" title="Atom feed for agentydragon.com" href="/atom.xml" />
<link rel="me" href="https://mastodon.social/@agentydragon" />
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>

Check failure

Code scanning / CodeQL

Untrusted domain used in script or other content High

Content loaded from untrusted domain with no integrity check.
Replace raw mode strings with Mode StrEnum and FileStatus StrEnum.
Report title, headers, and stat labels now reflect the actual mode
(e.g., "Hakyll vs Hugo", "Hugo-only") instead of hardcoded "Zola".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant