Commit 9049e20a29

9049e20a29fb54245079ec19ae4a503e3f8e2799

parent: 517926849e

Unsigned

cmc <hello@cleberg.net> · 2026-08-11 18:41 UTC

Bring the org-ssg templates to parity with the live site

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
  <title> 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, <main id="main-content">,
  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 <description> 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.

Layout: unified · split

content/gpg.txt added +52
@@ -0,0 +1,52 @@
1-----BEGIN PGP PUBLIC KEY BLOCK-----
2
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
500jZ4tA==
51=pl2G
52-----END PGP PUBLIC KEY BLOCK-----
content/org-ssg.toml +21 −13
@@ -13,22 +13,21 @@
1313title = "cleberg.net"
1414description = "Stillness amidst the chaos."
1515language = "en"
16# Empty keeps every URL relative, so the site works from a preview directory as well as
17# from its real origin. Set it to "https://cleberg.net" when you want canonical links, or
18# an RSS feed — a feed is read away from the site that served it, so its links cannot be
19# relative.
20base_url = ""
16# Set, because the layout emits canonical links and /feed.xml — a feed is read away from
17# the site that served it, so its links cannot be relative. Ordinary page-to-page links
18# stay relative regardless, so a preview build still works from a directory.
19base_url = "https://cleberg.net"
2120
2221[nav]
2322# Explicit, because the pages that belong in the nav are not all top-level: /blog/ and
2423# /garden/ are generated below, and salary/ is a section index one level down. index.org
25# is deliberately absent — the layout already links home from the site title, and listing
26# it here would print "cleberg.net" twice side by side.
24# is deliberately absent — the layout writes the Home link itself, exactly as weblorg's
25# base.html does.
2726#
2827# Generated pages are named by their output path, authored ones by their source. Listing
2928# them together is what puts Salary last: a collection with `nav = true` that is not
30# listed here gets appended after everything that is. /tags/ is deliberately not listed,
31# so it lands at the end.
29# listed here gets appended after everything that is — which is why the tags collection
30# below does not set `nav = true`: the live nav has no Tags entry.
3231mode = "explicit"
3332pages = ["blog/index.html", "garden/index.html", "salary/index.org"]
3433
@@ -62,14 +61,14 @@ section_numbers = false
6261source = "blog"
6362output = "index.html"
6463template = "home.html"
65title = "cleberg.net"
64title = "Christian Cleberg"
6665sort = "date"
6766order = "desc"
6867
6968[[collections]]
7069source = "blog"
7170output = "blog/index.html"
72template = "list.html"
71template = "blog.html"
7372title = "Blog"
7473sort = "date"
7574order = "desc"
@@ -78,7 +77,7 @@ nav = true
7877[[collections]]
7978source = "garden"
8079output = "garden/index.html"
81template = "list.html"
80template = "garden.html"
8281title = "Garden"
8382sort = "date"
8483order = "desc"
@@ -96,4 +95,13 @@ title = "Tagged: {tag}"
9695index_output = "tags/index.html"
9796index_template = "tags.html"
9897index_title = "Tags"
99nav = true
98
99# The RSS feed. Not a separate feature — a collection whose template happens to be XML,
100# which is why /feed.xml is declared here alongside the HTML listings.
101[[collections]]
102source = "blog"
103output = "feed.xml"
104template = "feed.xml"
105title = "cleberg.net"
106sort = "date"
107order = "desc"
content/robots.txt added +5
@@ -0,0 +1,5 @@
1User-agent: *
2Content-Signal: ai-train=yes, search=yes, ai-input=yes
3Allow: /
4Disallow:
5Sitemap: https://cleberg.net/sitemap.xml
content/salary.csv added +13
@@ -0,0 +1,13 @@
1Title,Department,Company,Location,Start,End,Salary,PercentChange
2Manager,Technology Assurance - Audit,KPMG,Omaha(NE),2025-10,2026-10,147600,0.0453
3Manager,Technology Assurance - Audit,KPMG,Omaha(NE),2024-10,2025-10,141200,0.2099
4Senior,Technology Assurance - Audit,KPMG,Omaha(NE),2023-10,2024-10,116700,0.0609
5Senior,Technology Assurance - Audit,KPMG,Omaha(NE),2022-06,2023-10,110000,0.2290
6Senior,Technology Risk - Consulting,Ernst & Young,Des Moines(IA),2021-09,2022-06,89500,0.2430
7Senior IT Auditor,Internal Audit,Ameritas,Lincoln(NE),2021-05,2021-09,72000,0.1076
8IT Auditor,Internal Audit,Ameritas,Lincoln(NE),2020-04,2021-05,65000,0.1206
9IS Auditor II,Internal Audit,Nelnet,Lincoln(NE),2019-12,2020-04,58000,0.3942
10IS Auditor I,Internal Audit,Nelnet,Lincoln(NE),2019-06,2019-12,41600,0.2500
11Internal Audit Intern,Internal Audit,Ameritas,Lincoln(NE),2018-02,2019-06,33280,1.2857
12Teaching Assistant,College of Business,University of Nebraska,Lincoln(NE),2017-08,2018-05,14560,-0.5000
13Community Management Intern,Store/Retail,Walgreens,Lincoln(NE),2017-06,2018-02,29120,0.0000
content/templates/base.html +51 −23
@@ -1,52 +1,80 @@
1{# Page layout for org-ssg.
1{# Page layout for org-ssg, mirroring theme/templates/base.html.
22
3 Styling comes from styles.css, a verbatim copy of theme/static/styles.css — the
4 stylesheet weblorg already serves. org-ssg publishes assets from inside its source
5 directory, so the copy lives here; `diff content/styles.css theme/static/styles.css`
6 should stay empty, or consolidate the two if you migrate for real.
3 Styling comes from styles.css, copied here from theme/static/ along with gpg.txt,
4 robots.txt and salary.csv — org-ssg publishes assets from inside its source
5 directory, and weblorg's live static root is theme/static/. The copies should stay
6 identical: `diff content/styles.css theme/static/styles.css` and friends should
7 print nothing, or consolidate the two if you migrate for real. weblorg links the
8 minified styles.min.css instead; that file is gitignored build output, and the rules
9 are the same, so the tracked stylesheet is the one to publish from here.
710
8 Available here: page (.title .url .date .date_iso .tags .excerpt .toc .keywords),
9 site, nav, root, stylesheet. See the org-ssg guide chapter on Templates. #}
11 Available here: page (.title .url .source .date .date_iso .tags .excerpt .toc
12 .keywords), site, nav, root, stylesheet. See the org-ssg guide on Templates. #}
1013<!DOCTYPE html>
1114<html lang="{{ site.language }}">
1215<head>
1316<meta charset="utf-8">
17<title>{% block subtitle %}{{ page.title }} - {% endblock %}{{ site.title }}</title>
1418<meta name="viewport" content="width=device-width, initial-scale=1">
15<title>{{ page.title }} &middot; {{ site.title }}</title>
16{%- if site.base_url %}
17<link rel="canonical" href="{{ page.url | absolute }}">
18{%- endif %}
19{%- if page.excerpt %}
20<meta name="description" content="{{ page.excerpt | truncate(150) }}">
21{%- endif %}
22<link rel="stylesheet" href="{{ root }}styles.css">
19<meta name="author" content="Christian Cleberg &lt;hello@cleberg.net&gt;">
20<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | truncate(150) }}{% else %}{{ site.description }}{% endif %}">
21<meta property="og:title" content="{{ page.title }}">
22<meta property="og:url" content="{{ page.url | absolute | replace("index.html", "") }}">
23<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | truncate(150) }}{% else %}{{ site.description }}{% endif %}">
24<link rel="canonical" href="{{ page.url | absolute | replace("index.html", "") }}">
25<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ root }}feed.xml">
26<link rel="stylesheet" href="{{ root }}styles.css" type="text/css">
27<link rel="icon" href="data:,">
28{#- rel="me" identity links. weblorg's base.html writes the last one as <a>, which a
29 browser hoists out of <head>; <link> is the spelling that stays where it is put. #}
30<link href="https://github.com/ccleberg" rel="me">
31<link href="https://gitlab.com/ccleberg" rel="me">
32<link href="mailto:hello@cleberg.net" rel="me">
33<link href="https://c.im/@cmc" rel="me">
2334{%- if stylesheet %}
2435<link rel="stylesheet" href="{{ stylesheet }}">
2536{%- endif %}
2637</head>
2738<body>
28<header>
29<nav>
39<a href="#main-content" class="skip-link">Skip to content</a>
40
41<nav aria-label="Site Navigation">
3042<ul>
31<li><a href="{{ root }}index.html">{{ site.title }}</a></li>
43<li><a href="{{ root }}index.html">Home</a></li>
3244{%- for item in nav %}
3345<li><a href="{{ item.url }}">{{ item.title }}</a></li>
3446{%- endfor %}
3547</ul>
3648</nav>
37</header>
38<main>
49
50<main id="main-content">
51{% block main %}
52<article>
3953<h1>{{ page.title }}</h1>
4054{%- if page.date_iso %}
41<p><time datetime="{{ page.date_iso }}">{{ page.date_iso }}</time></p>
55<p><time datetime="{{ page.date_iso }}">{{ page.date_iso }}</time>{% if page.excerpt %} &middot; {{ page.excerpt }}{% endif %}</p>
4256{%- endif %}
4357{%- if page.tags %}
4458<p>{% for tag in page.tags %}<a href="{{ root }}tags/{{ tag }}.html">#{{ tag }}</a> {% endfor %}</p>
4559{%- endif %}
46{% block content %}{{ body | safe }}{% endblock %}
60<div>{% block content %}{{ body | safe }}{% endblock %}</div>
61{#- Blog posts carry a reply footer; other pages do not. org-ssg has no per-page
62 template selection, so the page's own URL is what tells them apart. #}
63{%- if page.url is startingwith("blog/") %}
64<div><a href="mailto:hello@cleberg.net">Reply via email &rarr;</a></div>
65<div><i>...or, comment on this post on <a href="https://bubbles.town/source/cleberg.net">Bubbles</a>!</i></div>
66{%- endif %}
67</article>
68{% endblock %}
4769</main>
70
4871<footer>
49<p><a href="{{ root }}index.html">{{ site.title }}</a> &mdash; {{ site.description }}</p>
72<a href="https://git.krz.sh/cmc/cleberg.net.git/">Source</a> &middot;
73<a href="{{ root }}feed.xml">RSS</a> &middot;
74<a href="http://paske4urhs6nttrtlkuwa5cowum3fjkc6yv6kl4ncx3mjxcd77764nqd.onion/">Onion</a> &middot;
75<a href="{{ root }}tips/index.html">Tips</a> &middot;
76<a href="https://iheartrss.com/">I &hearts; RSS</a>
77<p>[ <a href="https://krz.sh">krz</a> &middot; <a href="https://audit-labs.dev">audit labs</a> ]</p>
5078</footer>
5179</body>
5280</html>
content/templates/blog.html added +16
@@ -0,0 +1,16 @@
1{# The blog index at /blog/, mirroring theme/templates/blog.html.
2 Separate from list.html because the live page carries its own prose. #}
3{% extends "base.html" %}
4{% block main %}
5<h1>{{ page.title }}</h1>
6<p>Use <code>&#8984; F</code> / <code>Ctrl F</code> to search &middot; <a href="{{ root }}feed.xml">RSS Feed</a></p>
7<p>Want to browse by topic instead? Head over to the <a href="{{ root }}tags/index.html">tags</a> page.</p>
8<ul class="post-list">
9{%- for entry in pages %}
10<li class="post-list-item">
11{%- if entry.date_iso %}<time datetime="{{ entry.date_iso }}">{{ entry.date_iso }}</time>{% endif %}
12<a href="{{ root }}{{ entry.url }}">{{ entry.title }}</a>
13</li>
14{%- endfor %}
15</ul>
16{% endblock %}
content/templates/feed.xml added +36
@@ -0,0 +1,36 @@
1<?xml version="1.0" encoding="UTF-8" ?>
2{#- The RSS feed at /feed.xml, mirroring theme/templates/feed.xml. A feed is read away
3 from the site that served it, so every URL here is absolute — which is what
4 `| absolute` needs [site] base_url for.
5
6 One difference from weblorg: <description> carries each post's excerpt rather than its
7 full HTML. org-ssg gives a collection template each entry's metadata, not its rendered
8 body. #}
9<rss version="2.0"
10 xmlns:content="http://purl.org/rss/1.0/modules/content/"
11 xmlns:dc="http://purl.org/dc/elements/1.1/"
12 xmlns:atom="http://www.w3.org/2005/Atom">
13 <channel>
14 <title>{{ site.title }}</title>
15 <atom:link href="{{ page.url | absolute }}" rel="self" type="application/rss+xml" />
16 <link>{{ "index.html" | absolute | replace("index.html", "") }}</link>
17 <description>{{ site.description }}</description>
18 <language>{{ site.language }}</language>
19 <webMaster>hello@cleberg.net (Christian Cleberg)</webMaster>
20{%- for post in pages %}
21 <item>
22 <title>{{ post.title }}</title>
23 <link>{{ post.url | absolute }}</link>
24 <guid isPermaLink="true">{{ post.url | absolute }}</guid>
25 <author>hello@cleberg.net (Christian Cleberg)</author>
26{%- if post.date_iso %}
27 <pubDate>{{ post.date_iso | rfc822 }}</pubDate>
28{%- endif %}
29{%- for tag in post.tags %}
30 <category>{{ tag }}</category>
31{%- endfor %}
32 <description>{{ post.excerpt }}</description>
33 </item>
34{%- endfor %}
35 </channel>
36</rss>
content/templates/garden.html added +30
@@ -0,0 +1,30 @@
1{# The garden index at /garden/, mirroring theme/templates/garden.html.
2 Notes are listed by title and description rather than by date. #}
3{% extends "base.html" %}
4{% block main %}
5<h1>{{ page.title }}</h1>
6<p>Notes in various states of growth. Some are stubs, some are developed. Browse
7around.</p>
8<section>
9<h2>&#127795; The Growth Stages</h2>
10<p>Instead of dates, these metadata labels show how mature a page is:</p>
11<span><strong>&#127793; Seedlings:</strong> Rough notes, raw ideas, or "half-baked"
12thoughts.</span><br>
13<span><strong>&#127807; Budding:</strong> Notes that have some structure and a few
14internal links.</span><br>
15<span><strong>&#127795; Evergreen:</strong> High-conviction ideas that are
16well-researched and stable.</span><br>
17<span><strong>&#127810; Compost:</strong> Ideas you no longer agree with but want to
18keep for historical context.</span><br><br>
19</section>
20<ul>
21{%- for entry in pages %}
22<li>
23<a href="{{ root }}{{ entry.url }}">{{ entry.title }}</a>
24{%- if entry.excerpt %}
25<span>{{ entry.excerpt }}</span>
26{%- endif %}
27</li>
28{%- endfor %}
29</ul>
30{% endblock %}
content/templates/home.html +6 −3
@@ -2,10 +2,13 @@
22
33 A generated page, so it has no source .org file — `pages` holds the blog collection's
44 entries, newest first, and the prose lives here. This mirrors what weblorg's
5 theme/templates/index.html does today. #}
5 theme/templates/index.html does today, including its bare <title>: the home page is
6 "cleberg.net" and not "cleberg.net - cleberg.net". #}
67{% extends "base.html" %}
7{% block content %}
8{% block subtitle %}{% endblock %}
9{% block main %}
810<section>
11<h1>{{ page.title }}</h1>
912<p>[ <a href="https://krz.sh">krz</a> &middot; <a href="https://audit-labs.dev">audit labs</a> ]</p>
1013<p>Privacy &middot; Self-Hosting &middot; iOS</p>
1114<p>I build tools, write about systems, and run my own infrastructure. Focused on privacy,
@@ -35,7 +38,7 @@ user control, and long-term utility.</p>
3538<ul>
3639<li>cgit (primary): <a href="https://git.krz.sh">~cmc</a></li>
3740<li>GitHub (mirror): <a href="https://github.com/ccleberg">@ccleberg</a></li>
38<li>Email: <a href="mailto:hello@cleberg.net">hello@cleberg.net</a></li>
41<li>Email: <a href="mailto:hello@cleberg.net">hello@cleberg.net</a> (<a href="{{ root }}gpg.txt">GPG</a>)</li>
3942<li>Lemmy: <a href="https://r.nf/u/cmc">@cmc</a></li>
4043<li>Mastodon: <a href="https://c.im/@cmc">@cmc</a></li>
4144<li>Pixelfed: <a href="https://gram.social/cmc">@cmc</a></li>
content/templates/tags.html +5 −3
@@ -1,7 +1,9 @@
1{# The tag index at /tags/. Receives `groups` — every tag with its count — rather than
2 `pages`, because it lists tags and not posts. #}
1{# The tag index at /tags/, mirroring theme/templates/tags.html. Receives `groups` —
2 every tag with its count — rather than `pages`, because it lists tags and not posts. #}
33{% extends "base.html" %}
4{% block content %}
4{% block main %}
5<h1>{{ page.title }}</h1>
6<p>Browse posts by topic.</p>
57<ul>
68{%- for tag in groups %}
79<li><a href="{{ root }}{{ tag.url }}">{{ tag.name }}</a> ({{ tag.count }})</li>