diff --git a/.eleventy.js b/.eleventy.js
new file mode 100644
index 0000000..4de7b4c
--- /dev/null
+++ b/.eleventy.js
@@ -0,0 +1,71 @@
+const handlebarsPlugin = require("@11ty/eleventy-plugin-handlebars");
+const handlebars = require('handlebars');
+const sass = require("sass");
+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.addPlugin(handlebarsPlugin);
+ eleventyConfig.addPlugin(pluginRss);
+
+ // handlebars helpers
+ handlebars.registerHelper("formatSeasonEpisode", function(season, episode) {
+ // Convert strings to integers and pad with zeros
+ const seasonNumber = parseInt(season, 10).toString().padStart(2, '0');
+ const episodeNumber = parseInt(episode, 10).toString().padStart(2, '0');
+
+ // Return the formatted string
+ return `S${seasonNumber} E${episodeNumber} `;
+ // return `S${seasonNumber}E${episodeNumber}`;
+ });
+
+ eleventyConfig.addFilter("seasonEpisodeFormat", function (season, episode, separator="") {
+ const seasonNumber = parseInt(season, 10).toString().padStart(2, '0');
+ const episodeNumber = parseInt(episode, 10).toString().padStart(2, '0');
+ return [seasonNumber, episodeNumber].join(separator)
+ return value;
+ });
+
+ handlebars.registerHelper('ifEquals', function(arg1, arg2, options) {
+ return (arg1 == arg2) ? options.fn(this) : options.inverse(this);
+ });
+
+ handlebars.registerHelper('ifIncludes', function(set, candidate, options) {
+ return (set.includes(candidate)) ? options.fn(this) : options.inverse(this);
+ });
+
+ // Creates the extension for use
+ eleventyConfig.addTemplateFormats("scss");
+ eleventyConfig.addExtension("scss", {
+ outputFileExtension: "css", // optional, default: "html"
+
+ // `compile` is called once per .scss file in the input directory
+ compile: async function (inputContent) {
+ let result = sass.compileString(inputContent);
+
+ // This is the render function, `data` is the full data cascade
+ return async (data) => {
+ return result.css;
+ };
+ },
+ });
+
+ eleventyConfig.addNunjucksFilter("podcastUrl", function(post) {
+ // Convert the season and episode to zero-padded numbers
+ const seasonNumber = parseInt(post.data.season, 10).toString().padStart(2, '0');
+ const episodeNumber = parseInt(post.data.episode, 10).toString().padStart(2, '0');
+
+ // Construct the podcast URL
+ return `/episodes/s${seasonNumber}/s${seasonNumber}e${episodeNumber}.mp3`;
+ });
+
+ return {
+ dir: {
+ data: "data",
+ input: "content",
+ output: "dist",
+ includes: "../layouts"
+ }
+ };
+};
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9517508
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+node_modules
+**/.obsidian
+dist
\ No newline at end of file
diff --git a/content/campaigns/campaigns.hbs b/content/campaigns/campaigns.hbs
new file mode 100644
index 0000000..64aed57
--- /dev/null
+++ b/content/campaigns/campaigns.hbs
@@ -0,0 +1,21 @@
+---
+layout: "base"
+override:tags: []
+---
+
+
Campaigns
+
\ No newline at end of file
diff --git a/content/campaigns/campaigns.json b/content/campaigns/campaigns.json
new file mode 100644
index 0000000..d0c4788
--- /dev/null
+++ b/content/campaigns/campaigns.json
@@ -0,0 +1,3 @@
+{
+ "tags": "campaign"
+}
\ No newline at end of file
diff --git a/content/css/style.scss b/content/css/style.scss
new file mode 100644
index 0000000..d7dbcb4
--- /dev/null
+++ b/content/css/style.scss
@@ -0,0 +1,113 @@
+$primary-color: #333;
+$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');
+
+body {
+ font-family: Helvetica, sans-serif, sans-serif;
+ background-color: $secondary-color;
+ color: $primary-color;
+
+ header {
+ text-align: center;
+ background-color: #333;
+ color: white;
+ padding: 20px 0;
+ }
+
+ ul.campaigns {
+ list-style-type: none;
+
+ li {
+ margin: 10px;
+ padding: 10px;
+ border: solid grey 1px;
+ border-radius: 10px;
+ h1 {
+ text-align: inherit;
+
+ }
+ }
+ }
+
+ nav {
+ background-color: #333;
+ overflow: hidden;
+ ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ }
+
+ /* Style the links inside the navigation bar */
+ a {
+ float: left;
+ color: #f2f2f2;
+ text-align: center;
+ padding: 10px 12px;
+ text-decoration: none;
+ font-size: 17px;
+ }
+
+ /* Change the color of links on hover */
+ a:hover {
+ background-color: #ddd;
+ color: black;
+ }
+
+ /* Add a color to the active/current link */
+ a.active {
+ }
+ }
+
+ h1 {
+ text-align: center;
+ }
+
+ &.season-5 {
+ --newspaper-background-texture-image: url(../textures/parchment.jpg);
+ --newspaper-headline-font: 'Noticia Text';
+ --newspaper-base-font: 'EB Garamond';
+ --newspaper-name-font: 'UnifrakturCook';
+ font-family: var(--newspaper-base-font);
+ hgroup {
+ text-align: center;
+ h1, h2 {
+ border-bottom: 0px;
+ font-family: var(--newspaper-headline-font);
+ line-height: 85%;
+ }
+ h1 {
+ column-count: 1;
+ font-family: var(--newspaper-name-font);
+ font-size: 5em;
+ margin: 8px;
+ text-align: center;
+ }
+ p {
+ font-style: italic;
+ }
+ }
+ h2 {
+ text-align: center;
+ }
+
+ article p {
+ text-align: justify;
+ }
+ }
+}
+
+header {
+ background-color: $primary-color;
+ padding: 10px;
+ text-align: center;
+}
+
+header nav a {
+ color: $secondary-color;
+ text-decoration: none;
+ margin: 0 15px;
+}
\ No newline at end of file
diff --git a/content/data/site.json b/content/data/site.json
new file mode 100644
index 0000000..ac27475
--- /dev/null
+++ b/content/data/site.json
@@ -0,0 +1,7 @@
+{
+ "author": {
+ "name": "Anthony Correa",
+ "email": "a@correa.co"
+ },
+ "url": "http://localhost:8080"
+}
\ No newline at end of file
diff --git a/content/episodes/episodes.json b/content/episodes/episodes.json
new file mode 100644
index 0000000..694805c
--- /dev/null
+++ b/content/episodes/episodes.json
@@ -0,0 +1,5 @@
+{
+ "layout": "episode",
+ "tags":"episode",
+ "podcast": true
+}
\ No newline at end of file
diff --git a/content/episodes/seasons.hbs b/content/episodes/seasons.hbs
new file mode 100644
index 0000000..7255a36
--- /dev/null
+++ b/content/episodes/seasons.hbs
@@ -0,0 +1,14 @@
+---
+layout: "base"
+permalink: "/seasons/"
+override:tags: []
+---
+
+
+ {{#each collections.season}}
+
+
+ {{{content}}}
+
+ {{/each}}
+
\ No newline at end of file
diff --git a/content/index.md b/content/index.md
new file mode 100644
index 0000000..0c66c64
--- /dev/null
+++ b/content/index.md
@@ -0,0 +1,4 @@
+---
+layout: index
+---
+We are a group of adventurers, storytellers, and dice-rolling enthusiasts who gather weekly to dive into epic campaigns and tell stories together. Whether it's battling ancient dragons, solving mysterious puzzles, or navigating treacherous political intrigues, we bring our characters to life and make unforgettable memories!
\ No newline at end of file
diff --git a/layouts/base.hbs b/layouts/base.hbs
new file mode 100644
index 0000000..4574ab7
--- /dev/null
+++ b/layouts/base.hbs
@@ -0,0 +1,22 @@
+
+
+
+ {{#if title }}{{ title }}{{else}}{{ site.title }}{{/if}} - {{ site.name }}
+
+
+
+
+ rpg.ascorrea.com
+
+
+
+
+
+ {{{content}}}
+
+
+