diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index 7a919d3..f87eb7c 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -1,6 +1,6 @@ { "accentColor": "#1291a9", "textFontFamily": "Domaine Text", - "baseFontSize": 15, + "baseFontSize": 17, "baseFontSizeAction": true } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 50bcf84..b8a2990 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,41 +4,25 @@ "type": "split", "children": [ { - "id": "92fdef32d009f9c1", + "id": "23f2ec29011de806", "type": "tabs", "children": [ { - "id": "dacbb4448315da95", + "id": "7c97ae312d441f70", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "content/week-notes/029.md", + "file": "content/posts/House of Leaves Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987).md", "mode": "source", "source": false, "backlinks": false }, "icon": "lucide-file", - "title": "029" - } - }, - { - "id": "46c886ebfb1142c3", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "content/week-notes/029.md", - "mode": "source", - "source": false, - "backlinks": false - }, - "icon": "lucide-file", - "title": "029" + "title": "House of Leaves Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987)" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -194,18 +178,24 @@ "left-ribbon": { "hiddenItems": { "bases:Create new base": false, - "graph:Open graph view": false, - "daily-notes:Open today's daily note": false, "templates:Insert template": false, "command-palette:Open command palette": false, - "obsidian-git:Open Git source control": false, - "markdown-importer:Open format converter": false + "obsidian-git:Open Git source control": false } }, - "active": "caf2074a3f9acbd7", + "active": "7c97ae312d441f70", "lastOpenFiles": [ - "content/week-notes/028.md", + "public/tags/wordpress/index.xml", + "public/tags/wordpress/index.html", + "public/tags/wordpress", + "public/week-notes/029/index.html", + "public/week-notes/029", + "public/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987/index.html", + "public/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987", + "Content.base", "content/week-notes/029.md", + "content/posts/House of Leaves Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987).md", + "content/week-notes/028.md", "conflict-files-obsidian-git.md", "content/posts/Intentional Listening.md", "content/week-notes/027.md", @@ -213,13 +203,6 @@ "syntax_dark.css", "syntax_light.css", "public/css/syntax.css", - "themes/neverhungoveragain/assets/css/syntax.css", - "themes/neverhungoveragain/layouts/_partials/css/syntax_light.css", - "themes/neverhungoveragain/layouts/_partials/css/syntax_dark.css", - "themes/neverhungoveragain/layouts/_partials/css", - "public/css/syntax_light.css", - "public/css/syntax_dark.css", - "themes/neverhungoveragain/assets/css/syntax_dark.css", "content/posts/turning 30.md", "content/posts/2025-08-11.md", "content/posts/test.md", @@ -237,8 +220,6 @@ "content/week-notes/008.md", "content/week-notes/009.md", "content/week-notes/010.md", - "content/week-notes/011.md", - "content/week-notes/012.md", - "content/week-notes/013.md" + "content/week-notes/011.md" ] } \ No newline at end of file diff --git a/Content.base b/Content.base new file mode 100644 index 0000000..c615325 --- /dev/null +++ b/Content.base @@ -0,0 +1,15 @@ +views: + - type: cards + name: Content + filters: + or: + - file.folder.startsWith("content/posts") + - file.folder.startsWith("content/week-notes") + order: + - title + - url + - date + sort: + - property: date + direction: DESC + cardSize: 510 diff --git a/content/posts/House of Leaves Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987).md b/content/posts/House of Leaves Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987).md new file mode 100644 index 0000000..ac42283 --- /dev/null +++ b/content/posts/House of Leaves Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987).md @@ -0,0 +1,94 @@ +--- +title: "House of Leaves: Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987)" +date: 2015-01-01 +tags: + - literature + - wordpress +draft: false +url: house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987 +cover: https://cdn.cassie.ink/images/2015/whalestoe.png +--- +I’ve picked up *House of Leaves* again, Mark Z. Danielewski’s debut novel and veritable puzzle of a book. I previously abandoned it because, as a horror novel, I was having some trouble sleeping after reading it, but I’ve wanted to read it for years and the new year seems like a good time to conquer my fears. + +There’s plenty of discussion around the internet regarding the book, and plenty more people who, I’m sure, have decoded the book’s many coded messages. But I’m a stingy sort who likes to do things on my own, and I thought I’d log some of it here! The first of my challenges was a letter from Appendix II-E, sent to Johnny Truant from his mother; she suspects that the director of the Whalestoe Institute, where she is institutionalized, is intercepting her letters. She is able to send a private letter to Johnny via an attendant, telling him the key to her next letter: take only the first letter of each word, separate those letters into something coherent, and find her true message (the letter itself is pure nonsense). Therefore, it’s no significant discovery on my part, but more of a fun first challenge. Warning that this is a book of psychological horror, and the contents below may be troubling or triggering (esp. for rape victims). + +I won’t bother re-typing the entirety of the letter because, as I said, it’s nonsensical. However, when the first letter of each word is taken, I’ve come up with the following message. + +> May 8th, 1987 +> +> Dearest Johnny, +> +> They have found a way to break me. Rape a fifty-six year old bag of bones. There is no worse and don’t believe otherwise. +> +> The attendants do it. Others do it. Not every day, not every week, maybe not even every month. But they do it. Someone I don’t know always comes. When it’s dark. Late. I’ve learned not to scream, screaming gave me hope and unanswered hope is shattered hope. Think of your Haitian. It is far saner to choose rape than shattered hope. So I submit and I drift. +> +> I let caprice and a certain degree of free association take me away. Sometimes I’m still away long after it’s done, after he’s gone — the stranger, the attendant, the custodian, the janitor, cleaning man, waiting man, dirty man — the night tidying up after him. +> +> I’m in hell giving into heaven where I sometimes think of your beautiful father with his dreamy wings and only then do I allow myself to cry. Not because your mother was raped (again) but because she loved so much what she could never have been allowed to keep. Such a silly girl. +> +> You must save me Johnny. In the name of your father. I must escape this place or I will die. +> +> I love you so much. +> +> You are all I have. +> +> P. + +In addition, throughout the letter, letters are capitalized in the middle of words (ex. ‘froWned’). When those letters are collected, it spells the following message. + +> A face in a cloud no trace in the crowd + +(This omits the MAN from “Man and Nam,” which have appeared between the o and w of ‘crowd.’ I have found no solution to their capitalization — yet?) + +The phrase felt familiar once I found it, so I googled it, despite my resolve to figure out the puzzles myself (if possible) — I received only results for House of Leaves — perhaps I read it on tumblr somewhere? — but Google confirmed my suspicion that the Whalestoe Letters contain plenty more secrets to uncover (I’ve not read past the May 8th letter yet). I look forward to unfolding them! + +## Comments[^1] +**Jennifer (2020-10-10):** +> THANK YOU for this. + +**Paul (2020-11-14):** +> 5 years later and I say thank you. + +**Control (2021-07-26):** +> Appreciate the work, thank you + +**Shelby West (2021-08-02):** +> 6 years later! Thanks, I got stuck on the word “Haitian.” + +**Tildy (2022-03-27):** +> Trying to decipher by bookd light at 3am was no good thank you from 2022 + +**Hallway Explorer (2022-08-17):** +> Yes, thank you very much. + +**C (2023-05-24):** +> I’m dyslexic and trying SO hard to read this book, thank you, so much this was so hard for me and you saved me so much struggle!! + +**Laura5757 (2023-11-29):** +> While it’s not the same, the hidden message reminds me a lot of Ezra Pound’s famous poem, “In a Station of the Metro,” which consists of only two lines: “The apparition of these faces in the crowd: / Petals on a wet, black bough.” Perhaps that is what seemed familiar to you too? + +**Cassie (2024-07-02):** +> Perhaps! I do teach that poem to my students, so it occupies space in my brain… + +**Xynael (2024-08-07):** +> I also thought if its a key for a decipher code +> +> Since +> FACE +> RACE +> +> CLOUD +> CROWD +> +> and +> MAN +> NAM +> +> do this +> I’ve ready this in another Horror Books where they used these Einstein Codes to find hidden massages +> +> But I am really bad at these +> +> Maybe it’s nonesense and I see ghosts but maybe theres Something about it + +[^1]: This post originally appeared when I ran my site on WordPress and allowed folks to comment. Most of these are just thank yous, but I wanted to preserve them all the same. diff --git a/content/week-notes/029.md b/content/week-notes/029.md index ad666c6..24f2298 100644 --- a/content/week-notes/029.md +++ b/content/week-notes/029.md @@ -1,6 +1,6 @@ --- -title: "(week notes #)" -date: "2025-08-19" +title: (week notes 029) +date: 2025-08-19 tags: - week-notes draft: true diff --git a/public/about/index.html b/public/about/index.html index 1aa1b73..e65f4a5 100644 --- a/public/about/index.html +++ b/public/about/index.html @@ -8,6 +8,7 @@ this site is currently built using hugo. I edit my posts in Obsidian (with the help of GitSync on mobile) and sync them to a repo on 32bitcafe. I use Cloudflare Pages to build and serve the site. The current theme is heavily inspired by Joyce Manor’s Never Hungover Again, a very good album that everyone should listen to. "> + about | cassie.ink @@ -49,8 +50,6 @@ this site is currently built using hugo. I edit my posts in Obsidian (with the h
-

about

-
diff --git a/public/an-ode-to-gitsync/index.html b/public/an-ode-to-gitsync/index.html index 59f35b2..407c842 100644 --- a/public/an-ode-to-gitsync/index.html +++ b/public/an-ode-to-gitsync/index.html @@ -7,6 +7,7 @@ + an ode to gitsync | cassie.ink @@ -56,6 +57,8 @@ an-ode-to-gitsync + +

Since I moved this site to Hugo, I’ve been using an app called GitJournal to post from my phone. I have a beautiful desk setup with a clacky mechanical keyboard that’s a joy to write on, but the simple fact is that I’m a lazy shit and want to update my blog from the couch. It’s all mostly worked fine, with some headaches. I originally intended to use GitJournal to store my Github repo to my phone’s filesystem and then point an Obsidian1 vault at that.

Unfortunately, GitJournal currently cannot store the repo in the Android filesystem due to a permissions issue, so I can’t use it with Obsidian. GitJournal’s note-taking app is serviceable, but again, I want to use Obsidian. I’ve been making-do with GitJournal for a few months now — for once in my life, not fixing what’s broken — operating under the assumption that there were no other options.

Allow me to repeat myself: I am a lazy shit.

diff --git a/public/breaking-silences/index.html b/public/breaking-silences/index.html index 59ffcf0..4b1e33d 100644 --- a/public/breaking-silences/index.html +++ b/public/breaking-silences/index.html @@ -8,6 +8,7 @@ I am the faculty advisor for my middle school’s GSA. I have been for years now, and it’s something I’m very proud of, but this year especially I feel I have a great crop of kids that I’m really connecting with. At my town’s Pride festival in early June, my club had a booth selling crafts the kids had made to raise funds. The kids filtered in and out to help sell goods, but mostly I think they just valued having a “home base” at the event. For me, it was a long, socially draining day, but speaking to them afterward about the experience and hearing them tell me how at home they felt at the festival, how comfortable they felt being themselves, was so gratifying. "> + breaking silences | cassie.ink @@ -57,6 +58,8 @@ I am the faculty advisor for my middle school’s GSA. I have been for years breaking-silences + +

Last time I updated this blog, I wrote about silences in my professional career. These past few weeks, I feel I am doing the work to break mine.

I am the faculty advisor for my middle school’s GSA. I have been for years now, and it’s something I’m very proud of, but this year especially I feel I have a great crop of kids that I’m really connecting with. At my town’s Pride festival in early June, my club had a booth selling crafts the kids had made to raise funds. The kids filtered in and out to help sell goods, but mostly I think they just valued having a “home base” at the event. For me, it was a long, socially draining day, but speaking to them afterward about the experience and hearing them tell me how at home they felt at the festival, how comfortable they felt being themselves, was so gratifying.

I also (inadvertently) walked into orientation for our incoming students. Our guidance counselor, who was giving the presentation, asked me to talk to the kids about the clubs I run; when I mentioned Pride Club, a handful of kids immediately lit up and excitedly looked at each other. I often feel I’m not achieving as much as I could be with the club, but I have to remind myself of how much it means to those kids — even if it’s only five or ten of them.

diff --git a/public/cassie-ink-is-my-new-home/index.html b/public/cassie-ink-is-my-new-home/index.html index ccaa2d4..d30a8b8 100644 --- a/public/cassie-ink-is-my-new-home/index.html +++ b/public/cassie-ink-is-my-new-home/index.html @@ -8,6 +8,7 @@ This blog started on bearblog.dev as cassie.land. Bearblog is a great platform, but I wanted a challenge in my life, I guess, so I taught myself to use Hugo and moved to esotericbullshit.net (cassie.land was repurposed for my NAS). I love the esotericbullshit moniker and URL — it makes me laugh — but as it turns out, it’s kind of hard to share your link when it contains profanity.1 Perhaps that’s copium for a growing domain purchasing addiction, but I intend to make this one stick. "> + cassie.ink is my new home | cassie.ink @@ -57,6 +58,8 @@ This blog started on bearblog.dev as cassie.land. Bearblog is a great platform, cassie-ink-is-my-new-home + +

I moved domains, again.

This blog started on bearblog.dev as cassie.land. Bearblog is a great platform, but I wanted a challenge in my life, I guess, so I taught myself to use Hugo and moved to esotericbullshit.net (cassie.land was repurposed for my NAS). I love the esotericbullshit moniker and URL — it makes me laugh — but as it turns out, it’s kind of hard to share your link when it contains profanity.1 Perhaps that’s copium for a growing domain purchasing addiction, but I intend to make this one stick.

I have a long history with blogging. I posted on livejournal from 2007-2012 several times a week, with mundane accounts of my day and fragile mental state2. In 2013, I moved to a private Dreamwidth blog, and then to a WordPress blog in 2014. Each time I moved, I had the compulsion to backport all of my old writing, but I liked the idea of a fresh start — and I felt each time that I was a new, improved version of me with a distinct voice.

diff --git a/public/categories/index.html b/public/categories/index.html index b5caa9c..d7bd56e 100644 --- a/public/categories/index.html +++ b/public/categories/index.html @@ -6,6 +6,7 @@ + Categories | cassie.ink diff --git a/public/coming-out/index.html b/public/coming-out/index.html index e5d818f..f444c14 100644 --- a/public/coming-out/index.html +++ b/public/coming-out/index.html @@ -8,6 +8,7 @@ My relationship with my bisexuality has been fraught. I can pinpoint in specificity where I feel it started: in the sixth grade (for me, 2005 or 2006), reading the sex ed chapter in my science textbook, I was presented with the three sexualities — heterosexuality, homosexuality, and bisexuality. I had, by that point, already started puberty and experienced low-level attraction. I’d been confused that that attraction never seemed to have a distinct target: I liked boys and I liked girls. I remember an immediate sense of comfort and belonging in the term. That’s allowed?, I thought. Reading it in a textbook made it seem so simple. Then surely that’s the way to be. "> + Coming Out | cassie.ink @@ -57,6 +58,8 @@ My relationship with my bisexuality has been fraught. I can pinpoint in specific coming-out + +

I read a thread online recently about bisexuality: folks were discussing use of the label compared to something like pansexual. Many folks within the LGBTQ+ umbrella argue that pansexual is a more inclusive label than bisexual, as bi- upholds a binary view of gender.

My relationship with my bisexuality has been fraught. I can pinpoint in specificity where I feel it started: in the sixth grade (for me, 2005 or 2006), reading the sex ed chapter in my science textbook, I was presented with the three sexualities — heterosexuality, homosexuality, and bisexuality. I had, by that point, already started puberty and experienced low-level attraction. I’d been confused that that attraction never seemed to have a distinct target: I liked boys and I liked girls. I remember an immediate sense of comfort and belonging in the term. That’s allowed?, I thought. Reading it in a textbook made it seem so simple. Then surely that’s the way to be.

