From f394e6e90f2fc050479baf5560b905c7df9ffa87 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Sun, 6 Jul 2025 00:56:48 -0400 Subject: [PATCH] optimize images --- eleventy.config.js | 100 ++++++++++++++---- site/_includes/-header.njk | 2 +- site/_includes/components/collectionList.njk | 2 +- site/_includes/css/site.css | 10 +- {assets => site/pages}/books/0007528418.jpg | Bin {assets => site/pages}/books/0395423317.jpg | Bin {assets => site/pages}/books/0465026567.jpg | Bin {assets => site/pages}/books/0553380958.jpg | Bin {assets => site/pages}/books/0765319853.jpg | Bin {assets => site/pages}/books/0936200111.jpg | Bin {assets => site/pages}/books/1523006560.jpg | Bin {assets => site/pages}/books/188790400X.jpg | Bin {assets => site/pages}/books/1887904166.jpg | Bin site/pages/{books.md => books/index.md} | 18 ++-- .../index.md} | 0 .../posts/2021-04-03-trivium/cover.jpg | Bin .../index.md} | 2 +- .../cover.jpg | Bin .../index.md} | 2 +- .../index.md} | 0 .../index.md} | 0 .../index.md} | 0 .../computers-will-start-thinking.jpg | Bin .../2025-04-24-thinking-machines/cover.jpg | Bin .../end-of-line.jpg | Bin .../index.md} | 6 +- .../index.md} | 0 .../index.md} | 0 .../index.md} | 0 .../index.md} | 0 .../index.md} | 0 31 files changed, 106 insertions(+), 36 deletions(-) rename {assets => site/pages}/books/0007528418.jpg (100%) rename {assets => site/pages}/books/0395423317.jpg (100%) rename {assets => site/pages}/books/0465026567.jpg (100%) rename {assets => site/pages}/books/0553380958.jpg (100%) rename {assets => site/pages}/books/0765319853.jpg (100%) rename {assets => site/pages}/books/0936200111.jpg (100%) rename {assets => site/pages}/books/1523006560.jpg (100%) rename {assets => site/pages}/books/188790400X.jpg (100%) rename {assets => site/pages}/books/1887904166.jpg (100%) rename site/pages/{books.md => books/index.md} (65%) rename site/posts/{2020-07-02-authority-consents-blind-spot.md => 2020-07-02-authority-consents-blind-spot/index.md} (100%) rename assets/2021-04-03--the-seven-liberal-arts.jpg => site/posts/2021-04-03-trivium/cover.jpg (100%) rename site/posts/{2021-04-03-trivium.md => 2021-04-03-trivium/index.md} (97%) rename assets/2021-05-26--needs-based-communication.jpg => site/posts/2021-05-26-needs-based-communication/cover.jpg (100%) rename site/posts/{2021-05-26-needs-based-communication.md => 2021-05-26-needs-based-communication/index.md} (99%) rename site/posts/{2021-10-16-embracing-mysticism.md => 2021-10-16-embracing-mysticism/index.md} (100%) rename site/posts/{2023-07-14-finally-a-coherent-worldview.md => 2023-07-14-finally-a-coherent-worldview/index.md} (100%) rename site/posts/{2024-06-05-redesign.md => 2024-06-05-redesign/index.md} (100%) rename assets/2025-04-24--computers-will-start-thinking.jpg => site/posts/2025-04-24-thinking-machines/computers-will-start-thinking.jpg (100%) rename assets/2025-04-24--tron-mcp.jpg => site/posts/2025-04-24-thinking-machines/cover.jpg (100%) rename assets/2025-04-24--end-of-line.jpg => site/posts/2025-04-24-thinking-machines/end-of-line.jpg (100%) rename site/posts/{2025-04-24-thinking-machines.md => 2025-04-24-thinking-machines/index.md} (97%) rename site/posts/{2025-05-15-tools-of-the-trade.md => 2025-05-15-tools-of-the-trade/index.md} (100%) rename site/posts/{2025-06-15-replacing-github-pages.md => 2025-06-15-replacing-github-pages/index.md} (100%) rename site/posts/{2025-06-21-war.md => 2025-06-21-war/index.md} (100%) rename site/posts/{2025-06-26-ffmpeg-audio-cleanup.md => 2025-06-26-ffmpeg-audio-cleanup/index.md} (100%) rename site/posts/{2025-06-28-bananagrams-variant.md => 2025-06-28-bananagrams-variant/index.md} (100%) diff --git a/eleventy.config.js b/eleventy.config.js index 2852e23..1fbb963 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -12,6 +12,7 @@ import clean from "eleventy-plugin-clean" import toc from "eleventy-plugin-toc" import EleventyFeedPlugin from "@11ty/eleventy-plugin-rss" import EleventyVitePlugin from "@11ty/eleventy-plugin-vite" +import EleventyImage from "@11ty/eleventy-img" import { ViteMinifyPlugin } from "vite-plugin-minify" import { execSync } from "child_process" import fetch from "@11ty/eleventy-fetch" @@ -65,6 +66,32 @@ export default async (config) => { config.addPassthroughCopy({ assets: "/", }) + mdLib.renderer.rules.image = (tokens, idx, _options, env, _self) => { + const token = tokens[idx]; + let src = token.attrGet('src'); + const alt = token.content; + const title = token.attrGet('title'); + + const file = relativeToInputPath(env.page.inputPath, src); + const formats = ["avif", "auto"]; + const imageOptions = { + widths: [125, 250, 500, "auto"], + formats, + outputDir: + path.join(config.dir.output, "img"), + } + EleventyImage(file, imageOptions); // async but we won't await it + const metadata = EleventyImage.statsSync(file, imageOptions); + const imageAttributes = { + alt, + title, + sizes: "var(--content-width)", + loading: "lazy", + decoding: "async", + }; + + return EleventyImage.generateHTML(metadata, imageAttributes); + } // collection from music folder config.addPassthroughCopy("site/music", { @@ -120,9 +147,36 @@ export default async (config) => { return ["posts", "recipes"].includes(t) }) }) - return [...results, ...linksCollection].sort((a, b) => a.date.getTime() - b.date.getTime()) + return [...results, ...linksCollection].sort( + (a, b) => a.date.getTime() - b.date.getTime() + ) }) + config.addShortcode("image", function imageShortcode(src, alt, sizes, loading, classNames, inputPath) { + const file = relativeToInputPath(inputPath ?? this.page.inputPath, src); + const formats = ["avif", "auto"]; + const imageOptions = { + widths: [125, 250, 500, "auto"], + formats, + outputDir: + path.join(config.dir.output, "img"), + } + console.log({ + src, alt, sizes, loading, classNames, imageOptions + }) + EleventyImage(file, imageOptions); // async but we won't await it + const metadata = EleventyImage.statsSync(file, imageOptions); + const imageAttributes = { + alt, + sizes, + loading, + decoding: "async", + ...(classNames ? { class: classNames} : {}) + }; + + return EleventyImage.generateHTML(metadata, imageAttributes); + }); + config.addFilter("toISOString", (dateString) => { return new Date(dateString).toISOString() }) @@ -187,24 +241,32 @@ async function fetchShaarliWebroll() { `Invalid XML from webroll feed. Reason: ${validation.err.msg}` ) } - const entries = feedContent.map((entry) => { - const content = entry.content["#text"].split( - '\n
{ + const content = entry.content["#text"].split( + '\n
category["@_label"]) - // .filter((category) => category !== "$webroll"), - }, - } - }).sort((a, b) => a.date.getTime() - b.date.getTime()) + content, + data: { + title: entry.title, + date: new Date(entry.published), + description: content, + tags: ["links"], + // tags: entry.category + // .map((category) => category["@_label"]) + // .filter((category) => category !== "$webroll"), + }, + } + }) + .sort((a, b) => a.date.getTime() - b.date.getTime()) return entries } + +function relativeToInputPath(inputPath, relativeFilePath) { + let split = inputPath.split("/"); + split.pop(); + return path.resolve(split.join(path.sep), relativeFilePath); + } diff --git a/site/_includes/-header.njk b/site/_includes/-header.njk index e14773e..1c44110 100644 --- a/site/_includes/-header.njk +++ b/site/_includes/-header.njk @@ -12,7 +12,7 @@ {%- if cover %}
- + {% image cover, "", "var(--content-width)", "eager" %}

{{ title }}{% if rssUrl and page.url !== '/' %}{% endif %}

{%- else %} diff --git a/site/_includes/components/collectionList.njk b/site/_includes/components/collectionList.njk index e4012c3..33660f1 100644 --- a/site/_includes/components/collectionList.njk +++ b/site/_includes/components/collectionList.njk @@ -6,7 +6,7 @@ {%- if (limit === 0 or loop.index <= limit) -%}
  • {% if item.data.cover %} - + {% image item.data.cover, "", "(min-width: 60rem) calc(0.5 * var(--content-width)), var(--content-width)", "lazy", "collection-cover", item.page.inputPath %} {% endif %} {{item.data.title}} {%- if item.data.date -%} diff --git a/site/_includes/css/site.css b/site/_includes/css/site.css index 4a6c109..b513e7a 100644 --- a/site/_includes/css/site.css +++ b/site/_includes/css/site.css @@ -128,6 +128,14 @@ main p img { max-width: 100%; } +:where(img[width]) { + width: auto; +} + +:where(img[width][height]) { + height: auto; +} + section:nth-child(n + 2) { margin-top: 1rem; } @@ -405,7 +413,7 @@ nav [aria-current] { flex-direction: column; justify-content: end; min-height: 20rem; - > img { + img { position: absolute; top: 0; left: 0; diff --git a/assets/books/0007528418.jpg b/site/pages/books/0007528418.jpg similarity index 100% rename from assets/books/0007528418.jpg rename to site/pages/books/0007528418.jpg diff --git a/assets/books/0395423317.jpg b/site/pages/books/0395423317.jpg similarity index 100% rename from assets/books/0395423317.jpg rename to site/pages/books/0395423317.jpg diff --git a/assets/books/0465026567.jpg b/site/pages/books/0465026567.jpg similarity index 100% rename from assets/books/0465026567.jpg rename to site/pages/books/0465026567.jpg diff --git a/assets/books/0553380958.jpg b/site/pages/books/0553380958.jpg similarity index 100% rename from assets/books/0553380958.jpg rename to site/pages/books/0553380958.jpg diff --git a/assets/books/0765319853.jpg b/site/pages/books/0765319853.jpg similarity index 100% rename from assets/books/0765319853.jpg rename to site/pages/books/0765319853.jpg diff --git a/assets/books/0936200111.jpg b/site/pages/books/0936200111.jpg similarity index 100% rename from assets/books/0936200111.jpg rename to site/pages/books/0936200111.jpg diff --git a/assets/books/1523006560.jpg b/site/pages/books/1523006560.jpg similarity index 100% rename from assets/books/1523006560.jpg rename to site/pages/books/1523006560.jpg diff --git a/assets/books/188790400X.jpg b/site/pages/books/188790400X.jpg similarity index 100% rename from assets/books/188790400X.jpg rename to site/pages/books/188790400X.jpg diff --git a/assets/books/1887904166.jpg b/site/pages/books/1887904166.jpg similarity index 100% rename from assets/books/1887904166.jpg rename to site/pages/books/1887904166.jpg diff --git a/site/pages/books.md b/site/pages/books/index.md similarity index 65% rename from site/pages/books.md rename to site/pages/books/index.md index de096c6..974c449 100644 --- a/site/pages/books.md +++ b/site/pages/books/index.md @@ -14,39 +14,39 @@ These books had a big influence on my thinking and taste. } -### [![book cover, showing a pair of carved shapes which cast shadows forming the letters G, E, and B](/books/0465026567.jpg) Gödel, Escher, Bach: an Eternal Golden Braid - Douglas Hofstadter](https://amzn.to/44Nvcuf) +### [{% image "0465026567.jpg", "book cover, showing a pair of carved shapes which cast shadows forming the letters G, E, and B", "8em" %} Gödel, Escher, Bach: an Eternal Golden Braid - Douglas Hofstadter](https://amzn.to/44Nvcuf) I read this heady tome in college. I think I've completed it three times? It alternates between whimsical stories and theory, building a case that thought and meaning are emergent properties of the brain. It deals heavily with the idea of self-reference, which is the main theme uniting the three people in the title. Although he discounts the possibility of the immaterial aspect of reality as unknowable, Hofstadter introduced me to many interesting ideas and his book is a delightful journey, if you are prepared for it. -### [![book cover, abstract space illustration showing three planets](/books/0007528418.jpg) The Space Trilogy: Out of the Silent Planet, Perelandra, and That Hideous Strength - C. S. Lewis](https://amzn.to/3SfO7Xc) +### [{% image "0007528418.jpg", "book cover, abstract space illustration showing three planets", "8em" %} The Space Trilogy: Out of the Silent Planet, Perelandra, and That Hideous Strength - C. S. Lewis](https://amzn.to/3SfO7Xc) These stories contain so much richness. One theme that stuck with me emerges in _Out of the Silent Planet_ and is repeated in _Perelandra_: that good things can be spoiled by overconsumption. Something that is pleasant or satisfying stands by itself, and doesn't need to be repeated or hoarded. In fact, the drive to capture, concentrate, and control pleasant things can cheapen them, and could be at the root of many of our troubles. -### [![book cover, a tromp-l'oeil torn segment reveals in bold letters "SELF-DECEPTION"](/books/1523006560.jpg) Leadership and Self-Deception - The Arbinger Institute](https://amzn.to/3GNsFGs) +### [{% image "1523006560.jpg", "book cover, a tromp-l'oeil torn segment reveals in bold letters \"SELF-DECEPTION\"", "8em" %} Leadership and Self-Deception - The Arbinger Institute](https://amzn.to/3GNsFGs) This book painted for me a vivid picture of the mechanics of selfish and self-centered thinking. It describes in detail the ways that we blind ourselves, especially in interpersonal communication. The result of internalizing the concepts in this book is a sort of secular elaboration of "Love your neighbor", but even though it misses (or omits? subtracts?) the spiritual core of things, it still rings quite true and the tools found in this book and others from the Arbinger Instutute are fantastically valuable. If this is of interest, you may also enjoy [Marshall Rosenberg's "Non-violent communication"](https://amzn.to/3SmSQqi) or [my article on needs-based communication](/posts/needs-based-communication/). -### [![book cover, a byzantine icon "The triumph of the Archangel Michael over the antichrist, who is shown falling into the abyss together with the cities of this world at the end of time"](/books/188790400X.jpg) Orthodoxy and the Religion of the Future - Fr. Seraphim Rose](https://amzn.to/4jVqE9F) +### [{% image "188790400X.jpg", "book cover, a byzantine icon \"The triumph of the Archangel Michael over the antichrist, who is shown falling into the abyss together with the cities of this world at the end of time\"", "8em" %} Orthodoxy and the Religion of the Future - Fr. Seraphim Rose](https://amzn.to/4jVqE9F) This book synthesizes many pieces of the zeitgeist as I have seen it develop in my life. It touches on nihilism, the charismatic movement, yoga, eastern and new-age spirituality, and the UFO phenomenon. All these things are contextualized into a movement towards an upcoming religious synthesis, and contrasted with eastern Orthodoxy. Fr. Seraphim has a clear, academic writing style which I found easy to read, and this book answered many questions I had not even thought to ask. I also recommend his book/pamphlet [Nihilism: The Root of the Revolution of the Modern Age](https://amzn.to/4jYlRnX), which is slightly drier than this but sets a good foundation for it, and [The Soul After Death](https://amzn.to/4iDaAIv) for its sober and thorough approach to understanding things most people have not witnessed directly. -### [![book cover, a mountainside monastery with a body of water in the background](/books/1887904166.jpg) The Gurus, the Young Man, and Elder Paisios - Dionysios Farasiotis](https://amzn.to/3GzsoXJ) +### [{% image "1887904166.jpg", "book cover, a mountainside monastery with a body of water in the background", "8em" %} The Gurus, the Young Man, and Elder Paisios - Dionysios Farasiotis](https://amzn.to/3GzsoXJ) This is the fascinating true story of a young man's experiences with occult eastern gurus, the amazing adventures and troubles he had, and his conversations and visits with Elder Paisios of Mount Athos. He tells the story without embellishment, speaking plainly about the fantastic things that he saw and his thoughts and feelings as he struggled to find peace. -### [![book cover, three shadowed figures in a dramatic pose in front of a looming red X](/books/0765319853.jpg) Little Brother - Cory Doctorow](https://www.gutenberg.org/ebooks/30142) +### [{% image "0765319853.jpg", "book cover, three shadowed figures in a dramatic pose in front of a looming red X", "8em" %} Little Brother - Cory Doctorow](https://www.gutenberg.org/ebooks/30142) This book functions not only as an engaging story, but a primer for digital security as a whole. If it doesn't make you an outright cypherpunk, you will at least understand the movement better. -### [![book cover, a red katana in front of a blue field of circuits](/books/0553380958.jpg) Snow Crash - Neal Stephenson](https://amzn.to/3SfPIMG) +### [{% image "0553380958.jpg", "book cover, a red katana in front of a blue field of circuits", "8em" %} Snow Crash - Neal Stephenson](https://amzn.to/3SfPIMG) A sympathetic main character, heaps of style, a hacker aesthetic, an evocative and lived-in setting, and non-stop action. This book magnified my love of the written word as a literal creative force. Digital reality and baseline reality are both shaped by language, but in different ways, and this story explores that distinction vigorously and memorably. -### [![book cover, a softly lit man in overalls stares as he is served a bowl of soup](/books/0395423317.jpg) The Stranger - Chris Van Allsburg](https://amzn.to/3SeBz2k) +### [{% image "0395423317.jpg", "book cover, a softly lit man in overalls stares as he is served a bowl of soup", "8em" %} The Stranger - Chris Van Allsburg](https://amzn.to/3SeBz2k) The illustrations in this surreal children's book stuck with me my whole life. I like all this author's illustrations, but this book especially captured my imagination. -### [![book cover, large text above a photo of a PC-2 computer, with a one-row LCD display and a tiny but complete QWERTY keyboard](/books/0936200111.jpg) Getting Started on the PC-2 - Harvard Pennington, Gary Camp, Ralph Burris](https://archive.org/details/gettingstartedon00harv) +### [{% image "0936200111.jpg", "book cover, large text above a photo of a PC-2 computer, with a one-row LCD display and a tiny but complete QWERTY keyboard", "8em" %} Getting Started on the PC-2 - Harvard Pennington, Gary Camp, Ralph Burris](https://archive.org/details/gettingstartedon00harv) This was my first programming book. My grandfather Clarence gave it to me along with a Radio Shack PC-2 handheld computer. That evening I managed to make a program that produced "music", a random sequence of tones. I was hooked. diff --git a/site/posts/2020-07-02-authority-consents-blind-spot.md b/site/posts/2020-07-02-authority-consents-blind-spot/index.md similarity index 100% rename from site/posts/2020-07-02-authority-consents-blind-spot.md rename to site/posts/2020-07-02-authority-consents-blind-spot/index.md diff --git a/assets/2021-04-03--the-seven-liberal-arts.jpg b/site/posts/2021-04-03-trivium/cover.jpg similarity index 100% rename from assets/2021-04-03--the-seven-liberal-arts.jpg rename to site/posts/2021-04-03-trivium/cover.jpg diff --git a/site/posts/2021-04-03-trivium.md b/site/posts/2021-04-03-trivium/index.md similarity index 97% rename from site/posts/2021-04-03-trivium.md rename to site/posts/2021-04-03-trivium/index.md index a779a6d..2dead56 100644 --- a/site/posts/2021-04-03-trivium.md +++ b/site/posts/2021-04-03-trivium/index.md @@ -4,7 +4,7 @@ description: An ancient methodology for learning, which formed the basis of clas tags: - learning - how to -cover: "/2021-04-03--the-seven-liberal-arts.jpg" +cover: "cover.jpg" coverInfo: "[The seven Liberal Arts - Museo del Prado](https://www.museodelprado.es/en/the-collection/art-work/the-seven-liberal-arts/89d9f351-fff6-4141-9efc-d5ea2951b488)" date: 2021-04-03 updated: 2025-07-01 diff --git a/assets/2021-05-26--needs-based-communication.jpg b/site/posts/2021-05-26-needs-based-communication/cover.jpg similarity index 100% rename from assets/2021-05-26--needs-based-communication.jpg rename to site/posts/2021-05-26-needs-based-communication/cover.jpg diff --git a/site/posts/2021-05-26-needs-based-communication.md b/site/posts/2021-05-26-needs-based-communication/index.md similarity index 99% rename from site/posts/2021-05-26-needs-based-communication.md rename to site/posts/2021-05-26-needs-based-communication/index.md index 685de88..b0920f3 100644 --- a/site/posts/2021-05-26-needs-based-communication.md +++ b/site/posts/2021-05-26-needs-based-communication/index.md @@ -6,7 +6,7 @@ tags: - how to date: 2021-05-26 updated: 2025-06-30 -cover: "/2021-05-26--needs-based-communication.jpg" +cover: "cover.jpg" coverInfo: "[David Clode](https://unsplash.com/photos/two-birds-sitting-on-top-of-a-white-rope-VYEBlG63bwc)" --- diff --git a/site/posts/2021-10-16-embracing-mysticism.md b/site/posts/2021-10-16-embracing-mysticism/index.md similarity index 100% rename from site/posts/2021-10-16-embracing-mysticism.md rename to site/posts/2021-10-16-embracing-mysticism/index.md diff --git a/site/posts/2023-07-14-finally-a-coherent-worldview.md b/site/posts/2023-07-14-finally-a-coherent-worldview/index.md similarity index 100% rename from site/posts/2023-07-14-finally-a-coherent-worldview.md rename to site/posts/2023-07-14-finally-a-coherent-worldview/index.md diff --git a/site/posts/2024-06-05-redesign.md b/site/posts/2024-06-05-redesign/index.md similarity index 100% rename from site/posts/2024-06-05-redesign.md rename to site/posts/2024-06-05-redesign/index.md diff --git a/assets/2025-04-24--computers-will-start-thinking.jpg b/site/posts/2025-04-24-thinking-machines/computers-will-start-thinking.jpg similarity index 100% rename from assets/2025-04-24--computers-will-start-thinking.jpg rename to site/posts/2025-04-24-thinking-machines/computers-will-start-thinking.jpg diff --git a/assets/2025-04-24--tron-mcp.jpg b/site/posts/2025-04-24-thinking-machines/cover.jpg similarity index 100% rename from assets/2025-04-24--tron-mcp.jpg rename to site/posts/2025-04-24-thinking-machines/cover.jpg diff --git a/assets/2025-04-24--end-of-line.jpg b/site/posts/2025-04-24-thinking-machines/end-of-line.jpg similarity index 100% rename from assets/2025-04-24--end-of-line.jpg rename to site/posts/2025-04-24-thinking-machines/end-of-line.jpg diff --git a/site/posts/2025-04-24-thinking-machines.md b/site/posts/2025-04-24-thinking-machines/index.md similarity index 97% rename from site/posts/2025-04-24-thinking-machines.md rename to site/posts/2025-04-24-thinking-machines/index.md index 5fefbbd..7c22cc2 100644 --- a/site/posts/2025-04-24-thinking-machines.md +++ b/site/posts/2025-04-24-thinking-machines/index.md @@ -2,15 +2,15 @@ title: Thinking machines slug: thinking-machines description: "The computers will start thinking, and people will stop." -cover: "/2025-04-24--tron-mcp.jpg" tags: - zeitgeist - ai +cover: "cover.jpg" --- There's an exchange early in the classic '80s movie [TRON](https://www.themoviedb.org/movie/97-tron). Some scientists are talking shop: -![Still from TRON, left to right Linda, Alan, and Gibbs, in conversation.](/2025-04-24--computers-will-start-thinking.jpg) +![Still from TRON, left to right Linda, Alan, and Gibbs, in conversation.](computers-will-start-thinking.jpg) > **ALAN:** I tell ya, ever since he got that Master Control Program, system's got more bugs than a bait store. > @@ -47,4 +47,4 @@ Science fiction is littered with cautionary tales about inhuman intelligence. Fo I don't think I am wise enough to safely use a genie in a bottle. And I don't want to outsource my creative efforts to an addictive, bullshitting alien intellect, even if it might save time and effort in the short term. -![End of line](/2025-04-24--end-of-line.jpg) +![End of line](end-of-line.jpg) diff --git a/site/posts/2025-05-15-tools-of-the-trade.md b/site/posts/2025-05-15-tools-of-the-trade/index.md similarity index 100% rename from site/posts/2025-05-15-tools-of-the-trade.md rename to site/posts/2025-05-15-tools-of-the-trade/index.md diff --git a/site/posts/2025-06-15-replacing-github-pages.md b/site/posts/2025-06-15-replacing-github-pages/index.md similarity index 100% rename from site/posts/2025-06-15-replacing-github-pages.md rename to site/posts/2025-06-15-replacing-github-pages/index.md diff --git a/site/posts/2025-06-21-war.md b/site/posts/2025-06-21-war/index.md similarity index 100% rename from site/posts/2025-06-21-war.md rename to site/posts/2025-06-21-war/index.md diff --git a/site/posts/2025-06-26-ffmpeg-audio-cleanup.md b/site/posts/2025-06-26-ffmpeg-audio-cleanup/index.md similarity index 100% rename from site/posts/2025-06-26-ffmpeg-audio-cleanup.md rename to site/posts/2025-06-26-ffmpeg-audio-cleanup/index.md diff --git a/site/posts/2025-06-28-bananagrams-variant.md b/site/posts/2025-06-28-bananagrams-variant/index.md similarity index 100% rename from site/posts/2025-06-28-bananagrams-variant.md rename to site/posts/2025-06-28-bananagrams-variant/index.md