<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cleberg.net.git/content/templates/home.html, branch main</title>
<subtitle>My personal web garden &amp; blog.
</subtitle>
<id>http://git.krz.sh/cmc/cleberg.net.git/atom?h=main</id>
<link rel='self' href='http://git.krz.sh/cmc/cleberg.net.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.krz.sh/cmc/cleberg.net.git/'/>
<updated>2026-08-12T03:01:41+00:00</updated>
<entry>
<title>update links</title>
<updated>2026-08-12T03:01:41+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-12T03:01:41+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/cmc/cleberg.net.git/commit/?id=8b42c39038765a07f7561f363814430c0c9c81f5'/>
<id>urn:sha1:8b42c39038765a07f7561f363814430c0c9c81f5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Finish the move off weblorg</title>
<updated>2026-08-12T01:35:15+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-12T01:34:02+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/cmc/cleberg.net.git/commit/?id=a6ee2e0ca79b83b7f6bd4a521777cffdaf2260f2'/>
<id>urn:sha1:a6ee2e0ca79b83b7f6bd4a521777cffdaf2260f2</id>
<content type='text'>
Remove what the migration left behind, then cut build.py down to the work
orgo does not do: 443 lines to 168.

- Delete publish.el and theme/templates/, superseded by content/orgo.toml
  and content/templates/. theme/static/ stays; orgo publishes it as assets.
- Drop the tag builder, the org-source copy, and the helpers that only fed
  them. orgo generates /tags/ and a page per tag from a collection.
- Rewrite the README and the migration-era comments that explained the
  config by pointing at what weblorg used to do.
- Serve styles.css as authored. Minifying 1KB of CSS saved 52 bytes over
  the wire once compressed, which did not pay for a build step and a
  toolchain dependency.
- Stop wiping the output directory. The .orgo-cache.json inside it is what
  makes a build incremental, and orgo already prunes outputs whose source
  is gone and re-emits any that are missing. Production keeps .build/ and
  development gets .build-dev/, because production rewrites image URLs in
  the output and a shared directory would let one environment reuse pages
  rendered for the other.

An incremental build is byte-identical to a clean one, and the site output
is unchanged apart from the /uses/ stack row.
</content>
</entry>
<entry>
<title>Use a straight apostrophe on the home page</title>
<updated>2026-08-12T01:35:15+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-11T19:08:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/cmc/cleberg.net.git/commit/?id=4d78517a19684cc574de3754f6f36c82f0a8179e'/>
<id>urn:sha1:4d78517a19684cc574de3754f6f36c82f0a8179e</id>
<content type='text'>
Transcribing theme/templates/index.html into home.html turned "I've" into
"I&amp;rsquo;ve", so the org-ssg build rendered a curly apostrophe where the live
page has an ASCII one — the only character that differed between them.
</content>
</entry>
<entry>
<title>Bring the org-ssg templates to parity with the live site</title>
<updated>2026-08-12T01:35:15+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-11T18:41:18+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/cmc/cleberg.net.git/commit/?id=9049e20a29fb54245079ec19ae4a503e3f8e2799'/>
<id>urn:sha1:9049e20a29fb54245079ec19ae4a503e3f8e2799</id>
<content type='text'>
The org-ssg build rendered the right content in the wrong chrome. Closing every
difference found by comparing it against theme/templates/ and the live pages:

- base.html: Home link written by the layout rather than the site title, a
  &lt;title&gt; of "Page - cleberg.net" (bare "cleberg.net" on the home page, via a
  subtitle block), author/description/og meta, the RSS alternate link, four
  rel="me" identity links, favicon, skip link, &lt;main id="main-content"&gt;,
  aria-label on the nav, and the real footer.
- home.html: the h1 is "Christian Cleberg" (the collection's title), and the
  email line has its GPG link back.
- blog.html and garden.html: the two listings carry their own prose on the live
  site — the search/RSS hint, and the garden's growth stages — so they are no
  longer sharing the generic list.html. Tag pages still use it.
- tags.html: "Browse posts by topic."
- Blog posts get the reply-by-email and Bubbles lines. org-ssg has no per-page
  template selection, so the layout keys off the page's URL prefix.
- Tags leaves the nav, which the live site does not have.

feed.xml is new: the footer links /feed.xml and nothing was generating it. It
is a collection whose template happens to be XML. Its &lt;description&gt; carries
each post's excerpt rather than the full rendered body, which weblorg's feed
does include — a collection template gets each entry's metadata, not its HTML.

base_url is now set, since canonical links and a feed cannot be relative. Page
links stay relative, so a preview build still works from any directory.

gpg.txt, robots.txt and salary.csv are copied in from theme/static/: weblorg
publishes that directory to the site root, and org-ssg publishes from content/,
so /gpg.txt was a 404. styles.min.css is deliberately not copied — it is
gitignored build output, and the tracked styles.css holds the same rules.
</content>
</entry>
<entry>
<title>Add an org-ssg build alongside the weblorg one</title>
<updated>2026-08-12T01:35:15+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-08-11T07:20:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/cmc/cleberg.net.git/commit/?id=f1b8d6d4a89c5d33615556af65aadeb71e7800cb'/>
<id>urn:sha1:f1b8d6d4a89c5d33615556af65aadeb71e7800cb</id>
<content type='text'>
Builds the same site with org-ssg instead of weblorg, reproducing all 182 URLs the
current .build output has, plus 13 per-tag pages it does not.

    org-ssg serve content -o /tmp/preview      # write, with live reload
    org-ssg build content -o _site --strict    # build, failing on broken links

content/ is the source because it is the URL root: content/blog/post.org publishes at
/blog/post.html. Pointing at the repository root instead would prefix every URL with
/content/ and copy build.py, publish.el and LICENSE into the site as assets.

Added:

- content/org-ssg.toml — site metadata, an explicit nav, and four generated pages:
  the home page, the blog index, the garden index, and tag pages with an index. URLs
  come from #+SLUG:, which is why 2018-11-28-aes-encryption.org still publishes at
  /blog/aes-encryption.html.
- content/templates/ — base, home, list and tags. Plain layouts using the .post-list
  classes styles.css already defines, not a port of theme/templates/, which are
  templatel and a different language.
- content/styles.css — a verbatim copy of theme/static/styles.css, because org-ssg
  publishes assets from inside its source directory. `diff` between the two should stay
  empty; consolidate them if this migration goes further.

Removed content/index.org. It held only #+title and #+description, both now [site]
settings, and a generated home page cannot share a URL with an authored one — org-ssg
fails that build rather than picking a winner. Restore with
`git checkout content/index.org`, but then the home collection needs a different output.

Nothing in the weblorg setup changed. publish.el, theme/ and build.py still work as
before, so both builds coexist until one is chosen.

Known difference: the nav renders Home, Salary, Blog, Garden, Tags — explicit source
pages come before generated ones, where the live site orders Salary last.
</content>
</entry>
</feed>