Through the rest of middle and high school, I continued to experience attraction in this way, but the word suddenly felt more complicated. I lived in an extremely conservative town; there were only a handful of openly queer kids, and I was inundated with queerphobic messaging — that bisexuality was just a phase, that everyone is a little bicurious during puberty. I digested it and refused the label, even as friends privately insisted to me that being in love with Natalie Portman wasn’t something straight women experienced.

diff --git a/public/css/main.css b/public/css/main.css index e85693d..de1e339 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -373,6 +373,15 @@ nav ul { } } +.cover { + width: 100%; + height: 100vw; + max-height: 500px; + background-size: cover; + background-position: center; + margin-top: 10px; +} + /* section */ .section article h2 a { text-decoration: none; diff --git a/public/dad/index.html b/public/dad/index.html index 2059e23..12bc9e4 100644 --- a/public/dad/index.html +++ b/public/dad/index.html @@ -7,6 +7,7 @@ + dad | cassie.ink @@ -56,6 +57,8 @@ dad + +

My father left when I was six and never stopped leaving. At school events, scheduled visits, personal lows, I scanned the crowd for his face and didn’t find it. I grew used to his absence and started to resent the appearances he made; when he did show up, I’d wish he hadn’t. At my college graduation, he parted with the gift, “I’m glad you’re not a fuck up like me,” turning my achievements into his own deluded, narcissistic pursuit of sympathy. He at least — and unwittingly — stumbled upon a truth: I succeeded despite his example and influence. Never because of it.

diff --git a/public/early-thoughts-on-pokemon-unbound/index.html b/public/early-thoughts-on-pokemon-unbound/index.html index 480eff2..d586451 100644 --- a/public/early-thoughts-on-pokemon-unbound/index.html +++ b/public/early-thoughts-on-pokemon-unbound/index.html @@ -7,6 +7,7 @@ + Early thoughts on Pokémon Unbound | cassie.ink @@ -56,6 +57,8 @@ early-thoughts-on-pokemon-unbound + +

I downloaded Pokémon: Unbound the other day to play alongside my partner. We are both big Pokémon fans — like buy the new games every year fans — though my interest has waned over the last few years (I loved Legends Arceus and generally felt that Scarlet/Violet were slaps in the face1). I have fond memories of the classic games, and I’ve read a lot of positive buzz about Unbound.

I’m fairly certain that this is the first proper ROM hack I’ve played, not counting a few randomizers that I’ve cooked up for fun (and, for the most part, played for an afternoon or two and abandoned). Unbound is incredibly feature-rich and ambitious; it adds a great deal of quality of life options as well as formidable challenge options for the hardcore2. I fall into the category of a more casual fan, so I was pleased to see things like effectiveness and STAB indicators hacked into the Fire Red/Leaf Green engine. Unbound also introduces a mission log and proper side quests; what I saw did not innovate much beyond fetch quests and “do this thing x amount of times then come back,” but some had short but charming stories to follow (like the Sandslash stealing food from a local family).

Unbound also has an original story that consumes a considerable amount of the player’s time. There’s a (for a Pokémon game) lengthy introduction cutscene that tells of the history of the region, and the player is introduced to a rogue organization that is aiming to capture the legendary birds to activate some doomsday device that will engulf the region in darkness. For Pokémon, the broad strokes aren’t far off from something like X/Y’s story — evil guy wants to destroy the world for some reason and you must stop them. I found the story mostly beneath notice, unfortunately; the game introduced a bunch of characters early on, and it is hard to care much about them when you have so many. In the opening hours of the game, for example, you meet your rival and Professor Log. Your rival is pretty standard Pokémon faire: brash and driven and uninterested in listening to the Professor’s advice, unlike the silent protagonist. Professor Log sends you off on various errands, one of which is to check in with his friend Arthur in the next town over, an expert on the history of the region; Arthur then introduces you to Jax, yet another young and ambitious trainer; and that’s not counting all of the villains and various gangs you meet in the introductory hours. I have some faith that Unbound has unique plans for these characters in the narrative, but the balance between clicking through story and actually engaging in the exploring and battling feels skewed: Unbound is dragged down by the weight of its ambition to be a Pokémon game with a story.

diff --git a/public/emily-dickinson-queer-theory/index.html b/public/emily-dickinson-queer-theory/index.html index b3d1c07..a7759d0 100644 --- a/public/emily-dickinson-queer-theory/index.html +++ b/public/emily-dickinson-queer-theory/index.html @@ -7,6 +7,7 @@ + LITR 308 Emily Dickinson & Queer Theory | cassie.ink @@ -56,6 +57,9 @@ emily-dickinson-queer-theory +
+
+

The lives of many literary greats remain a relative mystery; literary critics and historians are often left to piece together details from letters, documentation, and, sometimes controversially, the author’s work read for repeated motifs. They then draw what conclusions they can about the authors’ lives. One of the most prolific female poets in the English literary canon, Emily Dickinson’s life is preserved in letters and artifacts from her life. When examined as a body of work, Dickinson’s poetry reveals a pattern of focus on women’s interior lives and relationships that may be regarded as queer, especially with the added dimension of her close relationship with her sister-in-law. This essay examines a selection of her poems through a queer lens, highlighting the poems’ relationships to female love and Dickinson’s life and arguing against established patterns of erasing Dickinson’s queer identity.

Critical representation of Dickinson paints her an immensely private, reclusive individual. Known in her Massachusetts home of Amherst as “the Myth,” Dickinson “lived a nun-like existence, wearing only white, seeing no one but her sister, writing poems that almost no one saw” (Nicholson). This suggests that the aforementioned canonical portrait of Dickinson is mostly accurate, but though she saw few in person, she had a rich inner existence, expressed in her many poems and letters. Indeed, both her poems and letters were directed to her “most trusted literary audience,” Sue Dickinson (née Gilbert) (Nell Smith 56). Dickinson shared “about 250 poems” with Gilbert, “by far the largest number” compared to Dickinson’s other family members and acquaintances (Franklin 3). While the particulars of their relationship are lost to time, Dickinson and Gilbert unarguably shared an intimate connection; many of Dickinson’s poems are directed, either explicitly or implicitly, to Gilbert. Despite this, “until recently most literary critics have refused to acknowledge her love for other women,” instead continuing to prop up the image of the maidenly recluse (Faderman 43). Twentieth century critics, acknowledging the romantic and erotic contents of Dickinson’s poems, embarked on a “quest for the identity of this ‘reclusive spinster’s’ elusive (male) love,” though evidence shows “no significant heterosexual involvements until [Dickinson] was well into middle age” (Faderman 43). More recent literary criticism examines Dickinson’s poetry through a queer lens, but there is a long history of criticism going to “great lengths to explain away the content of same-sex love in her poems” (Faderman 45).

Suggestions of intimate female relationships are easy to identify within Dickinson’s vast collection of poems. In “Ourselves were wed one summer - dear,” Dickinson laments the end of a close relationship. The cause of separation is left obscure: Dickinson writes that “Our Futures different lay,” indicating that their lives lead them down diverging pathways, but also writes that the speaker’s object’s “little Lifetime failed” (Dickinson 9, 3). This adds a characteristically grim undercurrent to the poem, and may either be a physical or metaphorical death. The intimacy of the relationship is nonetheless underscored as Dickinson writes that she “wearied - too - of mine” after her object’s life ended (Dickinson 4). Dickinson therefore expresses that her life lacks meaning or value without her beloved. In the poem’s final stanza, Dickinson affirms that the poem describes a relationship between two women, writing that “we were Queens” (Dickinson 15) – the speaker and her object are therefore definitively female.

diff --git a/public/fx-chains-by-the-utterly-inept/index.html b/public/fx-chains-by-the-utterly-inept/index.html index fb87f49..465be32 100644 --- a/public/fx-chains-by-the-utterly-inept/index.html +++ b/public/fx-chains-by-the-utterly-inept/index.html @@ -8,6 +8,7 @@ In case it was not clear, I am not a professional. I am a blockhead who likes to tinker and who has watched a lot of YouTube videos. These are the FX chains I use for my voice, which may or may not be helpful to other people who do not have my voice. This is also not an exhaustive audio guide or overview of how I edit my audio. Maybe another time. "> + FX chains by the utterly inept | cassie.ink @@ -57,6 +58,8 @@ In case it was not clear, I am not a professional. I am a blockhead who likes to fx-chains-by-the-utterly-inept + +

Once upon a time ago (and a time, and a time), I had a podcast. I miss podcasting dearly and think about going back often — otherwise, what am I to do with a partial, flawed understanding of normalizing to a target loudness and editing around the disgusting noises my mouth makes? Well, share it with others, of course.1

In case it was not clear, I am not a professional. I am a blockhead who likes to tinker and who has watched a lot of YouTube videos. These are the FX chains I use for my voice, which may or may not be helpful to other people who do not have my voice. This is also not an exhaustive audio guide or overview of how I edit my audio. Maybe another time.

Currently, I use a RØDE Procaster as my microphone and a MOTU M2 as my interface. I have a Fethead between the two because otherwise people complain I am too quiet on Discord. I bought a pop filter designed for the RØDE Podmic; it fits on my Procaster and works, but it looks a little ridiculous, so sometimes I get risqué and take it off. I paid several hundred dollars for this setup so that I can capture my two dollar voice with fidelity.

diff --git a/public/hate-for-the-island/index.html b/public/hate-for-the-island/index.html index 8a6823f..247e0ef 100644 --- a/public/hate-for-the-island/index.html +++ b/public/hate-for-the-island/index.html @@ -7,6 +7,7 @@ + hate for the island | cassie.ink @@ -56,6 +57,8 @@ hate-for-the-island + +

I was born and raised on Long Island in a hamlet that rests along the Great South Bay.1 Known to most as a ferry town, this charming suburb lives and breathes the ocean. Most every resident has access to some kind of boat, whether through personal ownership or advantageous friendship. In the 90s, the town was voted the “friendliest town in America,” a slogan that still adorns the sign as you drive into town, by a mysterious group that awards such superlatives. That accolade, along with our yacht clubs, country clubs, lack of racial diversity, and generalized fear of anything outside the norm makes the town the near picture of 1950s suburban ideal.

In high school, the boys play football and the girls cheer them on; they graduate, marry, inherit the estate of their landed parents (who go on to relocate to the Hamptons or some other rich, desirable location), and have children of their own, thus completing their cyclical destiny. They do not fight. They do not divorce. They do not struggle, financially. They avoid anything seen as even slightly improper, for fear of damaging their social standing. And should the rebellious teenager stray out of line, their indiscretions quickly disappear, through privilege and influence and money. These people live happily trapped in their ticky-tacky homes and in their ticky-tacky lives.

I have always felt at odds with that world. In high school, for an English class free-write, I composed an essay likening the residents of the town with vampires whose venom sucked anything interesting or genuine from a person. I did not fit within the grand picture of conformity and normalcy. I wanted to break out, to rip at its edges.

diff --git a/public/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987/index.html b/public/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987/index.html new file mode 100644 index 0000000..a949f87 --- /dev/null +++ b/public/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987/index.html @@ -0,0 +1,196 @@ + + + + + + + + + +House of Leaves: Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987) | cassie.ink + + + + + + + + + + + +
+

+ + cassie + + ink + +

+ + + + +
+
+ +
+ + + +

House of Leaves: Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987)

+ +
+ house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987 +
+ + +
+ + +

I’ve picked up House of Leaves again, Mark Z. Danielewski’s debut novel and veritable puzzle of a book. I previously abandoned it because, as a horror novel, I was having some trouble sleeping after reading it, but I’ve wanted to read it for years and the new year seems like a good time to conquer my fears.

+

There’s plenty of discussion around the internet regarding the book, and plenty more people who, I’m sure, have decoded the book’s many coded messages. But I’m a stingy sort who likes to do things on my own, and I thought I’d log some of it here! The first of my challenges was a letter from Appendix II-E, sent to Johnny Truant from his mother; she suspects that the director of the Whalestoe Institute, where she is institutionalized, is intercepting her letters. She is able to send a private letter to Johnny via an attendant, telling him the key to her next letter: take only the first letter of each word, separate those letters into something coherent, and find her true message (the letter itself is pure nonsense). Therefore, it’s no significant discovery on my part, but more of a fun first challenge. Warning that this is a book of psychological horror, and the contents below may be troubling or triggering (esp. for rape victims).

+

I won’t bother re-typing the entirety of the letter because, as I said, it’s nonsensical. However, when the first letter of each word is taken, I’ve come up with the following message.

+
+

May 8th, 1987

+

Dearest Johnny,

+

They have found a way to break me. Rape a fifty-six year old bag of bones. There is no worse and don’t believe otherwise.

+

The attendants do it. Others do it. Not every day, not every week, maybe not even every month. But they do it. Someone I don’t know always comes. When it’s dark. Late. I’ve learned not to scream, screaming gave me hope and unanswered hope is shattered hope. Think of your Haitian. It is far saner to choose rape than shattered hope. So I submit and I drift.

+

I let caprice and a certain degree of free association take me away. Sometimes I’m still away long after it’s done, after he’s gone — the stranger, the attendant, the custodian, the janitor, cleaning man, waiting man, dirty man — the night tidying up after him.

+

I’m in hell giving into heaven where I sometimes think of your beautiful father with his dreamy wings and only then do I allow myself to cry. Not because your mother was raped (again) but because she loved so much what she could never have been allowed to keep. Such a silly girl.

+

You must save me Johnny. In the name of your father. I must escape this place or I will die.

+

I love you so much.

+

You are all I have.

+

P.

+

In addition, throughout the letter, letters are capitalized in the middle of words (ex. ‘froWned’). When those letters are collected, it spells the following message.

+
+

A face in a cloud no trace in the crowd

+

(This omits the MAN from “Man and Nam,” which have appeared between the o and w of ‘crowd.’ I have found no solution to their capitalization — yet?)

+

The phrase felt familiar once I found it, so I googled it, despite my resolve to figure out the puzzles myself (if possible) — I received only results for House of Leaves — perhaps I read it on tumblr somewhere? — but Google confirmed my suspicion that the Whalestoe Letters contain plenty more secrets to uncover (I’ve not read past the May 8th letter yet). I look forward to unfolding them!

+

Comments1

+

Jennifer (2020-10-10):

+
+

THANK YOU for this.

+

Paul (2020-11-14):

+
+

5 years later and I say thank you.

+

Control (2021-07-26):

+
+

Appreciate the work, thank you

+

Shelby West (2021-08-02):

+
+

6 years later! Thanks, I got stuck on the word “Haitian.”

+

Tildy (2022-03-27):

+
+

Trying to decipher by bookd light at 3am was no good thank you from 2022

+

Hallway Explorer (2022-08-17):

+
+

Yes, thank you very much.

+

C (2023-05-24):

+
+

I’m dyslexic and trying SO hard to read this book, thank you, so much this was so hard for me and you saved me so much struggle!!

+

Laura5757 (2023-11-29):

+
+

While it’s not the same, the hidden message reminds me a lot of Ezra Pound’s famous poem, “In a Station of the Metro,” which consists of only two lines: “The apparition of these faces in the crowd: / Petals on a wet, black bough.” Perhaps that is what seemed familiar to you too?

+

Cassie (2024-07-02):

+
+

Perhaps! I do teach that poem to my students, so it occupies space in my brain…

+

Xynael (2024-08-07):

+
+

I also thought if its a key for a decipher code

+

Since +FACE +RACE

+

CLOUD +CROWD

+

and +MAN +NAM

+

do this +I’ve ready this in another Horror Books where they used these Einstein Codes to find hidden massages

+

But I am really bad at these

+

Maybe it’s nonesense and I see ghosts but maybe theres Something about it

+
+
+
    +
  1. +

    This post originally appeared when I ran my site on WordPress and allowed folks to comment. Most of these are just thank yous, but I wanted to preserve them all the same. ↩︎

    +
  2. +
+
+ + + +
+ +
+ +
+ + +
+ + + diff --git a/public/hugo-podcast/index.html b/public/hugo-podcast/index.html index d619353..d5199c1 100644 --- a/public/hugo-podcast/index.html +++ b/public/hugo-podcast/index.html @@ -4,9 +4,10 @@ - + Using Hugo to generate a podcast feed | cassie.ink @@ -56,7 +57,10 @@ hugo-podcast -

