aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Drop the org-cite citation from the PHP comments postChristian Cleberg22 hours1-1/+1
| | | | | | | | | | `[cite/t:@brandur]` needs a citation processor and a bibliography, and there is neither — so weblorg renders it as "?? (????)" on the live page today, and org-ssg leaves the source text visible. The sentence already links Brandur's post immediately after, so the citation was only supplying his name. Now it just says his name. Correct under either generator, and one less piece of machinery the site depends on for one word.
* Make the reply footer a snippet, not a ruleChristian Cleberg22 hours3-16/+16
| | | | | | | | | | | | | | | Routing garden notes and /now/ through post.html put the invitation to reply on them because a directory said so, which is the wrong thing to be automatic — it is a choice about each page, and I had made it site-wide to chase parity with the live site. Those two rules are gone; blog posts keep it. The wording now lives in templates/reply.html rather than inside post.html, so it can be edited or emptied without touching how a post is built, and editing it re-renders the 170 pages that include it and nothing else. Any page opts in for itself with `#+TEMPLATE: post.html`; any post opts out with `#+TEMPLATE: base.html`.
* Settle the four remaining differences from the live siteChristian Cleberg22 hours5-13/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | - **The feed carries whole posts again.** `include_content = true` on the feed collection, and the template embeds `post.content` rather than the excerpt. 169 items, 2.9 MB, same as weblorg produces. - **Section numbering on.** The live site numbers its headings — inherited from Emacs' default rather than chosen, but switching generators is the wrong moment to quietly redesign 174 pages. The contents list numbers to match. One config line to flip if you decide against it. - **The reply footer follows the live site**: blog posts, garden notes and /now/, but not /uses/, /tips/ or /salary/. Two more `[[pages]]` rules. - **Tags stay one page per tag**, deliberately unlike the live single page with every post inlined under an anchor. A tag with its own URL is worth linking to, and the index stays short. Each index entry carries the tag's slug as an `id`, so old `/tags/#audit` links still land on the right row. Also fixes the garden emoji, which I had transcribed as ðŸŒģ where the weblorg template has ðŸŠī — taken from that template this time rather than typed. Content now matches the live site on 192 of 195 pages. The three that differ: footnote section markup, an `org-cite` citation neither generator renders usefully, and the tags page above.
* Publish theme/static directly instead of copying it into contentChristian Cleberg23 hours6-100/+9
| | | | | | | | | | org-ssg can read asset directories outside its source now, so the four files copied in — gpg.txt, robots.txt, salary.csv and styles.css — go back to having one home. `[build] assets = ["../theme/static"]` publishes that directory at /, which is where weblorg serves it from too. That also removes the note asking whoever comes next to keep two stylesheets identical, and picks up styles.min.css as a side effect.
* Render the table of contents, and group /blog/ by yearChristian Cleberg24 hours2-1/+42
| | | | | | | | | | | | | | | | | | | Two of the differences the page-by-page diff against the live site turned up. The TOC was the larger one: live has one on 171 pages and the org-ssg build had none. `[html] toc = true` only *exposes* `page.toc` — rendering it is the layout's job, and base.html never did. It now emits the same `div#table-of-contents` Emacs does, from a recursive macro over the tree. The anchors already matched, so every link lands where the live one does. Pages that say `#+OPTIONS: toc:nil` get an empty tree and render nothing, which is why /uses/, /now/ and /salary/ have no TOC here either — the same three as live. /blog/ now breaks its list under year headings, as the live index does, using `page.year` and minijinja's groupby. `group_by_year` at the top of blog.html turns it off for one flat list. After both, /blog/ matches the live page's content exactly, and 171 of 171 TOCs are accounted for.
* Use a straight apostrophe on the home pageChristian Cleberg24 hours1-1/+1
| | | | | | Transcribing theme/templates/index.html into home.html turned "I've" into "I’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.
* Route blog posts through post.htmlChristian Cleberg25 hours3-6/+19
| | | | | | | | | | | The reply-by-email and Bubbles lines were emitted from base.html behind a test on the page's URL, because org-ssg had no way for a page to pick a layout. It does now, so they live in a post.html that extends the shared one — the same split weblorg has between theme/templates/base.html and post.html — selected by a [[pages]] rule for blog/. All 169 posts carry the footer; /blog/ itself does not, being a generated listing rather than a post.
* Bring the org-ssg templates to parity with the live siteChristian Cleberg25 hours10-42/+235
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Order the org-ssg nav to match the live siteChristian Cleberg36 hours1-3/+7
| | | | | | | | Salary rendered before Blog and Garden because the two section indexes are generated by collections, and an explicit nav could only name source files — generated pages were appended after everything listed. org-ssg now accepts a generated page's output path in `nav.pages`, so listing all three puts them in the order the live site uses. /tags/ stays unlisted and lands last.
* Add an org-ssg build alongside the weblorg oneChristian Cleberg36 hours7-2/+237
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* publish new post: pbChristian Cleberg3 days1-0/+13
|
* fix malformed image URL and harden img rewriteChristian Cleberg9 days2-4/+9
| | | | | | | | Correct a https:/// typo in the tumblr post org source that produced a 404ing cross-origin image URL. Because the extra slash meant the string no longer matched, rewrite_img_urls() skipped it and shipped the broken URL. Make the rewrite pattern tolerate stray slashes so a source typo can't silently pass through un-rewritten again.
* remove bubbles.town vote widget, keep comment linkChristian Cleberg9 days3-5/+4
| | | | | | | Drop the third-party vote.js script and its mount div so posts no longer auto-fetch from bubbles.town (174 pages), completing onion self-containment. The opt-in 'comment on Bubbles' link stays. Remove the now-orphaned .bubbles-vote CSS rule.
* document /img/ symlink deployment prerequisiteChristian Cleberg9 days1-0/+22
|
* serve blog images from root-relative /img/ pathChristian Cleberg9 days1-0/+21
| | | | | | | | | Rewrite absolute img.cleberg.net URLs to /img/ in production builds so the onion serves images from its own origin instead of fetching them off-onion. Dev builds keep the absolute URLs so local previews still load images. Requires the server to serve /var/www/img/ at /img/ on the cleberg.net vhost (ln -s /var/www/img /var/www/cleberg.net/img).
* serve stylesheet from root-relative pathChristian Cleberg9 days2-5/+1
| | | | | | | Emit /styles.min.css instead of the prod-absolute https://cleberg.net/styles.min.css so the onion renders standalone without fetching its stylesheet off-onion. Drop the now-dead build.py replace that rewrote the same string.
* update git endpointsChristian Cleberg10 days2-4/+4
|
* add more images to 10gbps postChristian Cleberg11 days1-4/+10
|
* give bubbles button a defined heightChristian Cleberg12 days1-0/+1
|
* move linked images locallyChristian Cleberg12 days1-2/+2
|
* add iheartrss linkChristian Cleberg13 days1-1/+3
|
* publish new post: 10gbpsChristian Cleberg13 days1-0/+249
|
* fix python ruff formattingChristian Cleberg13 days3-12/+14
|
* update /tips pageChristian Cleberg13 days1-8/+2
|
* publish two new postsChristian Cleberg2026-07-252-0/+111
|
* publish new post: re-your-rss-reader-is-robbing-youChristian Cleberg2026-07-161-0/+29
|
* fix collapsed whitespace inside blockquotesChristian Cleberg2026-07-161-1/+2
|
* publish new post: re-torvalds-on-aiChristian Cleberg2026-07-161-0/+88
|
* add photography linkChristian Cleberg2026-07-061-1/+1
|
* add photography linkChristian Cleberg2026-07-061-0/+1
|
* fix: update bubbles link in posts to point to my specific bubbles pageChristian Cleberg2026-07-061-1/+1
|
* fix: remove carousel effects from latest postChristian Cleberg2026-07-061-93/+45
|
* remove css support for a photo carouselChristian Cleberg2026-07-061-6/+0
|
* publish new post: the-night-feelingChristian Cleberg2026-07-061-0/+193
|
* add css support for a photo carouselChristian Cleberg2026-07-061-0/+6
|
* embed bubbles voting widget on blog postsChristian Cleberg2026-07-061-4/+4
|
* enable automtic notifications from bubblesChristian Cleberg2026-07-061-1/+3
|
* update /now pageChristian Cleberg2026-07-041-18/+37
|
* update lemmy profile linkChristian Cleberg2026-07-031-1/+1
|
* remove RSS stylingChristian Cleberg2026-07-032-115/+0
|
* promote privacy page to buddingChristian Cleberg2026-07-011-1/+1
|
* add garden page: privacyChristian Cleberg2026-07-011-0/+116
|
* fix broken tag in garden pageChristian Cleberg2026-07-011-1/+1
|
* fix RAM typo in internet postChristian Cleberg2026-07-011-1/+1
|
* fix quotation tag in latest postChristian Cleberg2026-07-011-1/+1
|
* publish new post: internetChristian Cleberg2026-06-291-2/+1
|
* spell check latest postChristian Cleberg2026-06-291-13/+13
|
* publish new post: internetChristian Cleberg2026-06-291-0/+427
|
* update script example in latest postChristian Cleberg2026-06-291-1/+1
|
* update script example in latest postChristian Cleberg2026-06-291-0/+6
|