diff --git a/.eleventy.js b/.eleventy.js
index 4de7b4c..555af11 100644
--- a/.eleventy.js
+++ b/.eleventy.js
@@ -5,7 +5,8 @@ const pluginRss = require("@11ty/eleventy-plugin-rss");
module.exports = function(eleventyConfig) {
// Passthrough episodes directory to include both markdown and audio files
- eleventyConfig.addPassthroughCopy("episodes/*/*.mp3");
+ eleventyConfig.addPassthroughCopy("content/episodes/*/*.mp3");
+ eleventyConfig.addPassthroughCopy("content/images/*.jpg");
eleventyConfig.addPlugin(handlebarsPlugin);
eleventyConfig.addPlugin(pluginRss);
diff --git a/content/campaigns/crew-of-the-kahuna.md b/content/campaigns/crew-of-the-kahuna.md
new file mode 100644
index 0000000..cccb6bd
--- /dev/null
+++ b/content/campaigns/crew-of-the-kahuna.md
@@ -0,0 +1,16 @@
+---
+title: Crew of the Kahuna
+layout: campaign
+tags: campaign
+system:
+ name: FFG Star Wars
+seasons:
+ - 1
+ - 4
+---
+
+It is a dark time for the galaxy. Striking from their hidden base, the Rebel Alliance has destroyed the evil GALACTIC EMPIRE's powerful Death Star. Now, Imperial forces strike back, throwing the galaxy into war.
+
+In the midst of conflict, countless planets suffer under Imperial tyranny. Many flee opression to build new lives beyond the bounds of civilization.
+
+On the edge of the Empire, these renegades struggle to survive and remain free in the midst of ongoing turmoil....
\ No newline at end of file
diff --git a/content/campaigns/junkfort-boys.md b/content/campaigns/junkfort-boys.md
new file mode 100644
index 0000000..a5ab21b
--- /dev/null
+++ b/content/campaigns/junkfort-boys.md
@@ -0,0 +1,16 @@
+---
+title: Junk Fort Boys
+layout: campaign
+tags: campaign
+system:
+ name: Blades in the Dark
+seasons:
+ - 3
+ - 5
+---
+
+In the electrified, shadowy streets of Doskvol, the Junk Fort Boys—a distinctive crew of eccentrics—tackle a series of misadventures.
+
+The team includes Squish, a formidable fighter known for his culinary misadventures; Djuckles, a tinkerer with a knack for improvisation and occasional nut-punching solutions; and the Captain, an avid reader and drinker with a penchant for the occasional explosive.
+
+Together, they embark on daring heists and supernatural encounters across haunted ships, arcane academies, and high-society parties, often dealing with cursed artifacts and ghostly adversaries. Their dynamic headquarters evolves from a makeshift fort to a floating garbage barge, reflecting their chaotic lifestyle and inventive survival tactics. Through their escapades, they not only explore the mystical and perilous corners of Doskvol but also navigate the depths of their camaraderie and individual quests for purpose, all while maintaining a humorous twist on their unconventional problem-solving methods.
\ No newline at end of file
diff --git a/content/campaigns/rick-and-morty.md b/content/campaigns/rick-and-morty.md
new file mode 100644
index 0000000..4d46316
--- /dev/null
+++ b/content/campaigns/rick-and-morty.md
@@ -0,0 +1,10 @@
+---
+title: D&D vs. Rick and Morty
+layout: campaign
+tags: campaign
+system:
+ name: Dungeons and Dragons
+seasons:
+ - 2
+---
+When Morty sees a cute girl at school playing Dungeons & Dragons, he asks Rick to show him the ropes, only to discover that his grandfather is a veteran gamer. Next thing he knows, the entire family has been pulled into a campaign that escalates from virtual D&D simulations to alternate universes governed by the rules of the game. And as it turns out, Rick isn't the only one who knows his way around a d20.
\ No newline at end of file
diff --git a/content/css/style.scss b/content/css/style.scss
index d7dbcb4..aa39693 100644
--- a/content/css/style.scss
+++ b/content/css/style.scss
@@ -4,6 +4,7 @@ $secondary-color: #f0f0f0;
@import url('https://fonts.googleapis.com/css2?family=Noticia+Text:ital,wght@0,400;0,700;1,400;1,700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=UnifrakturCook:wght@700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400..800;1,400..800&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Didact+Gothic&family=Libre+Franklin:ital,wght@0,100..900;1,100..900&display=swap');
body {
font-family: Helvetica, sans-serif, sans-serif;
@@ -67,14 +68,33 @@ body {
}
&.season-5 {
- --newspaper-background-texture-image: url(../textures/parchment.jpg);
+ --newspaper-background-texture-image: url(../images/parchment.jpg);
--newspaper-headline-font: 'Noticia Text';
--newspaper-base-font: 'EB Garamond';
--newspaper-name-font: 'UnifrakturCook';
font-family: var(--newspaper-base-font);
- hgroup {
+
+ section.prologue {
+ padding: 20px;
+ margin: 20px;
+ border: black solid 1 px;
+ border-radius: 10px;
+ background: var(--newspaper-background-texture-image);
+ background-color: green;
+ }
+
+ hgroup{
+ h1 {
+ text-transform: uppercase;
+ margin: inherit;
+ }
+ h2 {
+ margin: inherit;
+ }
+ &.masthead {
text-align: center;
h1, h2 {
+ text-transform: inherit;
border-bottom: 0px;
font-family: var(--newspaper-headline-font);
line-height: 85%;
@@ -90,6 +110,47 @@ body {
font-style: italic;
}
}
+ }
+ h2 {
+ text-align: center;
+ }
+
+ article p {
+ text-align: justify;
+ }
+ }
+
+ &.season-4 {
+ --newspaper-background-texture-image: url(../images/starwars.jpg);
+ --newspaper-headline-font: 'Noticia Text';
+ --newspaper-base-font: 'EB Garamond';
+ --newspaper-name-font: 'UnifrakturCook';
+ font-family: "Libre Franklin";
+
+ section.prologue {
+ padding: 20px;
+ margin: 20px;
+ border: black solid 1 px;
+ border-radius: 10px;
+ background: var(--newspaper-background-texture-image);
+ background-color: black;
+ color: yellow;
+ }
+
+ hgroup{
+ text-align: center;
+ text-transform: uppercase;
+ h1 {
+ margin: inherit;
+ }
+ h2 {
+ margin: inherit;
+ }
+
+ }
+ strong {
+ text-transform: uppercase;
+ }
h2 {
text-align: center;
}
diff --git a/content/data/site.js b/content/data/site.js
new file mode 100644
index 0000000..295992c
--- /dev/null
+++ b/content/data/site.js
@@ -0,0 +1,6 @@
+require('dotenv').config();
+module.exports = function () {
+ return {
+ url: process.env.SITE_URL
+ };
+}
\ No newline at end of file
diff --git a/content/feeds/full.njk b/content/feeds/full.njk
new file mode 100644
index 0000000..3648913
--- /dev/null
+++ b/content/feeds/full.njk
@@ -0,0 +1,47 @@
+---
+permalink: /feeds/full.xml
+eleventyExcludeFromCollections: true
+metadata:
+ title: Crew of the Kahuna
+ subtitle: A FFG Star Wars RPG Story
+ description: This is an RPG podcast.
+ language: en
+ categories:
+ - Fiction
+ - Comedy
+ - Lesiure
+ - Games
+---
+
+
+
+ {{ metadata.title }}
+ {{ site.url | addPathPrefixToFullUrl }}
+
+ {{ metadata.description }}
+ {{ metadata.language or page.lang }}
+ {{metadata.subtitle}}
+ {{site.author.name}}
+ {%- for category in metadata.categories %}
+
+ {%- endfor %}
+
+ {{ site.author.name }}
+ {{ site.author.email }}
+
+
+ {{eleventy.generator}}
+
+ {%- for post in collections.episode | reverse %}
+ {%- set absolutePostUrl = post.url | htmlBaseUrl(site.url) %}
+ {% if post.data.podcast %}-
+ {{ post.data.title }}
+ {{ absolutePostUrl }}
+ {{ post.content | renderTransforms(post.data.page, site.url) }}
+ {{ post.date.toUTCString() | dateToRfc822 }}
+ {{ absolutePostUrl }}
+
+
{% endif %}
+ {%- endfor %}
+
+
\ No newline at end of file
diff --git a/content/feeds/podcast.11ty.js b/content/feeds/podcast.11ty.js
new file mode 100644
index 0000000..59583ea
--- /dev/null
+++ b/content/feeds/podcast.11ty.js
@@ -0,0 +1,79 @@
+const { Podcast } = require('podcast');
+const music_metadata = require('music-metadata');
+const fs = require('fs');
+
+async function getMp3Duration(filePath) {
+ try {
+ const metadata = await music_metadata.parseFile(filePath);
+ console.log('Duration:', metadata.format.duration, 'seconds');
+ return metadata.format.duration; // Duration in seconds
+ } catch (error) {
+ console.error('Error reading file:', error.message);
+ return null;
+ }
+}
+
+class PodcastFeed {
+ data() {
+ return {
+ // Writes to "/my-permalink/hello/index.html"
+ permalink: (data) => `${data.page.filePathStem}.xml`,
+ };
+ }
+
+ async render(data) {
+ const feed = new Podcast({
+ title: 'title',
+ description: 'description',
+ feedUrl: `${data.site.url}${data.page.filePathStem}.xml`,
+ siteUrl: data.site.url,
+ imageUrl: 'http://example.com/icon.png',
+ author: `${data.site.author.name}`,
+ copyright: '2013 Dylan Greene',
+ language: 'en',
+ categories: ['Category 1','Category 2','Category 3'],
+ pubDate: 'May 20, 2012 04:00:00 GMT',
+ ttl: 60,
+ itunesAuthor: `${data.site.author.name}`,
+ itunesSubtitle: 'I am a sub title',
+ itunesSummary: 'I am a summary',
+ itunesOwner: { name: `${data.site.author.name}`, email: `${data.site.author.email}` },
+ itunesExplicit: false,
+ itunesCategory: [{
+ text: 'Entertainment',
+ subcats: [{
+ text: 'Television'
+ }]
+ }],
+ itunesImage: 'http://example.com/image.png'
+ });
+
+ data.collections.episode.forEach(episode=>{
+ const episode_data = episode.data
+ const zero_pad_season = episode_data.season.toString().padStart(2, '0')
+ // const duration = getMp3Duration(`../episodes/s${zero_pad_season}/s${zero_pad_season}e${episode_data.episode}.mp3`)
+ /* loop over data and add to feed */
+ feed.addItem({
+ title: `S${zero_pad_season}E${episode_data.episode}: ${episode_data.title}`,
+ description: episode.content,
+ url: episode.url, // link to the item
+ guid: episode.url, // optional - defaults to url
+ categories: episode_data.categories,
+ author: data.site.author.name,
+ date: episode_data.date, // any format that js Date can parse.
+ // enclosure : {url:`${data.site.url}/episodes/s${zero_pad_season}/s${zero_pad_season}e${episode_data.episode}.mp3`}, // optional enclosure
+ enclosure : {url:`https://cdn.localhost/podcast/s${zero_pad_season}e${episode_data.episode}.mp3`}, // optional enclosure
+ itunesAuthor: data.site.author,
+ itunesExplicit: episode_data.itunesExplicit,
+ // itunesDuration: duration,
+ });
+ })
+
+
+ // cache the xml to send to clients
+ const xml = feed.buildXml();
+ return xml
+ }
+}
+
+module.exports = PodcastFeed
\ No newline at end of file
diff --git a/content/images/parchment.jpg b/content/images/parchment.jpg
new file mode 100644
index 0000000..43d0e57
Binary files /dev/null and b/content/images/parchment.jpg differ
diff --git a/content/images/starwars.jpg b/content/images/starwars.jpg
new file mode 100644
index 0000000..1c9bdc8
Binary files /dev/null and b/content/images/starwars.jpg differ
diff --git a/content/podcast.md b/content/podcast.md
new file mode 100644
index 0000000..684204a
--- /dev/null
+++ b/content/podcast.md
@@ -0,0 +1,9 @@
+---
+layout: podcast
+seasons:
+ - s01
+ - s05
+campaigns:
+ - junkfort-boys
+ - crew-of-the-kahuna
+---
diff --git a/layouts/base.hbs b/layouts/base.hbs
index 4574ab7..45e8d04 100644
--- a/layouts/base.hbs
+++ b/layouts/base.hbs
@@ -2,16 +2,16 @@
{{#if title }}{{ title }}{{else}}{{ site.title }}{{/if}} - {{ site.name }}
-
+
diff --git a/package-lock.json b/package-lock.json
index fcee972..3a4c47c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,10 @@
"@11ty/eleventy-navigation": "^0.3.5",
"@11ty/eleventy-plugin-handlebars": "^1.0.0",
"@11ty/eleventy-plugin-rss": "^2.0.2",
+ "dotenv": "^16.4.5",
"markdown-it": "^14.1.0",
+ "music-metadata": "^10.5.1",
+ "podcast": "^2.0.1",
"sass": "^1.80.3"
}
},
@@ -383,6 +386,16 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/@sec-ant/readable-stream": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+ "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="
+ },
+ "node_modules/@tokenizer/token": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -431,6 +444,14 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -557,6 +578,17 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
"node_modules/entities": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
@@ -629,6 +661,23 @@
"reusify": "^1.0.4"
}
},
+ "node_modules/file-type": {
+ "version": "19.6.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz",
+ "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==",
+ "dependencies": {
+ "get-stream": "^9.0.1",
+ "strtok3": "^9.0.1",
+ "token-types": "^6.0.0",
+ "uint8array-extras": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/file-type?sponsor=1"
+ }
+ },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -666,6 +715,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-stream": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "dependencies": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -778,6 +842,25 @@
"node": ">= 6"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/immutable": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
@@ -815,6 +898,17 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
@@ -860,6 +954,14 @@
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
},
+ "node_modules/media-typer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -880,6 +982,25 @@
"node": ">=8.6"
}
},
+ "node_modules/mime-db": {
+ "version": "1.25.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz",
+ "integrity": "sha512-5k547tI4Cy+Lddr/hdjNbBEWBwSl8EBc5aSdKvedav8DReADgWJzcYiktaRIw3GtGC1jjwldXtTzvqJZmtvC7w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.13",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz",
+ "integrity": "sha512-ryBDp1Z/6X90UvjUK3RksH0IBPM137T7cmg4OgD5wQBojlAiUwuok0QeELkim/72EtcYuNlmbkrcGuxj3Kl0YQ==",
+ "dependencies": {
+ "mime-db": "~1.25.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
@@ -893,6 +1014,34 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "node_modules/music-metadata": {
+ "version": "10.5.1",
+ "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-10.5.1.tgz",
+ "integrity": "sha512-lrBqOlhgAlqzBkqEMiqnVaCXwfQBkid8eXborPVceYv/t4lfXN3DiCBHed3fu+5kpqpaAez/rn3/PiT/fCYU4g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ },
+ {
+ "type": "buymeacoffee",
+ "url": "https://buymeacoffee.com/borewit"
+ }
+ ],
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "content-type": "^1.0.5",
+ "debug": "^4.3.7",
+ "file-type": "^19.6.0",
+ "media-typer": "^1.1.0",
+ "strtok3": "^9.0.1",
+ "token-types": "^6.0.0",
+ "uint8array-extras": "^1.4.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -937,6 +1086,18 @@
"resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
"integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="
},
+ "node_modules/peek-readable": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.3.1.tgz",
+ "integrity": "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -948,6 +1109,14 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/podcast": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/podcast/-/podcast-2.0.1.tgz",
+ "integrity": "sha512-TWXe/zVziwJNksAn7RLkSre+Z6VQgbs/+gC7qQCKdkyw0hv2hdFGOY9rHgKqa4LI+UP+yZBa6Wr+b9a9vrYDYQ==",
+ "dependencies": {
+ "rss": "^1.2.2"
+ }
+ },
"node_modules/posthtml": {
"version": "0.16.6",
"resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz",
@@ -1030,6 +1199,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rss": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rss/-/rss-1.2.2.tgz",
+ "integrity": "sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg==",
+ "dependencies": {
+ "mime-types": "2.1.13",
+ "xml": "1.0.1"
+ }
+ },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -1101,6 +1279,22 @@
"node": ">=0.10.0"
}
},
+ "node_modules/strtok3": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.0.1.tgz",
+ "integrity": "sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw==",
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "peek-readable": "^5.3.1"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -1112,6 +1306,22 @@
"node": ">=8.0"
}
},
+ "node_modules/token-types": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz",
+ "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==",
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "ieee754": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
"node_modules/uc.micro": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
@@ -1129,10 +1339,26 @@
"node": ">=0.8.0"
}
},
+ "node_modules/uint8array-extras": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz",
+ "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ },
+ "node_modules/xml": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
+ "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw=="
}
}
}
diff --git a/package.json b/package.json
index 7c7494a..8809b6a 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,8 @@
"description": "A static site generator",
"main": "index.js",
"scripts": {
+ "build": "npx @11ty/eleventy",
+ "serve": "npx @11ty/eleventy --serve",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
@@ -13,7 +15,10 @@
"@11ty/eleventy-navigation": "^0.3.5",
"@11ty/eleventy-plugin-handlebars": "^1.0.0",
"@11ty/eleventy-plugin-rss": "^2.0.2",
+ "dotenv": "^16.4.5",
"markdown-it": "^14.1.0",
+ "music-metadata": "^10.5.1",
+ "podcast": "^2.0.1",
"sass": "^1.80.3"
}
}