I’ve been podcasting on and off for over ten years now — all shows that I’ve since abandoned1, either intentionally or due to time — but I’ve kept websites for them up and running for archival purposes. Originally, the sites were powered by WordPress and podcasting plugins (PowerPress and then Podlove). I didn’t want to continue paying to host the sites nor maintain a WordPress install2. I could, of course, use one of the many podcast hosting services out there — but just like I believe in owning your own space on the internet, I believe you should own and control your podcast feed (and not have to pay a company $15/mo in perpetuity). I use Hugo (which I then deploy with Cloudflare Pages) to generate the sites and feeds; I chose because I understand how to use it. I’m sure you could make this work with other static site generators. There’s an 11ty plugin out there, for example, which is far more advanced than what I’ve set up. But I built this myself. It works. It does not require me to endlessly fiddle or update (unless I want to).

+
+
+ +

I’ve been podcasting on and off for over ten years now — all shows that I’ve since abandoned1, either intentionally or due to time — but I’ve kept websites for them up and running for archival purposes. Originally, the sites were powered by WordPress and podcasting plugins (PowerPress and then Podlove). I didn’t want to continue paying to host the sites nor maintain a WordPress install2. I could, of course, use one of the many podcast hosting services out there — but just like I believe in owning your own space on the internet, I believe you should own and control your podcast feed (and not have to pay a company $15/mo in perpetuity). I use Hugo (which I then deploy with Cloudflare Pages) to generate the sites and feeds; I chose Hugo because I understand how to use it. I’m sure you could make this work with other static site generators. There’s an 11ty plugin out there, for example, which is far more advanced than what I’ve set up. But I built this myself. It works. It does not require me to endlessly fiddle or update (unless I want to).

I am not going to cover hosting your audio files in this post. I offload mine to a storage zone on Bunny; my podcasts are low traffic, so that costs me $12/yr. You could probably get away with using archive.org for free instead, as long as you can get a direct link to your mp3. I’m also not going to cover creating a theme for your podcast in this post. I made my own for both of my sites, but you can easily use a premade one.

A podcast is, at its core, a collection of audio files served by an RSS feed. That feed provides information to podcast apps, like where to download an episode and how long it is. An SSG like Hugo, which is designed primarily for bloggers, works great for this because it already has an an embedded RSS template that it uses to syndicate your content. The only difference is that we’re going to set up the RSS feed to serve both text (your show notes) and audio — as well as all the information that podcast apps need to surface your show. We’re going to work from Hugo’s RSS base template but inject basic podcast tags as well as some additional ones for newer features like chapter support.

Creating a custom feed template

diff --git a/public/i-finished-lord-of-the-rings/index.html b/public/i-finished-lord-of-the-rings/index.html index 716359f..451d26f 100644 --- a/public/i-finished-lord-of-the-rings/index.html +++ b/public/i-finished-lord-of-the-rings/index.html @@ -7,6 +7,7 @@ + Climbing my personal Mount Doom (I finished reading Lord of the Rings) | cassie.ink @@ -56,6 +57,8 @@ i-finished-lord-of-the-rings + +

Peter Jackson’s The Lord of the Rings: The Fellowship of the Ring released in 2001 when I was seven years old. At the time, my media diet consisted mostly of The Powerpuff Girls and obsessively reading and re-reading the first four Harry Potter books.1 I would like to say that my father was thoughtful and felt that I would have enjoyed another fantasy series with wizards and magic but knew that a three-plus-hour theater experience was tall ask for a seven year old. Unfortunately, I know him, and I think it more likely that he is cheap and thought the movie looked cool, so when Fellowship released on home media, we trucked to the neighborhood knock-off and rented it on VHS. That night, I crowded with my two older siblings around a (by today’s standards) laughably small tube TV. We tucked in with no expectations or understanding of what the movie would be about.

I would like to say that I was surprised and delighted by the mystical adventure, high fantasy setting, and well-sketched characters. Instead I was terrified by the scant glimpses of Gollum and suffered the first sleepless night inspired by a movie I can recall.2 I doubt I understood much of the plot: the only impressions I can recall are “swords and magic are cool” and “maybe Dad should be screening these movies before he shows them to us.”3

Lord of the Rings-mania, of course, consumed the early 2000s, and I became ever-so-slightly less of a chickenshit. My siblings and I were obsessed with the films; we watched them repeatedly and anxiously awaited each release. I don’t remember seeing Two Towers for the first time (though the scene of Aragorn opening the doors to Helms Deep is etched in my brain as a core memory), but we did see Return of the King in theaters. I also spent a sleepless night after it, but my insomnia stemmed instead from violent puking fits of popcorn and Sierra Mist.4

diff --git a/public/index.html b/public/index.html index 84bae19..b48de03 100644 --- a/public/index.html +++ b/public/index.html @@ -7,6 +7,7 @@ + cassie.ink @@ -52,18 +53,47 @@
-

(week notes 28)

+

(week notes 029)

- week-notes/028 +

Doing

Reading

Watching

Playing

+

I’m still playing Fields of Mistria, although I have had a few mid-day game crashes this week. The game is in early access, so I can’t complain too much, but it’s the first time it’s happened to me. It’s frustrating to lose progress, but I suppose I should get into the habit of saving a few times throughout the day.1

Listening

-

I finally got around to listening to SOPHIE by SOPHIE. Man, I have such mixed feelings about posthumous releases. The greedy bitch in me wants more, always, especially from artists who died way too young. I know SOPHIE’s brother, who finished the album, insists that SOPHIE was nearly done with it at the time of her death, but the stretch between “nearly finished” and “actually ready to release” can be miles long for an artist. I’m not an artist, by any means, of SOPHIE’s caliber, but a piece of writing for me can completely transform in the edit. Posthumous albums too often feel like an early sketch1, a pastiche of the auteur that are perhaps categorically incapable of capturing the genuine vision and artistry of the deceased. Unfortunately, this was the case for me with SOPHIE: “Reason Why” and “Live in My Truth” were standouts, but in general, it lacked the thrill and voice of SOPHIE (RIP).

+

I listened to SUCK UP ALL THE OXYGEN by Hutch Harris because I saw the cover on Bandcamp and thought it was funny. The album was fine but not for me. There was a time in my life when I probably would have been really into this, but it’s not now.

+ + +
+ +
+ +
+ +
+ +

Reduced to tongue eardrum thumb pencil and price (WN28)

+
+ week-notes/028 +
+

Doing

+

My desk upgrade journey hasn’t gone as planned. The monitor mount I bought has a really small clamp, which I should have checked before buying it, but I was so excited about a good deal. It fits on the desk and looks great, but I’m not able to spread the weight with the steel plates I bought, and I don’t trust a particleboard desktop to stand the test of time with a clamp. I spent a long time trying to brainstorm solutions (modify the clamp? build a wooden desk top?), and I had a sleepless night stressed about it. Eventually I decided to just order a different mount and I’ll try to sell this one locally to get my money back. It’s a bummer because the arm is really nice, but I wanted the piece of mind of using something that isn’t jerry-rigged. Normally I’m down for a stupid solution, but not when it’s holding up several hundreds of dollars of tech.

@@ -84,13 +114,13 @@

Using Hugo to generate a podcast feed

hugo-podcast
-

I’ve been podcasting on and off for over ten years now — all shows that I’ve since abandoned1, either intentionally or due to time — but I’ve kept websites for them up and running for archival purposes. Originally, the sites were powered by WordPress and podcasting plugins (PowerPress and then Podlove). I didn’t want to continue paying to host the sites nor maintain a WordPress install2, so here’s how I migrated the sites to Hugo (which I then deploy with Cloudflare Pages).

+

I’ve been podcasting on and off for over ten years now — all shows that I’ve since abandoned1, either intentionally or due to time — but I’ve kept websites for them up and running for archival purposes. Originally, the sites were powered by WordPress and podcasting plugins (PowerPress and then Podlove). I didn’t want to continue paying to host the sites nor maintain a WordPress install2. I could, of course, use one of the many podcast hosting services out there — but just like I believe in owning your own space on the internet, I believe you should own and control your podcast feed (and not have to pay a company $15/mo in perpetuity). I use Hugo (which I then deploy with Cloudflare Pages) to generate the sites and feeds; I chose Hugo because I understand how to use it. I’m sure you could make this work with other static site generators. There’s an 11ty plugin out there, for example, which is far more advanced than what I’ve set up. But I built this myself. It works. It does not require me to endlessly fiddle or update (unless I want to).

-
- -
- -
- -
- -

i'm falling down with shit caked on my shoes (week notes 25)

-
- week-notes/025 -
-

Doing

-

Joe and I visited some of his family with a lake house this week where my farmer’s tan became more and more pronounced. I also “worked” two days this week: I had committee meetings on Thursday and then a joint meeting to coordinate middle school/high school/college GSAs in my area. I also went to a concert (more about that in the music section) with a friend who moved away a year ago and who I missed a lot!

