diff --git a/_includes/layouts/base.njk b/_includes/layouts/base.njk
index 891f424..2f5b239 100644
--- a/_includes/layouts/base.njk
+++ b/_includes/layouts/base.njk
@@ -65,6 +65,7 @@
+
diff --git a/eleventy.config.js b/eleventy.config.js
index 2bee38d..6ee5416 100644
--- a/eleventy.config.js
+++ b/eleventy.config.js
@@ -404,8 +404,9 @@ export default function (eleventyConfig) {
.slice(0, 5);
});
- // Pagefind indexing after each build
- eleventyConfig.on("eleventy.after", ({ dir, runMode }) => {
+ // Pagefind indexing + WebSub hub notification after each build
+ eleventyConfig.on("eleventy.after", async ({ dir, runMode }) => {
+ // Pagefind indexing
try {
console.log(`[pagefind] Indexing ${dir.output} (${runMode})...`);
execFileSync("npx", ["pagefind", "--site", dir.output, "--glob", "**/*.html"], {
@@ -416,6 +417,25 @@ export default function (eleventyConfig) {
} catch (err) {
console.error("[pagefind] Indexing failed:", err.message);
}
+
+ // WebSub hub notification — notify subscribers of feed updates
+ const hubUrl = "https://websubhub.com/hub";
+ const feedUrls = [
+ `${siteUrl}/feed.xml`,
+ `${siteUrl}/feed.json`,
+ ];
+ for (const feedUrl of feedUrls) {
+ try {
+ const res = await fetch(hubUrl, {
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: `hub.mode=publish&hub.url=${encodeURIComponent(feedUrl)}`,
+ });
+ console.log(`[websub] Notified hub for ${feedUrl}: ${res.status}`);
+ } catch (err) {
+ console.error(`[websub] Hub notification failed for ${feedUrl}:`, err.message);
+ }
+ }
});
return {
diff --git a/feed-json.njk b/feed-json.njk
index 352e13a..43357c8 100644
--- a/feed-json.njk
+++ b/feed-json.njk
@@ -7,6 +7,12 @@ eleventyExcludeFromCollections: true
"title": "{{ site.name }}",
"home_page_url": "{{ site.url }}/",
"feed_url": "{{ site.url }}/feed.json",
+ "hubs": [
+ {
+ "type": "WebSub",
+ "url": "https://websubhub.com/hub"
+ }
+ ],
"description": "{{ site.description }}",
"language": "{{ site.locale | default('en') }}",
"authors": [
diff --git a/feed.njk b/feed.njk
index 5a65275..c29105b 100644
--- a/feed.njk
+++ b/feed.njk
@@ -10,6 +10,7 @@ eleventyExcludeFromCollections: true
{{ site.description }}
{{ site.locale | default('en') }}
+
{{ collections.feed | getNewestCollectionItemDate | dateToRfc822 }}
{%- for post in collections.feed %}
{%- set absolutePostUrl = site.url + post.url %}