- -
  • diff --git a/public/index.xml b/public/index.xml index 6a9f887..ff4dbd1 100644 --- a/public/index.xml +++ b/public/index.xml @@ -6,21 +6,28 @@ Recent content on cassie.ink Hugo en-us - Mon, 11 Aug 2025 00:00:00 +0000 + Tue, 19 Aug 2025 00:00:00 +0000 - (week notes 28) + (week notes 029) + http://localhost:1313/week-notes/029/ + Tue, 19 Aug 2025 00:00:00 +0000 + http://localhost:1313/week-notes/029/ + <h2 id="doing">Doing</h2> <h2 id="reading">Reading</h2> <h2 id="watching">Watching</h2> <h2 id="playing">Playing</h2> <p>I&rsquo;m still playing <em>Fields of Mistria</em>, although I have had a few mid-day game crashes this week. The game is in early access, so I can&rsquo;t complain too much, but it&rsquo;s the first time it&rsquo;s happened to me. It&rsquo;s frustrating to lose progress, but I suppose I should get into the habit of saving a few times throughout the day.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p> <h2 id="listening">Listening</h2> <p>I listened to <a href="hutchharris.bandcamp.com/album/suck-up-all-the-oxygen"><em>SUCK UP ALL THE OXYGEN</em> by Hutch Harris</a> because I saw the cover on Bandcamp and thought it was funny. The album was fine but not for me. There was a time in my life when I probably would have been really into this, but it&rsquo;s not now.</p> <p>I picked up my <em>All We Know is Falling</em> listen from last week, too. 6. Never Let This Go - a nice build and pleasant to listen to, but it blends in with a lot of the rest of the album (yet fails to stand out). 7. Whoa - I always loved this one; great energy that lets me overlook the silly lyrics. 8. Conspiracy - forgettable 9. Franklin - I was so surprised by how fond of this song I still am. It&rsquo;s sweet; the backing vocals are a bit distracting — I&rsquo;d rather they were just Hayley, but I understand that they were going for a duet. 10. My Heart - I was listening to a decent rip of this album but this song still somehow sounds like a super compressed 96kbps MP3. The screaming in this song is also so atonal — it feels like a studio note given what was &ldquo;in&rdquo; at the time. 11. Oh Star - another forgettable one for me; I don&rsquo;t really like slow songs in general I think and especially not when Paramore does them.</p> <p>I went back to <em>fishmonger</em> by underscores. I really love this album (still). I love just about every song on it, but &ldquo;Del mar county fair (2008)&rdquo; is hitting for me in particular lately.</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p><em>Mistria</em> gives you this option; <em>Stardew</em> does not&hellip; but I&rsquo;ve never had a mid-day crash in <em>Stardew.</em>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> + + + Reduced to tongue eardrum thumb pencil and price (WN28) http://localhost:1313/week-notes/028/ - Mon, 11 Aug 2025 00:00:00 +0000 + Sun, 17 Aug 2025 00:00:00 +0000 http://localhost:1313/week-notes/028/ - <h2 id="doing">Doing</h2> <h2 id="reading">Reading</h2> <h2 id="watching">Watching</h2> <h2 id="playing">Playing</h2> <h2 id="listening">Listening</h2> <p>I finally got around to listening to <em>SOPHIE</em> by SOPHIE. Man, I have such mixed feelings about posthumous releases. The greedy bitch in me wants more, always, especially from artists who died way too young. I know SOPHIE&rsquo;s brother, who finished the album, insists that SOPHIE was nearly done with it at the time of her death, but the stretch between &ldquo;nearly finished&rdquo; and &ldquo;actually ready to release&rdquo; can be miles long for an artist. I&rsquo;m not an artist, by any means, of SOPHIE&rsquo;s caliber, but a piece of writing for me can completely transform in the edit. Posthumous albums too often feel like an early sketch<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, a pastiche of the auteur that are perhaps categorically incapable of capturing the genuine vision and artistry of the deceased. Unfortunately, this was the case for me with <em>SOPHIE</em>: &ldquo;Reason Why&rdquo; and &ldquo;Live in My Truth&rdquo; were standouts, but in general, it lacked the thrill and voice of SOPHIE (RIP).</p> <p>I downloaded <a href="https://muizyu.bandcamp.com/album/nothing-or-something-to-die-for"><em>nothing or something to die for</em> by mui zyu</a>. I had high hopes because I really like &ldquo;donna like parasites&rdquo; (I got a version of it in <a href="https://fatherdaughterrecords.com/products/its-2025-and-wow-thats-unfortunate-but-well-get-thru-this-with-a-free-sampler-so-here-ya-go">a free sample pack from the label</a>), but I found the album as a whole to be rather dull. &ldquo;donna&rdquo; was my only standout. zyu did put out <a href="https://muizyu.bandcamp.com/album/nothing-or-something-to-die-for-cantonese-tasting-menu">a collection with a few of the songs translated into Cantonese</a>, which features Emmy the Great (who I like) — a really cool idea but would be more novel if I was into the actual tracks.</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>I had <a href="https://cassie.ink/week-notes/021/">similar beef</a> with Mac Miller&rsquo;s <em>Circles</em>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> + <h2 id="doing">Doing</h2> <p>My desk upgrade journey hasn&rsquo;t gone as planned. The monitor mount I bought has a really small clamp, which I should have checked before buying it, but I was so excited about a good deal. It fits on the desk and looks great, but I&rsquo;m not able to spread the weight with the steel plates I bought, and I don&rsquo;t trust a particleboard desktop to stand the test of time with a clamp. I spent a long time trying to brainstorm solutions (modify the clamp? build a wooden desk top?), and I had a sleepless night stressed about it. Eventually I decided to just order a different mount and I&rsquo;ll try to sell this one locally to get my money back. It&rsquo;s a bummer because the arm is <em>really</em> nice, but I wanted the piece of mind of using something that isn&rsquo;t jerry-rigged. Normally I&rsquo;m down for a stupid solution, but not when it&rsquo;s holding up several hundreds of dollars of tech.</p> <p>Otherwise, I went to a PD on <em>The Writing Revolution,</em> which was more of an excuse for me to hang with some colleagues that I like, and I finally finished the syllabus for the college course I&rsquo;m teaching in a week or so. Joe and I then spent the weekend visiting some friends. It really feels like summer is winding down; I can see the start of the school year rush kicking up.</p> <h2 id="reading">Reading</h2> <p>I&rsquo;m still in the middle of <em>All Boys Aren&rsquo;t Blue,</em> but I focused on finishing my syllabus instead of finishing the book this week.</p> <h2 id="watching">Watching</h2> <p>Joe and I (re)watched <em>Sky High</em>. It was on Disney Channel constantly when we were kids. I am proud to say that the movie still rocks. When visiting friends, we also watched <em>Cars</em>, which I had somehow never seen. I liked it more than I expected to, though I thought some of the messaging was confused — don&rsquo;t give me a diatribe about the road going &ldquo;with&rdquo; the land and driving for enjoyment when cars are one of the greatest environmental blights in our society.</p> <h2 id="listening">Listening</h2> <p>I finally got around to listening to <em>SOPHIE</em> by SOPHIE. Man, I have such mixed feelings about posthumous releases. The greedy bitch in me wants more, always, especially from artists who died way too young. I know SOPHIE&rsquo;s brother, who finished the album, insists that SOPHIE was nearly done with it at the time of her death, but the stretch between &ldquo;nearly finished&rdquo; and &ldquo;actually ready to release&rdquo; can be miles long for an artist. I&rsquo;m not an artist, by any means, of SOPHIE&rsquo;s caliber, but a piece of writing for me can completely transform in the edit. Posthumous albums too often feel like an early sketch<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, a pastiche of the auteur that are perhaps categorically incapable of capturing the genuine vision and artistry of the deceased. Unfortunately, this was the case for me with <em>SOPHIE</em>: &ldquo;Reason Why&rdquo; and &ldquo;Live in My Truth&rdquo; were standouts, but in general, it lacked the thrill and voice of SOPHIE (RIP).</p> <p>I downloaded <a href="https://muizyu.bandcamp.com/album/nothing-or-something-to-die-for"><em>nothing or something to die for</em> by mui zyu</a>. I had high hopes because I really like &ldquo;donna like parasites&rdquo; (I got a version of it in <a href="https://fatherdaughterrecords.com/products/its-2025-and-wow-thats-unfortunate-but-well-get-thru-this-with-a-free-sampler-so-here-ya-go">a free sample pack from the label</a>), but I found the album as a whole to be rather dull. &ldquo;donna&rdquo; was my only standout. zyu did put out <a href="https://muizyu.bandcamp.com/album/nothing-or-something-to-die-for-cantonese-tasting-menu">a collection with a few of the songs translated into Cantonese</a>, which features Emmy the Great (who I like) — a really cool idea that would be more novel if I was into the original tracks.</p> <p>I shifted to Joanna Newsom&rsquo;s earliest release, <em>Walnut Whales</em>; it&rsquo;s a rough sketch of songs that would be realized later, but there&rsquo;s something really interesting about them — I think I love <a href="https://www.youtube.com/watch?v=LtRoOGYTGJc">&ldquo;Peach, Plumb, Pear&rdquo;</a> better than <a href="https://joannanewsom.bandcamp.com/album/the-milk-eyed-mender">the one that eventually appeared on <em>Milk-Eyed Mender</em></a> (which is, of course, iconic and still wonderful, but I love a synth). I really love <a href="https://www.youtube.com/watch?v=BOACtsrSsgo">&ldquo;Erin&rdquo;</a> too, which never saw a re-recording outside of <em>Walnut Whales</em>. I listened to a bunch of <em>Ys</em> this week as well; it remains one of my favorite albums.</p> <p>I&rsquo;m still super into <em>I Love My Computer</em> by Ninajirachi. Brendon Bigley <a href="https://wavelengths.online/posts/a-good-album-i-love-my-computer-by-ninajirachi">wrote a great review of it</a> on Wavelengths.</p> <p>I chatted with my sister about music a bit and we reminisced about Paramore — we were huge fans as teens as soon as <em>All We Know Is Falling&hellip;</em> dropped. For some nostalgia, I went to listen through to the album again and do a little song-by-song write up, but only got through a few tracks. Maybe I&rsquo;ll pick it up on my next week notes.</p> <ol> <li><strong>All We Know</strong> - Fine; a heavy track (by Paramore standards) that sets the tone for the album but is otherwise not super notable</li> <li><strong>Pressure</strong> - iconic and excellent still. If I was trying to expose someone to the early pop-punk/emo scene, this is one of the first tracks I&rsquo;d play them. Special shoutout to the version of the song that was on <em>The Sims</em>.</li> <li><strong>Emergency</strong> - I also still really like this song. Josh Farro is an ass but the guitar on this song smashes.</li> <li><strong>Brighter</strong> - I recall being a diehard for this song as a teen; today, I find it a little fatiguing to listen to. That might be in the mix, and I really like the outro still, but it&rsquo;s a notable downturn after the Pressure-Emergency one-two.</li> <li><strong>Here We Go Again</strong> - This one feels like a bit of a recall of the band&rsquo;s funk roots. I still really love this song. I remember being a fan of an acoustic live performance someone had put on YouTube. Farro really did have an ear for a catchy guitar hook.</li> </ol> <p>As part of trying to get back into listening to podcasts, too, I listened to Cyberpunk 2077 from <a href="https://rss.com/podcasts/bgm-gems-pod">BGM Gems</a> - a little challenging to listen to because I&rsquo;ve never played Cyberpunk nor listened to the soundtrack, but I really appreciate the conversations, and I think highlighting music in games and using it as a lens to discuss them is a rad concept for a show. Excited to hear more!</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>I had <a href="https://cassie.ink/week-notes/021/">similar beef</a> with Mac Miller&rsquo;s <em>Circles</em>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> Using Hugo to generate a podcast feed http://localhost:1313/hugo-podcast/ - Mon, 11 Aug 2025 00:00:00 +0000 + Tue, 12 Aug 2025 00:00:00 +0000 http://localhost:1313/hugo-podcast/ - <p>I&rsquo;ve been podcasting on and off for over ten years now — all shows that I&rsquo;ve since abandoned<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, either intentionally or due to time — but I&rsquo;ve kept websites for them up and running for archival purposes. Originally, the sites were powered by WordPress and podcasting plugins (PowerPress and then Podlove). I didn&rsquo;t want to continue paying to host the sites nor maintain a WordPress install<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, so here&rsquo;s how I migrated the sites to Hugo. I&rsquo;m not going to cover hosting your <em>media</em> files or creating a theme for your podcast website in this post, but maybe I&rsquo;ll do another write up in the future on those topics.</p> <p>I chose <a href="https://gohugo.io/">Hugo</a> because I understand how to use it. I&rsquo;m sure you could make this work with other static site generators; there&rsquo;s <a href="https://eleventy-plugin-podcaster.com/">an 11ty plugin</a> out there too which is far more advanced than what I&rsquo;ve set up. But I built this myself with minor knowledge of how to make a website. It&rsquo;s simple and it works and it probably will not need any fiddling with unless I intentionally decide to change some part of how it works. That said, if you have suggestions on how to improve or streamline this, shoot me an email! This is by no means a perfect, streamlined, optimized workflow.</p> <p>At its core, a podcast is just audio files served by an RSS feed. Hugo already has <a href="https://gohugo.io/templates/rss/#custom-templates">an embedded RSS template</a> that it uses to syndicate your content. It&rsquo;s a good base to start from; we&rsquo;re basically going to use that and inject in the <a href="https://help.apple.com/itc/podcasts_connect/#/itcb54353390">basic podcast tags</a> as well as some additional ones for newer features like chapter support.</p> <h2 id="creating-a-custom-feed-template">Creating a custom feed template</h2> <p>First, create a new file at <code>layouts/index.podcast.xml</code>. Then, add the following to your Hugo config file (I use <code>toml</code> format, which I believe is the Hugo default).</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-TOML" data-lang="TOML"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">[</span><span class="nx">outputs</span><span class="p">]</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nx">home</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;HTML&#34;</span><span class="p">,</span> <span class="s2">&#34;RSS&#34;</span><span class="p">,</span> <span class="s2">&#34;podcast&#34;</span> <span class="p">]</span> <span class="c"># Sets up podcast feed</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">[</span><span class="nx">outputFormats</span><span class="p">]</span> </span></span><span class="line"><span class="ln">5</span><span class="cl"> <span class="p">[</span><span class="nx">outputFormats</span><span class="p">.</span><span class="nx">podcast</span><span class="p">]</span> </span></span><span class="line"><span class="ln">6</span><span class="cl"> <span class="nx">MediaType</span> <span class="p">=</span> <span class="s2">&#34;application/rss+xml&#34;</span> </span></span><span class="line"><span class="ln">7</span><span class="cl"> <span class="nx">BaseName</span> <span class="p">=</span> <span class="s2">&#34;feed&#34;</span> <span class="c"># Your feed will be located at example.org/feed.xml.</span> </span></span></code></pre></div><p>This tells Hugo to use the new feed template that we&rsquo;re going to create. Now, let&rsquo;s work on that template.</p> <p>In <code>layouts/index.podcast.xml</code>, first copy and paste the default Hugo RSS feed template to use as a base.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 3</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 4</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.email</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 5</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 6</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 7</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 9</span><span class="cl"> </span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">12</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">13</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.name</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">14</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">15</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">16</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">17</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">18</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">20</span><span class="cl"> </span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="na">.IsHome</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.Site</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="k">slice</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="na">$.IsHome</span><span class="w"> </span><span class="na">$.IsSection</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.RegularPages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.Pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.Site.Config.Services.RSS.Limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ge</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="nx">1</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">first</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;?xml version=\&#34;1.0\&#34; encoding=\&#34;utf-8\&#34; standalone=\&#34;yes\&#34;?&gt;&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">35</span><span class="cl"> <span class="p">&lt;</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">36</span><span class="cl"> <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> on <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">37</span><span class="cl"> <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">38</span><span class="cl"> <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Recent content <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ne</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span>in <span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span>on <span class="cp">{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">39</span><span class="cl"> <span class="p">&lt;</span><span class="nt">generator</span><span class="p">&gt;</span>Hugo<span class="p">&lt;/</span><span class="nt">generator</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">40</span><span class="cl"> <span class="p">&lt;</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="nx">site</span><span class="na">.Language.LanguageCode</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">41</span><span class="cl"> <span class="p">&lt;</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="na">.</span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">42</span><span class="cl"> <span class="p">&lt;</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Site.Copyright</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">43</span><span class="cl"> <span class="p">&lt;</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="na">.Date.IsZero</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">44</span><span class="cl"> <span class="p">&lt;</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="o">(</span><span class="k">index</span><span class="w"> </span><span class="nx">$pages</span><span class="na">.ByLastmod.Reverse</span><span class="w"> </span><span class="nx">0</span><span class="o">)</span><span class="na">.Lastmod.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">45</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.OutputFormats.Get</span><span class="w"> </span><span class="s">&#34;RSS&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">46</span><span class="cl"> <span class="cp">{{</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;atom:link href=%q rel=\&#34;self\&#34; type=%q /&gt;&#34;</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="na">.MediaType</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">47</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">48</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">49</span><span class="cl"> <span class="p">&lt;</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">50</span><span class="cl"> <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">51</span><span class="cl"> <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">52</span><span class="cl"> <span class="p">&lt;</span><span class="nt">pubDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">pubDate</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">53</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">54</span><span class="cl"> <span class="p">&lt;</span><span class="nt">guid</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">guid</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">55</span><span class="cl"> <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">56</span><span class="cl"> <span class="p">&lt;/</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">57</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">58</span><span class="cl"> <span class="p">&lt;/</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">59</span><span class="cl"><span class="p">&lt;/</span><span class="nt">rss</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;re going to start by changing the <code>rss</code> tag to add podcasting namespaces. Find&hellip;</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span><span class="p">&gt;</span> </span></span></code></pre></div><p>and replace it with&hellip;</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">  <span class="na">xmlns:itunes</span><span class="o">=</span><span class="s">&#34;http://www.itunes.com/dtds/podcast-1.0.dtd&#34;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">  <span class="na">xmlns:podcast</span><span class="o">=</span><span class="s">&#34;https://podcastindex.org/namespace/1.0&#34;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl">  <span class="na">xmlns:content</span><span class="o">=</span><span class="s">&#34;http://purl.org/rss/1.0/modules/content/&#34;</span><span class="p">&gt;</span> </span></span></code></pre></div><p>This tells anything reading your feed (like a podcatcher app) that it is, indeed, a feed for podcasts.</p> <p>Next, let&rsquo;s take a look at the first few items in <code>&lt;channel&gt;</code> tag. Think of this as the show information. We&rsquo;ll get to the episodes later in the <code>&lt;item&gt;</code> tag. Here&rsquo;s what Hugo has by default at the start of the <code>&lt;channel&gt;</code> tag.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> on <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">    <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Recent content <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ne</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span>in <span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span>on <span class="cp">{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="p">&lt;</span><span class="nt">generator</span><span class="p">&gt;</span>Hugo<span class="p">&lt;/</span><span class="nt">generator</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl">    <span class="p">&lt;</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="nx">site</span><span class="na">.Language.LanguageCode</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">6</span><span class="cl">    <span class="p">&lt;</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="na">.</span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">7</span><span class="cl">    <span class="p">&lt;</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Site.Copyright</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">8</span><span class="cl">    <span class="p">&lt;</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="na">.Date.IsZero</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">9</span><span class="cl">    <span class="p">&lt;</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="o">(</span><span class="k">index</span><span class="w"> </span><span class="nx">$pages</span><span class="na">.ByLastmod.Reverse</span><span class="w"> </span><span class="nx">0</span><span class="o">)</span><span class="na">.Lastmod.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span></code></pre></div><p>We can leave <code>title</code>, <code>link</code>, <code>generator</code>, <code>language</code>, <code>copyright</code>, and <code>lastBuildDate</code> alone. We don&rsquo;t need <code>managingEditor</code> or <code>webMaster</code>, so you can remove those.</p> <p>Edit the <code>description</code> tag with your podcast&rsquo;s tagline.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;ll have to add a few podcasting-specific declarations, starting with the show information.</p> <p>First, we need to add <code>itunes:author</code>. This can be your name, your podcast network, or just the name of the show. Be aware that most podcatchers display this information prominently, so make your decision accordingly.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:author</span><span class="p">&gt;</span>John Podcast<span class="p">&lt;/</span><span class="nt">itunes:author</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Now, we need the <code>itunes:type</code> tag, which can have two possible values: <code>episodic</code> (appropriate for most podcasts — episodes don&rsquo;t need to be consumed in any particular order) or <code>serial</code> (episodes should be consumed sequentially).</p> <p>The <code>itunes:image</code> tag is where you&rsquo;ll specify your show&rsquo;s cover art. I also declare this through <code>image</code>, which will display your cover art on the raw RSS feed, too.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:image</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/cover.png&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">&lt;</span><span class="nt">image</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p">&lt;</span><span class="nt">url</span><span class="p">&gt;</span>https://yourwebsite.com/cover.png<span class="p">&lt;/</span><span class="nt">url</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">&lt;/</span><span class="nt">image</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Next, we need to specify the category for the show with the <code>itunes:category</code> tag. Apple <a href="https://podcasters.apple.com/support/1691-apple-podcasts-categories">has the full list of available categories and sub-categories here</a>. For the sake of this example, let&rsquo;s assume you&rsquo;re a podcast about video games; for any category with an ampersand (&amp;), make sure you escape the category, as Apple outlines.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Leisure&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">      <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Video Games&#34;</span><span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="p">&lt;/</span><span class="nt">itunes:category</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;ll also need to specify if the show is explicit using the <code>itunes:explicit</code> tag. The possible values are either <code>true</code> or <code>false</code>. If there&rsquo;s any cursing at all on your show, use <code>true</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span>true<span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span></code></pre></div><p>I&rsquo;m not actually sure if this part is required, but I have it and it doesn&rsquo;t hurt. This is a link to your feed.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">atom:link</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">      <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/feed.xml&#34;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">      <span class="na">rel</span><span class="o">=</span><span class="s">&#34;self&#34;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">      <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/rss+xml&#34;</span> <span class="p">/&gt;</span> </span></span></code></pre></div><p>If you changed the <code>BaseName</code> in <code>hugo.toml</code>, make sure it matches here.</p> <p>Okay — we&rsquo;re all set on the <code>channel</code> information. Now, let&rsquo;s work on the <code>item</code> tag. When Hugo generates your actual RSS feed, there will be an <code>item</code> tag for every episode you release. Of course, we&rsquo;ll need to customize it to have some podcast-specific data.</p> <p>Here&rsquo;s what Hugo has by default:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">      <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">      <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">      <span class="p">&lt;</span><span class="nt">pubDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">pubDate</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl">      <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">6</span><span class="cl">      <span class="p">&lt;</span><span class="nt">guid</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">guid</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">7</span><span class="cl">      <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">8</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">item</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;re off to a start, but, of course, there&rsquo;s a lot to add and edit. The <code>title</code>, <code>link</code>, <code>pubDate</code>, and <code>guid</code> tags can all remain as is.</p> <p>The <code>description</code> tag renders what will become your show notes. Right now, it&rsquo;s set to your post&rsquo;s summary, which, by default in Hugo, is the first paragraph or so of your post. We want that to be the full text of our post, so we&rsquo;re going to change <code>.Summary</code> to <code>.Content</code>, like so:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Content</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span></code></pre></div><p>OK — now let&rsquo;s dig into actually making these podcast episodes. We&rsquo;re going to be slotting in a lot of custom parameters, which we&rsquo;ll eventually flesh out when we get to our post template. For now, let&rsquo;s just focus on the feed.</p> <p>Let&rsquo;s start with the episode title. We&rsquo;ve already specified that in the <code>title</code> tag, but there&rsquo;s an Apple-specific one to declare again. We can reuse the same syntax.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:title</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Next up is <code>itunes:episodeType</code>, which can be either <code>full</code>, <code>bonus</code>, or <code>trailer</code>. Because this varies on an episode-to-episode basis, we&rsquo;ll need a custom parameter.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeType</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;ll also add a <code>content:encoded</code> tag. Similar to <code>itunes:title</code>, this is redundant with another tag (<code>description</code>), but we&rsquo;re aiming for compatibility here. Some podcatchers use <code>content:encoded instead</code>.</p> <p>Now for the <code>itunes:subtitle</code> tag. This is your episode&rsquo;s subtitle. We&rsquo;re going to use <code>.Summary</code> here; we&rsquo;ll get to customizing it when we set up our actual post templates.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:summary</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:summary</span><span class="p">&gt;</span> </span></span></code></pre></div><p>The next tag is probably the most important: <code>enclosure</code>, which is where you link your actual media file. We&rsquo;ll do this with two custom parameters: <code>episodeLength</code> (a bit of a misnomer — it&rsquo;s the actual file size) and <code>episodeURL</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">enclosure</span> <span class="na">length</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeLength</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;audio/mpeg&#34;</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeURL</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="p">/&gt;</span> </span></span></code></pre></div><p>Now, for the actual <em>duration</em> of the episode, we need <code>itunes:duration</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:duration</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeDuration</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:duration</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Podcast feeds can also have <em>some</em> episodes marked explicit and some non-explicit, so we have to declare that on an episode-to-episode basis.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeExplicit</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;ll also need to specify an episode and season number. If your show is episodic, we&rsquo;ll just always use season 1, and podcatchers shouldn&rsquo;t show any season number. But you can also leave out that tag if your show is episodic.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:episode</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeNumber</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episode</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:season</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeSeason</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:season</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;re also going to build in support for podcast chapters. We&rsquo;re going to wrap this in an <code>if</code> statement to check if the parameter returns <code>true</code>; if it does, we&rsquo;ll use a standard URL format. If it&rsquo;s <code>false</code>, this tag won&rsquo;t render. This keeps us safe in case you choose not to include chapters for some episodes.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeChapters</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p">&lt;</span><span class="nt">podcast:chapters</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">chapters.json&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/json+chapters&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span></code></pre></div><p>We&rsquo;ll do the same for transcripts.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeTranscript</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p">&lt;</span><span class="nt">podcast:transcript</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">transcript.vtt&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text/vtt&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span></code></pre></div><p>There are a lot of other <a href="https://podcasting2.org/docs/podcast-namespace/1.0">available podcast tags</a>, but this covers the major ones. If you&rsquo;re interested in using any of the others, just add them as we have been and build those custom parameters into your post templates. Otherwise, that&rsquo;s it for our feed!</p> <h3 id="the-finished-feed-template">The Finished Feed Template</h3> <p>We have created a custom podcast feed, which will render at <code>yourwebsite.com/feed.xml</code>. We&rsquo;ve filled it with the following contents:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.email</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 9</span><span class="cl"> </span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">13</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.name</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">14</span><span class="cl">      <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">16</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w">  </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">18</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">20</span><span class="cl"> </span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="na">.IsHome</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.Site</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="k">slice</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="na">$.IsHome</span><span class="w"> </span><span class="na">$.IsSection</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.RegularPages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.Pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.Site.Config.Services.RSS.Limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ge</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="nx">1</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">first</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;?xml version=\&#34;1.0\&#34; encoding=\&#34;utf-8\&#34; standalone=\&#34;yes\&#34;?&gt;&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> </span></span><span class="line"><span class="ln">35</span><span class="cl">  <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span> </span></span><span class="line"><span class="ln">36</span><span class="cl">  <span class="na">xmlns:itunes</span><span class="o">=</span><span class="s">&#34;http://www.itunes.com/dtds/podcast-1.0.dtd&#34;</span> </span></span><span class="line"><span class="ln">37</span><span class="cl">  <span class="na">xmlns:podcast</span><span class="o">=</span><span class="s">&#34;https://podcastindex.org/namespace/1.0&#34;</span> </span></span><span class="line"><span class="ln">38</span><span class="cl">  <span class="na">xmlns:content</span><span class="o">=</span><span class="s">&#34;http://purl.org/rss/1.0/modules/content/&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">39</span><span class="cl">  <span class="p">&lt;</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">40</span><span class="cl">    <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> on <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">41</span><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">42</span><span class="cl">    <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Just another podcast feed.<span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">43</span><span class="cl">    <span class="p">&lt;</span><span class="nt">generator</span><span class="p">&gt;</span>Hugo<span class="p">&lt;/</span><span class="nt">generator</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">44</span><span class="cl">    <span class="p">&lt;</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="nx">site</span><span class="na">.Language.LanguageCode</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">45</span><span class="cl">    <span class="p">&lt;</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="na">.Date.IsZero</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">46</span><span class="cl"> </span></span><span class="line"><span class="ln">47</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:author</span><span class="p">&gt;</span>John Podcast<span class="p">&lt;/</span><span class="nt">itunes:author</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">48</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:type</span><span class="p">&gt;</span>episodic<span class="p">&lt;/</span><span class="nt">itunes:type</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">49</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:image</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/cover.png&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">50</span><span class="cl">    <span class="p">&lt;</span><span class="nt">image</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">51</span><span class="cl">      <span class="p">&lt;</span><span class="nt">url</span><span class="p">&gt;</span>https://yourwebsite.com/cover.png<span class="p">&lt;/</span><span class="nt">url</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">52</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">image</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">53</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Leisure&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">54</span><span class="cl">      <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Video Games&#34;</span><span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">55</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">itunes:category</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">56</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span>true<span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">57</span><span class="cl">    <span class="p">&lt;</span><span class="nt">atom:link</span> </span></span><span class="line"><span class="ln">58</span><span class="cl">      <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/feed.xml&#34;</span> </span></span><span class="line"><span class="ln">59</span><span class="cl">      <span class="na">rel</span><span class="o">=</span><span class="s">&#34;self&#34;</span> </span></span><span class="line"><span class="ln">60</span><span class="cl">      <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/rss+xml&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">61</span><span class="cl"> </span></span><span class="line"><span class="ln">62</span><span class="cl">    <span class="p">&lt;</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="o">(</span><span class="k">index</span><span class="w"> </span><span class="nx">$pages</span><span class="na">.ByLastmod.Reverse</span><span class="w"> </span><span class="nx">0</span><span class="o">)</span><span class="na">.Lastmod.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">63</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.OutputFormats.Get</span><span class="w"> </span><span class="s">&#34;RSS&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">64</span><span class="cl">    <span class="cp">{{</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;atom:link href=%q rel=\&#34;self\&#34; type=%q /&gt;&#34;</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="na">.MediaType</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">65</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">66</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">67</span><span class="cl">    <span class="p">&lt;</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">68</span><span class="cl">        <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">69</span><span class="cl">        <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">70</span><span class="cl">        <span class="p">&lt;</span><span class="nt">pubDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">pubDate</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">71</span><span class="cl">        <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">72</span><span class="cl">        <span class="p">&lt;</span><span class="nt">guid</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">guid</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">73</span><span class="cl">        <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Content</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">74</span><span class="cl"> </span></span><span class="line"><span class="ln">75</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">76</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeType</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">77</span><span class="cl">        <span class="p">&lt;</span><span class="nt">content:encoded</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Content</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">content:encoded</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">78</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:subtitle</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:subtitle</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">79</span><span class="cl">        <span class="p">&lt;</span><span class="nt">enclosure</span> <span class="na">length</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeLength</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;audio/mpeg&#34;</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeURL</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">80</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:duration</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeDuration</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:duration</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">81</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeExplicit</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">82</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:episode</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeNumber</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episode</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">83</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:season</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeSeason</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:season</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">84</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeChapters</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">85</span><span class="cl">            <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">86</span><span class="cl">                <span class="p">&lt;</span><span class="nt">podcast:chapters</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">chapters.json&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/json+chapters&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">87</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">88</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeTranscript</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">89</span><span class="cl">            <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">90</span><span class="cl">                <span class="p">&lt;</span><span class="nt">podcast:transcript</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">transcript.vtt&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text/vtt&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">91</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">92</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">93</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">94</span><span class="cl">  <span class="p">&lt;/</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">95</span><span class="cl"><span class="p">&lt;/</span><span class="nt">rss</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Now, we&rsquo;ll need to work on creating episodes.</p> <h2 id="episode-template">Episode Template</h2> <p>Inside Hugo&rsquo;s <code>content</code> folder, we&rsquo;re going to create another folder titled <code>episodes</code>. Each episode will go in a folder, like so:</p> <pre tabindex="0"><code>content/ episodes/ YYYY-MM-DD Title/ chapters.json index.md transcript.vtt </code></pre><p>You can omit the <code>chapters.json</code> and <code>transcript.vtt</code> files if that episode doesn&rsquo;t have them, of course. The <code>index.md</code> file contains the actual content of our episode. We&rsquo;ll need to include the custom parameters that we created in our feed, which are:</p> <ul> <li>episodeType</li> <li>episodeLength</li> <li>episodeURL</li> <li>episodeDuration</li> <li>episodeExplicit</li> <li>episodeNumber</li> <li>episodeSeason</li> <li>episodeChapters</li> <li>episodeTranscript</li> </ul> <p>Let&rsquo;s open up <code>index.md</code> and get to work.</p> <p>Let&rsquo;s start with the standard frontmatter that Hugo requires:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;My First Post&#34;</span><span class="w"> </span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-14T07:07:07</span><span class="m">+01</span><span class="p">:</span><span class="m">00</span><span class="w"> </span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="w"></span><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="w"></span><span class="l">Type your shownotes in markdown format here!</span><span class="w"> </span></span></span></code></pre></div><p>First, let&rsquo;s address the <code>itunes:subtitle</code> tag, which is currently set to pull Hugo&rsquo;s post summary. By default, Hugo will just use the first paragraph of your post. If that works for you, you don&rsquo;t have to do this next step, but if you want want to specify a custom subtitle for your episode, you can add in the <code>summary</code> tag.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;My First Post&#34;</span><span class="w"> </span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-14T07:07:07</span><span class="m">+01</span><span class="p">:</span><span class="m">00</span><span class="w"> </span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="w"></span><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="w"></span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;This is my episode subtitle!&#39;</span><span class="w"> </span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="w"></span><span class="l">Type your shownotes in markdown format here!</span><span class="w"> </span></span></span></code></pre></div><p>OK — now onto the parameters that we created for our podcast feed.</p> <table> <thead> <tr> <th>Parameter</th> <th>Type</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>episodeType</td> <td>String</td> <td><code>full</code>, <code>bonus</code>, or <code>trailer</code></td> </tr> <tr> <td>episodeLength</td> <td>Number</td> <td>The length (in bytes) of your media file. There are a lot of ways to find this information, but on Windows, right-click on the file and select Properties. You&rsquo;ll see it after <code>Size:</code> in parentheses.</td> </tr> <tr> <td>episodeURL</td> <td>String</td> <td>A direct link to your media file (probably an MP3)</td> </tr> <tr> <td>episodeDuration</td> <td>String</td> <td>The duration of your episode in hh:mm:ss format</td> </tr> <tr> <td>episodeExplicit</td> <td>Boolean</td> <td><code>true</code> or <code>false</code></td> </tr> <tr> <td>episodeNumber</td> <td>Number</td> <td>Increment with every episode</td> </tr> <tr> <td>episodeSeason</td> <td>Number</td> <td>If you&rsquo;re not using seasons, just set this as <code>1</code> every time</td> </tr> <tr> <td>episodeChapters</td> <td>Boolean</td> <td><code>true</code> (the episode has chapters) or <code>false</code> (the episode does not have chapters). If set to <code>true</code>, make sure you place the <code>json</code> file in the episode folder.</td> </tr> <tr> <td>episodeTranscript</td> <td>Boolean</td> <td><code>true</code> (the episode has a transcript) or <code>false</code> (the episode does not have a transcript). If set to <code>true</code>, make sure you place the <code>vtt</code> file in the episode folder.</td> </tr> </tbody> </table> <p>An example might be&hellip;</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;My First Post&#34;</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-14T07:07:07</span><span class="m">+01</span><span class="p">:</span><span class="m">00</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w"></span><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="w"></span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;This is my episode subtitle!&#39;</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="w"></span><span class="nt">episodeType</span><span class="p">:</span><span class="w"> </span><span class="l">full</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w"></span><span class="nt">episodeLength</span><span class="p">:</span><span class="w"> </span><span class="m">20451328</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="w"></span><span class="nt">episodeURL</span><span class="p">:</span><span class="w"> </span><span class="l">https://yourwebsite.com/episodes/episode1.mp3</span><span class="w"> </span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="w"></span><span class="nt">episodeDuration</span><span class="p">:</span><span class="w"> </span><span class="m">00</span><span class="p">:</span><span class="m">27</span><span class="p">:</span><span class="m">59</span><span class="w"> </span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="w"></span><span class="nt">episodeExplicit</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="w"></span><span class="nt">episodeNumber</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="w"></span><span class="nt">episodeSeason</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="w"></span><span class="nt">episodeChapters</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="w"></span><span class="nt">episodeTranscript</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="w"></span><span class="l">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur auctor aliquet urna id gravida. In sollicitudin posuere risus a malesuada. Cras pretium, neque eget molestie laoreet, urna neque consequat turpis, sed vestibulum sem mi eget velit. Integer in orci sit amet sapien pharetra malesuada a id justo. Ut pellentesque, magna at finibus tincidunt, elit ante venenatis nibh, in fermentum ipsum elit et ligula. Phasellus lorem elit, volutpat volutpat auctor et, laoreet molestie sapien. Sed hendrerit pellentesque nulla a rutrum. Nunc lobortis mattis vestibulum. Pellentesque vel orci viverra est sagittis pulvinar.</span><span class="w"> </span></span></span></code></pre></div><p>And that&rsquo;s it! You can see this at work on <a href="https://pitchandplay.org/">Pitch &amp; Play</a>. The <a href="https://git.32bit.cafe/cassie/pitchandplay">repo for the site is public</a>, but do note that I&rsquo;ve made a few customizations to the feed template for my show specifically; otherwise, it&rsquo;s essentially what I&rsquo;ve outlined here. Want to check your feed? I like the <a href="https://podba.se/validate/">Podbase Validator</a>; you can <a href="https://podba.se/validate/?url=https://pitchandplay.org/feed.xml">run Pitch &amp; Play&rsquo;s feed directly by clicking here</a>.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p> <p>If this post helped you — or if something isn&rsquo;t working — feel free to <a href="http://cassie.ink/about/">get in touch with me</a>.</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>I think about bringing Pitch &amp; Play back sometimes because I truly do miss podcasting and I like talking about games. I walked away from the Harry Potter one for obvious reasons, and the one before that I won&rsquo;t mention because episodes of it still exist online (outside of my control) and I&rsquo;d rather not attach myself to them.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> <li id="fn:2"> <p>WordPress is a bloated monster that constantly has security patches and the founder is super problematic.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> <li id="fn:3"> <p>I&rsquo;m failing the Byte-range support right now, but that&rsquo;s related to where my media is hosted, not the RSS feed — and in my testing, I&rsquo;m not sure that&rsquo;s actually a problem.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> + <p>I&rsquo;ve been podcasting on and off for over ten years now — all shows that I&rsquo;ve since abandoned<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, either intentionally or due to time — but I&rsquo;ve kept websites for them up and running for archival purposes. Originally, the sites were powered by WordPress and podcasting plugins (PowerPress and then Podlove). I didn&rsquo;t want to continue paying to host the sites nor maintain a WordPress install<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. I could, of course, use one of the many podcast hosting services out there — but just like I believe in owning your own space on the internet, I believe you should own and control your podcast feed (and not have to pay a company $15/mo in perpetuity). I use <a href="https://gohugo.io/">Hugo</a> (which I then deploy with Cloudflare Pages) to generate the sites and feeds; I chose Hugo because I understand how to use it. I&rsquo;m sure you could make this work with other static site generators. There&rsquo;s <a href="https://eleventy-plugin-podcaster.com/">an 11ty plugin</a> out there, for example, which is far more advanced than what I&rsquo;ve set up. But I built this myself. It works. It does not require me to endlessly fiddle or update (unless I want to).</p> <p>I am not going to cover hosting your audio files in this post. I offload mine to a storage zone on <a href="https://bunny.net/">Bunny</a>; my podcasts are low traffic, so that costs me $12/yr. You could probably get away with using archive.org for free instead, as long as you can get a direct link to your mp3. I&rsquo;m also not going to cover creating a theme for your podcast in this post. I made my own for both of my sites, but you can easily use a premade one.</p> <p>A podcast is, at its core, a collection of audio files served by an RSS feed. That feed provides information to podcast apps, like where to download an episode and how long it is. An SSG like Hugo, which is designed primarily for bloggers, works great for this because it already has an <a href="https://gohugo.io/templates/rss/#custom-templates">an embedded RSS template</a> that it uses to syndicate your content. The only difference is that we&rsquo;re going to set up the RSS feed to serve both text (your show notes) <em>and</em> audio — as well as all the information that podcast apps need to surface your show. We&rsquo;re going to work from Hugo&rsquo;s RSS base template but inject <a href="https://help.apple.com/itc/podcasts_connect/#/itcb54353390">basic podcast tags</a> as well as some additional ones for newer features like chapter support.</p> <h2 id="creating-a-custom-feed-template">Creating a custom feed template</h2> <p>First, find your Hugo config file. I use <code>toml</code> format, so mine is hugo.toml at the root of my site directory. I believe Hugo uses <code>toml</code> by default, but if you use <code>yaml</code>, you&rsquo;ll have to adapt the syntax (but if you use <code>yaml</code>, you probably know how to do that).</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-TOML" data-lang="TOML"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">[</span><span class="nx">outputs</span><span class="p">]</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nx">home</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;HTML&#34;</span><span class="p">,</span> <span class="s2">&#34;RSS&#34;</span><span class="p">,</span> <span class="s2">&#34;podcast&#34;</span> <span class="p">]</span> <span class="c"># Sets up podcast feed</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">[</span><span class="nx">outputFormats</span><span class="p">]</span> </span></span><span class="line"><span class="ln">5</span><span class="cl"> <span class="p">[</span><span class="nx">outputFormats</span><span class="p">.</span><span class="nx">podcast</span><span class="p">]</span> </span></span><span class="line"><span class="ln">6</span><span class="cl"> <span class="nx">MediaType</span> <span class="p">=</span> <span class="s2">&#34;application/rss+xml&#34;</span> </span></span><span class="line"><span class="ln">7</span><span class="cl"> <span class="nx">BaseName</span> <span class="p">=</span> <span class="s2">&#34;feed&#34;</span> <span class="c"># Your feed will be located at example.org/feed.xml.</span> </span></span></code></pre></div><p>This tells that we&rsquo;re making a new RSS feed template and that it should use it to serve our content. Now, create a new file at <code>layouts/index.podcast.xml</code>.</p> <p>In <code>layouts/index.podcast.xml</code>, first copy and paste the default Hugo RSS feed template to use as a base.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 3</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 4</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.email</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 5</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 6</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 7</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 9</span><span class="cl"> </span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">12</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">13</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.name</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">14</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">15</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">16</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">17</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">18</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">20</span><span class="cl"> </span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="na">.IsHome</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.Site</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="k">slice</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="na">$.IsHome</span><span class="w"> </span><span class="na">$.IsSection</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.RegularPages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.Pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.Site.Config.Services.RSS.Limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ge</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="nx">1</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">first</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;?xml version=\&#34;1.0\&#34; encoding=\&#34;utf-8\&#34; standalone=\&#34;yes\&#34;?&gt;&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">35</span><span class="cl"> <span class="p">&lt;</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">36</span><span class="cl"> <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> on <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">37</span><span class="cl"> <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">38</span><span class="cl"> <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Recent content <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ne</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span>in <span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span>on <span class="cp">{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">39</span><span class="cl"> <span class="p">&lt;</span><span class="nt">generator</span><span class="p">&gt;</span>Hugo<span class="p">&lt;/</span><span class="nt">generator</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">40</span><span class="cl"> <span class="p">&lt;</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="nx">site</span><span class="na">.Language.LanguageCode</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">41</span><span class="cl"> <span class="p">&lt;</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="na">.</span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">42</span><span class="cl"> <span class="p">&lt;</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Site.Copyright</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">43</span><span class="cl"> <span class="p">&lt;</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="na">.Date.IsZero</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">44</span><span class="cl"> <span class="p">&lt;</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="o">(</span><span class="k">index</span><span class="w"> </span><span class="nx">$pages</span><span class="na">.ByLastmod.Reverse</span><span class="w"> </span><span class="nx">0</span><span class="o">)</span><span class="na">.Lastmod.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">45</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.OutputFormats.Get</span><span class="w"> </span><span class="s">&#34;RSS&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">46</span><span class="cl"> <span class="cp">{{</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;atom:link href=%q rel=\&#34;self\&#34; type=%q /&gt;&#34;</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="na">.MediaType</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">47</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">48</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">49</span><span class="cl"> <span class="p">&lt;</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">50</span><span class="cl"> <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">51</span><span class="cl"> <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">52</span><span class="cl"> <span class="p">&lt;</span><span class="nt">pubDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">pubDate</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">53</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">54</span><span class="cl"> <span class="p">&lt;</span><span class="nt">guid</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">guid</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">55</span><span class="cl"> <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">56</span><span class="cl"> <span class="p">&lt;/</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">57</span><span class="cl"> <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">58</span><span class="cl"> <span class="p">&lt;/</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">59</span><span class="cl"><span class="p">&lt;/</span><span class="nt">rss</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;re going to start by changing the <code>rss</code> tag to add podcasting namespaces. Find the <code>rss</code> tag at line 34.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span><span class="p">&gt;</span> </span></span></code></pre></div><p>and replace it with&hellip;</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">  <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">  <span class="na">xmlns:itunes</span><span class="o">=</span><span class="s">&#34;http://www.itunes.com/dtds/podcast-1.0.dtd&#34;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">  <span class="na">xmlns:podcast</span><span class="o">=</span><span class="s">&#34;https://podcastindex.org/namespace/1.0&#34;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl">  <span class="na">xmlns:content</span><span class="o">=</span><span class="s">&#34;http://purl.org/rss/1.0/modules/content/&#34;</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We need to do this because otherwise, a feed reader (like a browser or a podcast app) won&rsquo;t be able to recognize the podcast-specific tags we&rsquo;re using. Most of them are <code>itunes</code> tags because Apple controlled the game early on in podcasts; they never updated the syntax when they rebranded to Apple Podcasts (which is a good thing — if they had, everyone would have had to update their feeds). We&rsquo;re also adding supporting for <a href="https://podcasting2.org/docs/podcast-namespace">Podcast Index&rsquo;s newer tags</a> — you can think of them like a modern, open competitor to Apple. They added a bunch of modern features to podcast feeds (like standardized chapter support and transcripts). Their tags are supported by most modern podcast apps, including Apple Podcasts.</p> <h2 id="the-channel-tag">The channel tag</h2> <p>Next, let&rsquo;s take a look at the first few items in <code>&lt;channel&gt;</code> tag. Think of this as the basic show information; we&rsquo;ll get to the episodes later in the <code>&lt;item&gt;</code> tag. Here&rsquo;s what Hugo has by default at the start of the <code>&lt;channel&gt;</code> tag.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> on <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">    <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Recent content <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ne</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span>in <span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span>on <span class="cp">{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="p">&lt;</span><span class="nt">generator</span><span class="p">&gt;</span>Hugo<span class="p">&lt;/</span><span class="nt">generator</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl">    <span class="p">&lt;</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="nx">site</span><span class="na">.Language.LanguageCode</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">6</span><span class="cl">    <span class="p">&lt;</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="na">.</span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">managingEditor</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">7</span><span class="cl">    <span class="p">&lt;</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">webMaster</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Site.Copyright</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">8</span><span class="cl">    <span class="p">&lt;</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="na">.Date.IsZero</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">9</span><span class="cl">    <span class="p">&lt;</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="o">(</span><span class="k">index</span><span class="w"> </span><span class="nx">$pages</span><span class="na">.ByLastmod.Reverse</span><span class="w"> </span><span class="nx">0</span><span class="o">)</span><span class="na">.Lastmod.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span></code></pre></div><p>We can leave <code>title</code>, <code>link</code>, <code>generator</code>, <code>language</code>, <code>copyright</code>, and <code>lastBuildDate</code> alone. We don&rsquo;t need <code>managingEditor</code> or <code>webMaster</code>, so you can remove those.</p> <p>Edit the <code>description</code> tag with your podcast&rsquo;s tagline.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Just another podcast feed.<span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Now, we&rsquo;ll have to add a few podcasting-specific declarations, starting with the show information.</p> <p>First, we need to add <code>itunes:author</code>. This can be your name, your podcast network, or just the name of the show. Be aware that most podcatchers display this information prominently, so make your decision accordingly: if you don&rsquo;t want your full first and last name out there, don&rsquo;t put it here.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:author</span><span class="p">&gt;</span>John Podcast<span class="p">&lt;/</span><span class="nt">itunes:author</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Now, we need the <code>itunes:type</code> tag, which can have two possible values: <code>episodic</code> (appropriate for most podcasts — episodes don&rsquo;t need to be consumed in any particular order) or <code>serial</code> (episodes should be consumed sequentially).</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:type</span><span class="p">&gt;</span>episodic<span class="p">&lt;/</span><span class="nt">itunes:type</span><span class="p">&gt;</span> </span></span></code></pre></div><p>The <code>itunes:image</code> tag is where you&rsquo;ll specify your show&rsquo;s cover art. I also declare this through <code>image</code>, which will display your cover art on the raw RSS feed displayed in a browser, too.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:image</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/cover.png&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">&lt;</span><span class="nt">image</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p">&lt;</span><span class="nt">url</span><span class="p">&gt;</span>https://yourwebsite.com/cover.png<span class="p">&lt;/</span><span class="nt">url</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">&lt;/</span><span class="nt">image</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Next, we need to specify the category for the show with the <code>itunes:category</code> tag. Apple <a href="https://podcasters.apple.com/support/1691-apple-podcasts-categories">has the full list of available categories and sub-categories here</a>. For the sake of this example, let&rsquo;s assume you&rsquo;re a podcast about video games.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Leisure&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">      <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Video Games&#34;</span><span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="p">&lt;/</span><span class="nt">itunes:category</span><span class="p">&gt;</span> </span></span></code></pre></div><p>If your show is in a category with an ampersand (&amp;), make sure you escape the character, as in the example below. This example also shows how to specify multiple categories if appropriate for your show; you can have up to three.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Society &amp;amp; Culture&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Documentary&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="p">&lt;/</span><span class="nt">itunes:category</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Health &amp;amp; Fitness&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl"> <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Mental Health&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p">&lt;/</span><span class="nt">itunes:category</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Ampersands break RSS feeds, so why Apple decided to create categories with ampersands, I will never know.</p> <p>We&rsquo;ll also need to specify if the show is explicit using the <code>itunes:explicit</code> tag. The possible values are either <code>true</code> or <code>false</code>. I am told that Apple can be quite strict about this, so if there&rsquo;s any cursing or adult content on your show, use <code>true</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span>true<span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span></code></pre></div><p>I&rsquo;m not actually sure if this part is required, but I have it and it doesn&rsquo;t hurt. This is a link to your feed. Obviously, change <code>yourwebsite.com</code> to your actual domain.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">atom:link</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">      <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/feed.xml&#34;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">      <span class="na">rel</span><span class="o">=</span><span class="s">&#34;self&#34;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">      <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/rss+xml&#34;</span> <span class="p">/&gt;</span> </span></span></code></pre></div><p>If you changed the <code>BaseName</code> in <code>hugo.toml</code>, make sure it matches here.</p> <h2 id="the-item-tag">The item tag</h2> <p>Okay — we&rsquo;re all set on the <code>channel</code> information. Now, let&rsquo;s work on the <code>item</code> tag. When Hugo generates your actual RSS feed, there will be an <code>item</code> tag for every episode you release. Of course, we&rsquo;ll need to customize it to have some podcast-specific data, just like we did in the <code>channel</code> tag; this time around, though, it&rsquo;s a little more complicated. The content in the <code>channel</code> tag is relatively constant — you&rsquo;re probably not changing the name of your show all that often. But the information we have to provide about our <em>episodes</em> will, naturally, change on an episode-by-episode basis. This means we&rsquo;re going to have to create some custom parameters that we will then specify in the episode content files.</p> <p>Here&rsquo;s what Hugo has by default:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl">      <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">3</span><span class="cl">      <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl">      <span class="p">&lt;</span><span class="nt">pubDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">pubDate</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">5</span><span class="cl">      <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">6</span><span class="cl">      <span class="p">&lt;</span><span class="nt">guid</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">guid</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">7</span><span class="cl">      <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">8</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">item</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;re off to a start, but, of course, there&rsquo;s a lot to add and edit. The <code>title</code>, <code>link</code>, <code>pubDate</code>, and <code>guid</code> tags can all remain as is.</p> <p>The <code>description</code> tag renders what will become your show notes. Right now, it&rsquo;s set to your post&rsquo;s summary, which, by default in Hugo, is the first paragraph or so of your post. We want that to be the full text of our post, so we&rsquo;re going to change <code>.Summary</code> to <code>.Content</code>, like so:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Content</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span></code></pre></div><p>OK — now let&rsquo;s dig into actually making these podcast episodes. We&rsquo;re going to be slotting in a lot of custom parameters, which we&rsquo;ll eventually flesh out when we get to our post template. Let&rsquo;s start with the episode title. We&rsquo;ve already specified that in the <code>title</code> tag, but there&rsquo;s an Apple-specific one to declare again. We can reuse the same syntax from before, though.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:title</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Next up is <code>itunes:episodeType</code>, which can be either <code>full</code>, <code>bonus</code>, or <code>trailer</code>. Because this varies on an episode-to-episode basis, we&rsquo;ll need a custom parameter.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeType</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;ll also add a <code>content:encoded</code> tag. Similar to <code>itunes:title</code>, this is redundant with another tag (<code>description</code>), but we&rsquo;re aiming for compatibility here. Some older podcast apps still use <code>content:encoded</code>, so we want to support it.</p> <p>Now for the <code>itunes:summary</code> tag. This is your episode&rsquo;s tagline, a preview of its contents. Not all podcast apps surface this, but some do. We&rsquo;re going to use <code>.Summary</code> here; we&rsquo;ll get to customizing it when we set up our actual post templates.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:summary</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:summary</span><span class="p">&gt;</span> </span></span></code></pre></div><p>The next tag is probably the most important: <code>enclosure</code>, which is where you link your actual media file. We&rsquo;ll do this with two custom parameters: <code>episodeLength</code> (a bit of a misnomer — it&rsquo;s the file size in bytes) and <code>episodeURL</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">enclosure</span> <span class="na">length</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeLength</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;audio/mpeg&#34;</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeURL</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="p">/&gt;</span> </span></span></code></pre></div><p>Now, for the actual <em>duration</em> of the episode, we need <code>itunes:duration</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:duration</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeDuration</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:duration</span><span class="p">&gt;</span> </span></span></code></pre></div><p>I&rsquo;m choosing to remain consistent with the code&rsquo;s syntax; I wish it was <code>enclosure size</code> because duration and length are too interchangeable, but it&rsquo;s not, so we will have to solider on.</p> <p>Podcast feeds can also have some episodes marked explicit and some non-explicit, so we have to declare that on an episode-to-episode basis. Imagine, for example, that your show as a <em>whole</em> isn&rsquo;t generally explicit, but on a particular episode, you discuss a Chuck Tingle book — you can mark just that episode as explicit.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeExplicit</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span></code></pre></div><p>We&rsquo;ll also need to specify an episode and season number. If your show is episodic, we&rsquo;ll just always use season 1, and podcatchers shouldn&rsquo;t show any season number. But you can also leave out that tag if your show is episodic and you never plan on using seasons. Some episodic shows still use seasons, though, like shows that go on extended breaks. I don&rsquo;t use seasons right now, but I&rsquo;d like to have the opportunity in the future, so I&rsquo;ll include it.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:episode</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeNumber</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episode</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">&lt;</span><span class="nt">itunes:season</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeSeason</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:season</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Now, we&rsquo;re going to build in support for podcast chapters, which are perhaps the greatest innovation in the podcasting space in the last ten years. We&rsquo;re going to wrap this in an <code>if</code> statement to check if the parameter returns <code>true</code>, meaning, your episode has chapters; if it does, we&rsquo;ll use a standard URL format. If it&rsquo;s <code>false</code>, this tag won&rsquo;t render. If we didn&rsquo;t do this, there would be a broken link in the feed.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeChapters</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p">&lt;</span><span class="nt">podcast:chapters</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">chapters.json&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/json+chapters&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span></code></pre></div><p>If you need help generating chapters for your podcast, by the way, <a href="https://mp3chapters.github.io/">there&rsquo;s a great web-based tool here</a>.</p> <p>We&rsquo;ll do the same if/else statement for transcripts (for the same reason). I like <code>vtt</code> format, but there are others out there; just specify whichever one you prefer.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln">1</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeTranscript</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p">&lt;</span><span class="nt">podcast:transcript</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">transcript.vtt&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text/vtt&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span></code></pre></div><p>And that&rsquo;s it! There are a lot of other <a href="https://podcasting2.org/docs/podcast-namespace/1.0">available podcast tags</a> and a lot of tags that have been deprecated over the years; this covers the major required ones and the ones that most people will want. If you&rsquo;re interested in using any other tags, just add them as we have been and build those custom parameters into your post template.</p> <h2 id="finished-feed-template">Finished Feed Template</h2> <p>We have created a custom podcast feed, which will render at <code>yourwebsite.com/feed.xml</code>. We&rsquo;ve filled it with the following contents:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go-html-template" data-lang="go-html-template"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.email</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln"> 9</span><span class="cl"> </span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">site</span><span class="na">.Params.author</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">reflect</span><span class="na">.IsMap</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">13</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.name</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">14</span><span class="cl">      <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">16</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="nx">$authorName</span><span class="w">  </span><span class="o">=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">18</span><span class="cl">  <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">20</span><span class="cl"> </span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="na">.IsHome</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="nx">$pctx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="na">.Site</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="k">slice</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="na">$.IsHome</span><span class="w"> </span><span class="na">$.IsSection</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.RegularPages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pctx</span><span class="na">.Pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="na">.Site.Config.Services.RSS.Limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">ge</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="nx">1</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">first</span><span class="w"> </span><span class="nx">$limit</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="cp">{{-</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;?xml version=\&#34;1.0\&#34; encoding=\&#34;utf-8\&#34; standalone=\&#34;yes\&#34;?&gt;&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="p">&lt;</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">&#34;2.0&#34;</span> </span></span><span class="line"><span class="ln">35</span><span class="cl">  <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">&#34;http://www.w3.org/2005/Atom&#34;</span> </span></span><span class="line"><span class="ln">36</span><span class="cl">  <span class="na">xmlns:itunes</span><span class="o">=</span><span class="s">&#34;http://www.itunes.com/dtds/podcast-1.0.dtd&#34;</span> </span></span><span class="line"><span class="ln">37</span><span class="cl">  <span class="na">xmlns:podcast</span><span class="o">=</span><span class="s">&#34;https://podcastindex.org/namespace/1.0&#34;</span> </span></span><span class="line"><span class="ln">38</span><span class="cl">  <span class="na">xmlns:content</span><span class="o">=</span><span class="s">&#34;http://purl.org/rss/1.0/modules/content/&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">39</span><span class="cl">  <span class="p">&lt;</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">40</span><span class="cl">    <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span> on <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="na">.Site.Title</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">41</span><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">42</span><span class="cl">    <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>Just another podcast feed.<span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">43</span><span class="cl">    <span class="p">&lt;</span><span class="nt">generator</span><span class="p">&gt;</span>Hugo<span class="p">&lt;/</span><span class="nt">generator</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">44</span><span class="cl">    <span class="p">&lt;</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="nx">site</span><span class="na">.Language.LanguageCode</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">language</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">45</span><span class="cl">    <span class="p">&lt;</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">copyright</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="na">.Date.IsZero</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">46</span><span class="cl"> </span></span><span class="line"><span class="ln">47</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:author</span><span class="p">&gt;</span>John Podcast<span class="p">&lt;/</span><span class="nt">itunes:author</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">48</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:type</span><span class="p">&gt;</span>episodic<span class="p">&lt;/</span><span class="nt">itunes:type</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">49</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:image</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/cover.png&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">50</span><span class="cl">    <span class="p">&lt;</span><span class="nt">image</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">51</span><span class="cl">      <span class="p">&lt;</span><span class="nt">url</span><span class="p">&gt;</span>https://yourwebsite.com/cover.png<span class="p">&lt;/</span><span class="nt">url</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">52</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">image</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">53</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Leisure&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">54</span><span class="cl">      <span class="p">&lt;</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">&#34;Video Games&#34;</span><span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">55</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">itunes:category</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">56</span><span class="cl">    <span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span>true<span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">57</span><span class="cl">    <span class="p">&lt;</span><span class="nt">atom:link</span> </span></span><span class="line"><span class="ln">58</span><span class="cl">      <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://yourwebsite.com/feed.xml&#34;</span> </span></span><span class="line"><span class="ln">59</span><span class="cl">      <span class="na">rel</span><span class="o">=</span><span class="s">&#34;self&#34;</span> </span></span><span class="line"><span class="ln">60</span><span class="cl">      <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/rss+xml&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">61</span><span class="cl"> </span></span><span class="line"><span class="ln">62</span><span class="cl">    <span class="p">&lt;</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="o">(</span><span class="k">index</span><span class="w"> </span><span class="nx">$pages</span><span class="na">.ByLastmod.Reverse</span><span class="w"> </span><span class="nx">0</span><span class="o">)</span><span class="na">.Lastmod.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">lastBuildDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">63</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="na">.OutputFormats.Get</span><span class="w"> </span><span class="s">&#34;RSS&#34;</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">64</span><span class="cl">    <span class="cp">{{</span><span class="w"> </span><span class="k">printf</span><span class="w"> </span><span class="s">&#34;&lt;atom:link href=%q rel=\&#34;self\&#34; type=%q /&gt;&#34;</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="na">.MediaType</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">65</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">66</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="nx">$pages</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">67</span><span class="cl">    <span class="p">&lt;</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">68</span><span class="cl">        <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">69</span><span class="cl">        <span class="p">&lt;</span><span class="nt">link</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">link</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">70</span><span class="cl">        <span class="p">&lt;</span><span class="nt">pubDate</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">&#34;Mon, 02 Jan 2006 15:04:05 -0700&#34;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">pubDate</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">71</span><span class="cl">        <span class="cp">{{-</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorEmail</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}{{</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="nx">$authorName</span><span class="w"> </span><span class="cp">}}</span> (<span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span>)<span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">author</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">72</span><span class="cl">        <span class="p">&lt;</span><span class="nt">guid</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">guid</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">73</span><span class="cl">        <span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Content</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">74</span><span class="cl"> </span></span><span class="line"><span class="ln">75</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:title</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Title</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:title</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">76</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeType</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episodeType</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">77</span><span class="cl">        <span class="p">&lt;</span><span class="nt">content:encoded</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Content</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">content:encoded</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">78</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:subtitle</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Summary</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">transform</span><span class="na">.XMLEscape</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">safeHTML</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:subtitle</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">79</span><span class="cl">        <span class="p">&lt;</span><span class="nt">enclosure</span> <span class="na">length</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeLength</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;audio/mpeg&#34;</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeURL</span><span class="w"> </span><span class="cp">}}</span><span class="s">&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">80</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:duration</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeDuration</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:duration</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">81</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeExplicit</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:explicit</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">82</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:episode</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeNumber</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:episode</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">83</span><span class="cl">        <span class="p">&lt;</span><span class="nt">itunes:season</span><span class="p">&gt;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Params.episodeSeason</span><span class="w"> </span><span class="cp">}}</span><span class="p">&lt;/</span><span class="nt">itunes:season</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">84</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeChapters</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">85</span><span class="cl">            <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">86</span><span class="cl">                <span class="p">&lt;</span><span class="nt">podcast:chapters</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">chapters.json&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;application/json+chapters&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">87</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">88</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="k">eq</span><span class="w"> </span><span class="na">.Params.episodeTranscript</span><span class="w"> </span><span class="k">false</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">89</span><span class="cl">            <span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">90</span><span class="cl">                <span class="p">&lt;</span><span class="nt">podcast:transcript</span> <span class="na">url</span><span class="o">=</span><span class="s">&#34;</span><span class="cp">{{</span><span class="w"> </span><span class="na">.Permalink</span><span class="w"> </span><span class="cp">}}</span><span class="s">transcript.vtt&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text/vtt&#34;</span> <span class="p">/&gt;</span> </span></span><span class="line"><span class="ln">91</span><span class="cl">        <span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">92</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">item</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">93</span><span class="cl">    <span class="cp">{{-</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span> </span></span><span class="line"><span class="ln">94</span><span class="cl">  <span class="p">&lt;/</span><span class="nt">channel</span><span class="p">&gt;</span> </span></span><span class="line"><span class="ln">95</span><span class="cl"><span class="p">&lt;/</span><span class="nt">rss</span><span class="p">&gt;</span> </span></span></code></pre></div><p>Now, we&rsquo;ll need to work on creating episodes.</p> <h2 id="episode-template">Episode Template</h2> <p>Inside Hugo&rsquo;s <code>content</code> folder, we&rsquo;re going to create another folder titled <code>episodes</code>. Each episode will go in a folder, like so:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="ln">1</span><span class="cl">├── content/ </span></span><span class="line"><span class="ln">2</span><span class="cl">│ └── episodes/ </span></span><span class="line"><span class="ln">3</span><span class="cl">│ └── YYYY-MM-DD Title/ </span></span><span class="line"><span class="ln">4</span><span class="cl">│ └── chapters.json </span></span><span class="line"><span class="ln">5</span><span class="cl">│ └── index.md </span></span><span class="line"><span class="ln">6</span><span class="cl">│ └── transcript.vtt </span></span></code></pre></div><p>I use the YYYY-MM-DD format for my folders because it keeps them in episode order, but you could easily do something like S01E01. The naming schema is only used for file organization; it&rsquo;s not surfaced on your feed or in your post at all.</p> <p>You can omit the <code>chapters.json</code> and <code>transcript.vtt</code> files if that episode doesn&rsquo;t have chapters or a transcript, respectively. The <code>index.md</code> file contains the actual content of our episode. In the frontmatter of every <code>index.md</code> file, we&rsquo;ll need to include the custom parameters that we created in our feed. Let&rsquo;s open up <code>index.md</code> for our first episode and get to work.</p> <p>We will start with the standard frontmatter that Hugo requires:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;My First Post&#34;</span><span class="w"> </span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-14T07:07:07</span><span class="m">+01</span><span class="p">:</span><span class="m">00</span><span class="w"> </span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="w"></span><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="w"></span><span class="l">Type your shownotes in markdown format here!</span><span class="w"> </span></span></span></code></pre></div><p>First, let&rsquo;s address the <code>itunes:subtitle</code> tag, which is currently set to pull Hugo&rsquo;s post summary. By default, Hugo will just use the first paragraph of your post as a summary. If that works for you, you don&rsquo;t have to do this next step, but if you want want to specify a custom subtitle for your episode, you can add in the <code>summary</code> tag.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln">1</span><span class="cl"><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;My First Post&#34;</span><span class="w"> </span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-14T07:07:07</span><span class="m">+01</span><span class="p">:</span><span class="m">00</span><span class="w"> </span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="w"></span><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="w"></span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;This is my episode subtitle!&#39;</span><span class="w"> </span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="w"></span><span class="l">Type your shownotes in markdown format here!</span><span class="w"> </span></span></span></code></pre></div><p>OK — now onto the parameters that we created for our podcast feed.</p> <table> <thead> <tr> <th>Parameter</th> <th>Type</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>episodeType</td> <td>String</td> <td><code>full</code>, <code>bonus</code>, or <code>trailer</code></td> </tr> <tr> <td>episodeLength</td> <td>Number</td> <td>The length (in bytes) of your media file. There are a lot of ways to find this information, but on Windows, right-click on the file and select Properties. You&rsquo;ll see it after <code>Size:</code> in parentheses.</td> </tr> <tr> <td>episodeURL</td> <td>String</td> <td>A direct link to your media file (probably an MP3)</td> </tr> <tr> <td>episodeDuration</td> <td>String</td> <td>The duration of your episode in hh:mm:ss format</td> </tr> <tr> <td>episodeExplicit</td> <td>Boolean</td> <td><code>true</code> or <code>false</code></td> </tr> <tr> <td>episodeNumber</td> <td>Number</td> <td>Increment with every episode</td> </tr> <tr> <td>episodeSeason</td> <td>Number</td> <td>If you&rsquo;re not using seasons, just set this as <code>1</code> every time</td> </tr> <tr> <td>episodeChapters</td> <td>Boolean</td> <td><code>true</code> (the episode has chapters) or <code>false</code> (the episode does not have chapters). If set to <code>true</code>, make sure you place the <code>json</code> file in the episode folder.</td> </tr> <tr> <td>episodeTranscript</td> <td>Boolean</td> <td><code>true</code> (the episode has a transcript) or <code>false</code> (the episode does not have a transcript). If set to <code>true</code>, make sure you place the <code>vtt</code> file in the episode folder.</td> </tr> </tbody> </table> <p>An example might be&hellip;</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;My First Post&#34;</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-14T07:07:07</span><span class="m">+01</span><span class="p">:</span><span class="m">00</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w"></span><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="w"></span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;This is my episode subtitle!&#39;</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="w"></span><span class="nt">episodeType</span><span class="p">:</span><span class="w"> </span><span class="l">full</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w"></span><span class="nt">episodeLength</span><span class="p">:</span><span class="w"> </span><span class="m">20451328</span><span class="w"> </span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="w"></span><span class="nt">episodeURL</span><span class="p">:</span><span class="w"> </span><span class="l">https://yourwebsite.com/episodes/episode1.mp3</span><span class="w"> </span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="w"></span><span class="nt">episodeDuration</span><span class="p">:</span><span class="w"> </span><span class="m">00</span><span class="p">:</span><span class="m">27</span><span class="p">:</span><span class="m">59</span><span class="w"> </span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="w"></span><span class="nt">episodeExplicit</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="w"></span><span class="nt">episodeNumber</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="w"></span><span class="nt">episodeSeason</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="w"></span><span class="nt">episodeChapters</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="w"></span><span class="nt">episodeTranscript</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="w"></span><span class="l">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur auctor aliquet urna id gravida. In sollicitudin posuere risus a malesuada. Cras pretium, neque eget molestie laoreet, urna neque consequat turpis, sed vestibulum sem mi eget velit. Integer in orci sit amet sapien pharetra malesuada a id justo. Ut pellentesque, magna at finibus tincidunt, elit ante venenatis nibh, in fermentum ipsum elit et ligula. Phasellus lorem elit, volutpat volutpat auctor et, laoreet molestie sapien. Sed hendrerit pellentesque nulla a rutrum. Nunc lobortis mattis vestibulum. Pellentesque vel orci viverra est sagittis pulvinar.</span><span class="w"> </span></span></span></code></pre></div><p>Every time you&rsquo;re ready to post a new episode, you&rsquo;ll just create a new folder and <code>index.md</code> with the appropriate information. You can probably automate this a bit with <a href="https://gohugo.io/content-management/archetypes/">a custom archetype</a>, but I usually just copy and paste the frontmatter from the previous post and tweak it as necessary.</p> <p>Now, you just have to build and deploy your site. Your feed will be found at <code>yourwebsite.com/feed.xml</code>. You&rsquo;ll have to manually submit that feed to the major podcast directories, but that&rsquo;s a one time deal; once you&rsquo;re listed, the apps should refresh shortly after you publish your episodes.</p> <p>You can see this at work on <a href="https://pitchandplay.org/">Pitch &amp; Play</a>. Do note that I&rsquo;ve made a few customizations to the feed template for my show specifically — I&rsquo;m a dumbass who put an ampersand in their show name and I had to work around that. I followed the same basic protocol for <a href="https://podtrificustotalus.com/">Podtrificus Totalus</a>, but some of the feed structure is outdated because I generated that site further back than Pitch &amp; Play. Both sites use custom themes; they&rsquo;re bespoke and probably a bit janky, so I won&rsquo;t be releasing them to the public for use, but the <a href="https://git.32bit.cafe/cassie/">repos for them are public</a>, so you can steal whatever you want.</p> <p>Want to test your feed? I like the <a href="https://podba.se/validate/">Podbase Validator</a>; you can <a href="https://podba.se/validate/?url=https://pitchandplay.org/feed.xml">run Pitch &amp; Play&rsquo;s feed directly by clicking here</a>.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p> <p>If this post helped you — or if something isn&rsquo;t working — feel free to <a href="http://cassie.ink/about/">get in touch with me</a>.</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>I think about bringing Pitch &amp; Play back sometimes because I truly do miss podcasting and I like talking about games. I walked away from the Harry Potter one for obvious reasons, and the one before that I won&rsquo;t mention because episodes of it still exist online (outside of my control) and I&rsquo;d rather not attach myself to them.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> <li id="fn:2"> <p>WordPress is a bloated monster that constantly has security patches, and the founder is super problematic.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> <li id="fn:3"> <p>I&rsquo;m failing the Byte-range support test right now, but that&rsquo;s related to where my media is hosted, not the RSS feed — and in my testing, I&rsquo;m not sure that&rsquo;s actually a problem.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> I want to fuck my computer (week notes 027) @@ -428,6 +435,13 @@ http://localhost:1313/what's-this/ <p>Well, I have another blog.</p> <p>Welcome to <a href="https://cassie.land">cassie.land</a>, the latest (as of writing this) web project that I&rsquo;ve started and may promptly abandon.</p> <p>Here&rsquo;s the truth: These past few months have shown me the impermanence of online platforms. I have quit reddit with the third-party API shutdowns, and while I am probably better off for it, it does feel like losing one of the bastions of the internet I once knew. I regret to inform that I am officially an old person on the internet; I yearn for the days of hyper-specific Geocities pages with incredibly useful information written by a thirteen year old screaming into the void (and for the days where our search engines actually directed us to that information rather than some circuitous tripe written by AI that packs in every SEO keyword without actually saying anything).</p> <p>Originally, this was written on my old WordPress blog, a site I&rsquo;ve had up for almost ten years now (and which I will not link, because <em>ten years</em> &ndash; I haven&rsquo;t decided fully what I want to do with it). I&rsquo;ve been using WordPress on and off for random projects for going on fifteen years now, and while it&rsquo;s comfortable and flexible and I know it well, I yearn for something different. Something lighter. Something new. <del>Enter Grav, which I&rsquo;ve now spent the night learning.</del> Enter Hugo, which I switched to kind of on a whim — Grav is cool, but it felt a little too easy. I&rsquo;m a masochist, I guess; I miss code. Grav felt like a shortcut and like more bloat than I wanted.</p> <p>And so I hope to make this a resolution to blog more, openly, about me. I have thoughts I like to share and a desire to catalogue the things I am interested in, and it just doesn’t seem viable any more to do so on any online platforms that I don’t own. I feel, in a sense, “homeless” on the internet, and I think it is time we make those homes on ground that won’t be pulled out from under us by soulless corporations and CEOs.</p> <p>I&rsquo;m not fully sure what this will end up being, but thanks for reading and joining me on the ride.</p> + + House of Leaves: Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987) + http://localhost:1313/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987/ + Thu, 01 Jan 2015 00:00:00 +0000 + http://localhost:1313/house-of-leaves-appendix-ii-e-the-three-attic-whalestoe-institute-letters-may-8th-1987/ + <p>I’ve picked up <em>House of Leaves</em> again, Mark Z. Danielewski’s debut novel and veritable puzzle of a book. I previously abandoned it because, as a horror novel, I was having some trouble sleeping after reading it, but I’ve wanted to read it for years and the new year seems like a good time to conquer my fears.</p> <p>There’s plenty of discussion around the internet regarding the book, and plenty more people who, I’m sure, have decoded the book’s many coded messages. But I’m a stingy sort who likes to do things on my own, and I thought I’d log some of it here! The first of my challenges was a letter from Appendix II-E, sent to Johnny Truant from his mother; she suspects that the director of the Whalestoe Institute, where she is institutionalized, is intercepting her letters. She is able to send a private letter to Johnny via an attendant, telling him the key to her next letter: take only the first letter of each word, separate those letters into something coherent, and find her true message (the letter itself is pure nonsense). Therefore, it’s no significant discovery on my part, but more of a fun first challenge. Warning that this is a book of psychological horror, and the contents below may be troubling or triggering (esp. for rape victims).</p> <p>I won’t bother re-typing the entirety of the letter because, as I said, it’s nonsensical. However, when the first letter of each word is taken, I’ve come up with the following message.</p> <blockquote> <p>May 8th, 1987</p> <p>Dearest Johnny,</p> <p>They have found a way to break me. Rape a fifty-six year old bag of bones. There is no worse and don’t believe otherwise.</p> <p>The attendants do it. Others do it. Not every day, not every week, maybe not even every month. But they do it. Someone I don’t know always comes. When it’s dark. Late. I’ve learned not to scream, screaming gave me hope and unanswered hope is shattered hope. Think of your Haitian. It is far saner to choose rape than shattered hope. So I submit and I drift.</p> <p>I let caprice and a certain degree of free association take me away. Sometimes I’m still away long after it’s done, after he’s gone — the stranger, the attendant, the custodian, the janitor, cleaning man, waiting man, dirty man — the night tidying up after him.</p> <p>I’m in hell giving into heaven where I sometimes think of your beautiful father with his dreamy wings and only then do I allow myself to cry. Not because your mother was raped (again) but because she loved so much what she could never have been allowed to keep. Such a silly girl.</p> <p>You must save me Johnny. In the name of your father. I must escape this place or I will die.</p> <p>I love you so much.</p> <p>You are all I have.</p> <p>P.</p></blockquote> <p>In addition, throughout the letter, letters are capitalized in the middle of words (ex. ‘froWned’). When those letters are collected, it spells the following message.</p> <blockquote> <p>A face in a cloud no trace in the crowd</p></blockquote> <p>(This omits the MAN from “Man and Nam,” which have appeared between the o and w of ‘crowd.’ I have found no solution to their capitalization — yet?)</p> <p>The phrase felt familiar once I found it, so I googled it, despite my resolve to figure out the puzzles myself (if possible) — I received only results for House of Leaves — perhaps I read it on tumblr somewhere? — but Google confirmed my suspicion that the Whalestoe Letters contain plenty more secrets to uncover (I’ve not read past the May 8th letter yet). I look forward to unfolding them!</p> <h2 id="comments">Comments<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></h2> <p><strong>Jennifer (2020-10-10):</strong></p> <blockquote> <p>THANK YOU for this.</p></blockquote> <p><strong>Paul (2020-11-14):</strong></p> <blockquote> <p>5 years later and I say thank you.</p></blockquote> <p><strong>Control (2021-07-26):</strong></p> <blockquote> <p>Appreciate the work, thank you</p></blockquote> <p><strong>Shelby West (2021-08-02):</strong></p> <blockquote> <p>6 years later! Thanks, I got stuck on the word “Haitian.”</p></blockquote> <p><strong>Tildy (2022-03-27):</strong></p> <blockquote> <p>Trying to decipher by bookd light at 3am was no good thank you from 2022</p></blockquote> <p><strong>Hallway Explorer (2022-08-17):</strong></p> <blockquote> <p>Yes, thank you very much.</p></blockquote> <p><strong>C (2023-05-24):</strong></p> <blockquote> <p>I’m dyslexic and trying SO hard to read this book, thank you, so much this was so hard for me and you saved me so much struggle!!</p></blockquote> <p><strong>Laura5757 (2023-11-29):</strong></p> <blockquote> <p>While it’s not the same, the hidden message reminds me a lot of Ezra Pound’s famous poem, “In a Station of the Metro,” which consists of only two lines: “The apparition of these faces in the crowd: / Petals on a wet, black bough.” Perhaps that is what seemed familiar to you too?</p></blockquote> <p><strong>Cassie (2024-07-02):</strong></p> <blockquote> <p>Perhaps! I do teach that poem to my students, so it occupies space in my brain…</p></blockquote> <p><strong>Xynael (2024-08-07):</strong></p> <blockquote> <p>I also thought if its a key for a decipher code</p> <p>Since FACE RACE</p> <p>CLOUD CROWD</p> <p>and MAN NAM</p> <p>do this I’ve ready this in another Horror Books where they used these Einstein Codes to find hidden massages</p> <p>But I am really bad at these</p> <p>Maybe it’s nonesense and I see ghosts but maybe theres Something about it</p></blockquote> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>This post originally appeared when I ran my site on WordPress and allowed folks to comment. Most of these are just thank yous, but I wanted to preserve them all the same.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> + about http://localhost:1313/about/ diff --git a/public/intentional-listening/index.html b/public/intentional-listening/index.html index 9a28035..5d9fda5 100644 --- a/public/intentional-listening/index.html +++ b/public/intentional-listening/index.html @@ -7,6 +7,7 @@ + Intentional Listening | cassie.ink @@ -56,6 +57,9 @@ intentional-listening
+
+
+

A friend of mine is a big fan of Florence + the Machine. I confessed to only really knowing (but liking) her hits, “Dog Days” and “Cosmic Love.” I asked which album she would recommend I listen to; she said How Big, How Blue, How Beautiful (2015),1 and I texted her about some of the songs on it. She asked if I was listening to the whole thing given the back to back messages; I said yes, and I started to consider how I like to consume music.

We live in a shuffled playlist and artist mix culture.2 We collect our favorite tracks or let an algorithm serve us up suggestions of “you might like” or “this label paid for this to be fed to the masses.” I do it, too; much of my music listening is done passively, as a backdrop to other tasks that aren’t consuming my entire mental energy like driving or cleaning or unpacking (i.e. non-diegetic video game style background noise meant to go mostly unnoticed).

TikTok is the ultimate bastardization of music listening3, as songs are reduced down to ten-second snippets replayed devoid of any context. Forget the entire album – you’re missing even just the song.

diff --git a/public/js/main.js.map b/public/js/main.js.map index bee2152..d74de90 100644 --- a/public/js/main.js.map +++ b/public/js/main.js.map @@ -1 +1 @@ -{"version":3,"sources":["file:///F:/websites/cassiedotink/themes/neverhungoveragain/assets/js/main.js"],"sourcesContent":["console.log('This site was generated by Hugo.');\r\n"],"mappings":";;AAAA,UAAQ,IAAI,kCAAkC;","names":[]} \ No newline at end of file +{"version":3,"sources":["file:///F:/Websites/cassiedotink/themes/neverhungoveragain/assets/js/main.js"],"sourcesContent":["console.log('This site was generated by Hugo.');\r\n"],"mappings":";;AAAA,UAAQ,IAAI,kCAAkC;","names":[]} \ No newline at end of file diff --git a/public/litr-250-close-reading-2e/index.html b/public/litr-250-close-reading-2e/index.html index 0a8fb32..a133eb8 100644 --- a/public/litr-250-close-reading-2e/index.html +++ b/public/litr-250-close-reading-2e/index.html @@ -7,6 +7,7 @@ + LITR 250 Close Reading 2E | cassie.ink @@ -56,6 +57,9 @@ litr-250-close-reading-2e
+
+
+

In the beginning of Chapter VIII in the third section of To the Lighthouse, pages 186-187, Virginia Woolf’s unique approach to perspective and introspection create a subjective presentation of reality and relationships, supported by extended metaphors of fluidity and stillness. On a boat trip mandated by Mr. Ramsay to the titular lighthouse, Cam and James anatomize and unfold their feelings towards their father. Cam evolves as the boat moves across the sea while James’s unflinching rage and violence towards the patriarch repeat in this section as the sailboat halts and space contracts to exacerbate his indignation. Woolf thus frames and explores the figure of Mr. Ramsay and the nominal motif of a journey through individual introspection and excurses. 1

The selection picks up directly from the end of Chapter IV, shifting away from an interlude wherein Lily Briscoe works on her painting and contemplates her own relationships to both Mr. and Mrs. Ramsay, the former present in the scene with Cam and James, the latter casting a long shadow over it – James’s hatred of Mr. Ramsay was first introduced in an Oedipal fashion in the novel’s very first chapter, where James sees Mr. Ramsay as basking in “the pleasure of disillusioning his son… [and] ridicul[ing] his wife,” and James perceives his mother as “ten times better in every way than” her husband (Woolf 8). Woolf seemingly disregards flow and a coherent progression of events by bisecting the boat journey with Lily’s artistic journey; her prose instead acts more as combined snapshots from various perspectives about fraught, inscrutable figures like Mr. and Mrs. Ramsay. The boat trip is merely a device through which Woolf can open “the picture into the depths of consciousness,” i.e. James and Cam’s internal reflections about their father (Auerbach 540).

While Cam and James were at first united in their mission to “fight tyranny to the death” during the trip to the lighthouse, tyranny being Mr. Ramsay, Cam softens on her father toward the end of Chapter IV (Woolf 167). It is no accident, then, that Chapter VIII opens with the boat still in motion and from Cam’s perspective – the movement of the boat frames the characters’ parenthetical thoughts. Cam contemplates the “green swirls and… patterns” made by her hand in the water and imagines an “underworld of waters” where “in the green light a change came over one’s entire mind” (Woolf 186). These images of fluidity and change reflect the previous excurses into Cam’s subjective reality – her thawing resistance to her father. However, when the wind suddenly calms and the boat stops moving, James stews in the same thoughts that have gripped him throughout the novel (his antipathy for his father), a kind of stillness of thought and emotion.

diff --git a/public/media-log-2024-01/index.html b/public/media-log-2024-01/index.html index 74cbdea..c0506f2 100644 --- a/public/media-log-2024-01/index.html +++ b/public/media-log-2024-01/index.html @@ -7,6 +7,7 @@ + Media Log (January 2024) | cassie.ink @@ -56,6 +57,9 @@ media-log-2024-01 +
+
+

TV

+
+

House of Leaves: Appendix II-E, The Three Attic Whalestoe Institute Letters (May 8th, 1987)

+ +
+