hugo podcast post, syntax highlighting
This commit is contained in:
parent
2c6cfad7c5
commit
a4ff49e57e
44
.obsidian/workspace.json
vendored
44
.obsidian/workspace.json
vendored
@ -8,18 +8,18 @@
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "f83b38ff735bcd79",
|
||||
"id": "cf03b0656e0056cc",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "content/week-notes/028.md",
|
||||
"file": "content/posts/Using Hugo to generate a podcast feed.md",
|
||||
"mode": "source",
|
||||
"source": false,
|
||||
"backlinks": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "028"
|
||||
"title": "Using Hugo to generate a podcast feed"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -123,13 +123,13 @@
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "conflict-files-obsidian-git.md",
|
||||
"file": "content/posts/Using Hugo to generate a podcast feed.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of conflict-files-obsidian-git"
|
||||
"title": "Outline of Using Hugo to generate a podcast feed"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -143,7 +143,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 3
|
||||
"currentTab": 2
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
@ -158,10 +158,23 @@
|
||||
"obsidian-git:Open Git source control": false
|
||||
}
|
||||
},
|
||||
"active": "f83b38ff735bcd79",
|
||||
"active": "cf03b0656e0056cc",
|
||||
"lastOpenFiles": [
|
||||
"content/posts/2025-08-11.md",
|
||||
"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",
|
||||
"themes/neverhungoveragain/assets/css/syntax_light.css",
|
||||
"content/posts/turning 30.md",
|
||||
"content/posts/Using Hugo to generate a podcast feed.md",
|
||||
"content/week-notes/028.md",
|
||||
"content/posts/2025-08-11.md",
|
||||
"content/week-notes/027.md",
|
||||
"content/posts/test.md",
|
||||
"content/week-notes/026.md",
|
||||
@ -182,19 +195,6 @@
|
||||
"content/week-notes/012.md",
|
||||
"content/week-notes/013.md",
|
||||
"content/week-notes/014.md",
|
||||
"content/week-notes/015.md",
|
||||
"content/week-notes/016.md",
|
||||
"content/week-notes/017.md",
|
||||
"content/week-notes/018.md",
|
||||
"public/posts/fx-chains-by-the-utterly-inept/index.html",
|
||||
"public/posts/fx-chains-by-the-utterly-inept",
|
||||
"public/tags/podcasting/index.xml",
|
||||
"public/tags/audio/index.xml",
|
||||
"public/week-notes/25/index.html",
|
||||
"public/week-notes/25",
|
||||
"public/week-notes/025-unused/index.html",
|
||||
"public/week-notes/025-unused",
|
||||
"public/tags/podcasting/index.html",
|
||||
"public/tags/podcasting"
|
||||
"content/week-notes/015.md"
|
||||
]
|
||||
}
|
431
content/posts/Using Hugo to generate a podcast feed.md
Normal file
431
content/posts/Using Hugo to generate a podcast feed.md
Normal file
@ -0,0 +1,431 @@
|
||||
---
|
||||
title: Using Hugo to generate a podcast feed
|
||||
date: 2025-08-12
|
||||
url: hugo-podcast
|
||||
tags:
|
||||
- podcasting
|
||||
- tech
|
||||
draft: false
|
||||
---
|
||||
I've been podcasting on and off for over ten years now — all shows that I've since abandoned[^1], 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 install[^2]. 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](https://gohugo.io/) (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](https://eleventy-plugin-podcaster.com/) 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](https://bunny.net/); 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](https://gohugo.io/templates/rss/#custom-templates) 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](https://help.apple.com/itc/podcasts_connect/#/itcb54353390) as well as some additional ones for newer features like chapter support.
|
||||
|
||||
## Creating a custom feed template
|
||||
First, find your Hugo config file. I use `toml` format, so mine is hugo.toml at the root of my site directory. I believe Hugo uses `toml` by default, but if you use `yaml`, you'll have to adapt the syntax (but if you use `yaml`, you probably know how to do that).
|
||||
```TOML
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "podcast" ] # Sets up podcast feed
|
||||
|
||||
[outputFormats]
|
||||
[outputFormats.podcast]
|
||||
MediaType = "application/rss+xml"
|
||||
BaseName = "feed" # Your feed will be located at example.org/feed.xml.
|
||||
```
|
||||
This tells that we're making a new RSS feed template and that it should use it to serve our content. Now, create a new file at `layouts/index.podcast.xml`.
|
||||
|
||||
In `layouts/index.podcast.xml`, first copy and paste the default Hugo RSS feed template to use as a base.
|
||||
```go-html-template
|
||||
{{- $authorEmail := "" }}
|
||||
{{- with site.Params.author }}
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .email }}
|
||||
{{- $authorEmail = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- $authorName := "" }}
|
||||
{{- with site.Params.author }}
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .name }}
|
||||
{{- $authorName = . }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- $authorName = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- $pctx := . }}
|
||||
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
|
||||
{{- $pages := slice }}
|
||||
{{- if or $.IsHome $.IsSection }}
|
||||
{{- $pages = $pctx.RegularPages }}
|
||||
{{- else }}
|
||||
{{- $pages = $pctx.Pages }}
|
||||
{{- end }}
|
||||
{{- $limit := .Site.Config.Services.RSS.Limit }}
|
||||
{{- if ge $limit 1 }}
|
||||
{{- $pages = $pages | first $limit }}
|
||||
{{- end }}
|
||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
|
||||
<managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
|
||||
<webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
|
||||
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
|
||||
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
{{- with .OutputFormats.Get "RSS" }}
|
||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||
{{- end }}
|
||||
{{- range $pages }}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>{{ .Summary | transform.XMLEscape | safeHTML }}</description>
|
||||
</item>
|
||||
{{- end }}
|
||||
</channel>
|
||||
</rss>
|
||||
```
|
||||
|
||||
We're going to start by changing the `rss` tag to add podcasting namespaces. Find the `rss` tag at line 34.
|
||||
```go-html-template
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
```
|
||||
and replace it with...
|
||||
```go-html-template
|
||||
<rss version="2.0"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
|
||||
xmlns:podcast="https://podcastindex.org/namespace/1.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
```
|
||||
We need to do this because otherwise, a feed reader (like a browser or a podcast app) won't be able to recognize the podcast-specific tags we're using. Most of them are `itunes` 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're also adding supporting for [Podcast Index's newer tags](https://podcasting2.org/docs/podcast-namespace) — 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.
|
||||
|
||||
## The channel tag
|
||||
|
||||
Next, let's take a look at the first few items in `<channel>` tag. Think of this as the basic show information; we'll get to the episodes later in the `<item>` tag. Here's what Hugo has by default at the start of the `<channel>` tag.
|
||||
```go-html-template
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
|
||||
<managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
|
||||
<webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
|
||||
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
|
||||
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
```
|
||||
We can leave `title`, `link`, `generator`, `language`, `copyright`, and `lastBuildDate` alone. We don't need `managingEditor` or `webMaster`, so you can remove those.
|
||||
|
||||
Edit the `description` tag with your podcast's tagline.
|
||||
```go-html-template
|
||||
<description>Just another podcast feed.</description>
|
||||
```
|
||||
Now, we'll have to add a few podcasting-specific declarations, starting with the show information.
|
||||
|
||||
First, we need to add `itunes:author`. 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't want your full first and last name out there, don't put it here.
|
||||
```go-html-template
|
||||
<itunes:author>John Podcast</itunes:author>
|
||||
```
|
||||
Now, we need the `itunes:type` tag, which can have two possible values: `episodic` (appropriate for most podcasts — episodes don't need to be consumed in any particular order) or `serial` (episodes should be consumed sequentially).
|
||||
```go-html-template
|
||||
<itunes:type>episodic</itunes:type>
|
||||
```
|
||||
|
||||
The `itunes:image` tag is where you'll specify your show's cover art. I also declare this through `image`, which will display your cover art on the raw RSS feed displayed in a browser, too.
|
||||
```go-html-template
|
||||
<itunes:image href="https://yourwebsite.com/cover.png" />
|
||||
<image>
|
||||
<url>https://yourwebsite.com/cover.png</url>
|
||||
</image>
|
||||
```
|
||||
Next, we need to specify the category for the show with the `itunes:category` tag. Apple [has the full list of available categories and sub-categories here](https://podcasters.apple.com/support/1691-apple-podcasts-categories). For the sake of this example, let's assume you're a podcast about video games.
|
||||
```go-html-template
|
||||
<itunes:category text="Leisure">
|
||||
<itunes:category text="Video Games"/>
|
||||
</itunes:category>
|
||||
```
|
||||
If your show is in a category with an ampersand (&), 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.
|
||||
```go-html-template
|
||||
<itunes:category text="Society & Culture">
|
||||
<itunes:category text="Documentary" />
|
||||
</itunes:category>
|
||||
<itunes:category text="Health & Fitness">
|
||||
<itunes:category text="Mental Health" />
|
||||
</itunes:category>
|
||||
```
|
||||
Ampersands break RSS feeds, so why Apple decided to create categories with ampersands, I will never know.
|
||||
|
||||
We'll also need to specify if the show is explicit using the `itunes:explicit` tag. The possible values are either `true` or `false`. I am told that Apple can be quite strict about this, so if there's any cursing or adult content on your show, use `true`.
|
||||
```go-html-template
|
||||
<itunes:explicit>true</itunes:explicit>
|
||||
```
|
||||
I'm not actually sure if this part is required, but I have it and it doesn't hurt. This is a link to your feed. Obviously, change `yourwebsite.com` to your actual domain.
|
||||
```go-html-template
|
||||
<atom:link
|
||||
href="https://yourwebsite.com/feed.xml"
|
||||
rel="self"
|
||||
type="application/rss+xml" />
|
||||
```
|
||||
If you changed the `BaseName` in `hugo.toml`, make sure it matches here.
|
||||
|
||||
## The item tag
|
||||
Okay — we're all set on the `channel` information. Now, let's work on the `item` tag. When Hugo generates your actual RSS feed, there will be an `item` tag for every episode you release. Of course, we'll need to customize it to have some podcast-specific data, just like we did in the `channel` tag; this time around, though, it's a little more complicated. The content in the `channel` tag is relatively constant — you're probably not changing the name of your show all that often. But the information we have to provide about our *episodes* will, naturally, change on an episode-by-episode basis. This means we're going to have to create some custom parameters that we will then specify in the episode content files.
|
||||
|
||||
Here's what Hugo has by default:
|
||||
```go-html-template
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>{{ .Summary | transform.XMLEscape | safeHTML }}</description>
|
||||
</item>
|
||||
```
|
||||
We're off to a start, but, of course, there's a lot to add and edit. The `title`, `link`, `pubDate`, and `guid` tags can all remain as is.
|
||||
|
||||
The `description` tag renders what will become your show notes. Right now, it's set to your post'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're going to change `.Summary` to `.Content`, like so:
|
||||
```go-html-template
|
||||
<description>{{ .Content | transform.XMLEscape | safeHTML }}</description>
|
||||
```
|
||||
OK — now let's dig into actually making these podcast episodes. We're going to be slotting in a lot of custom parameters, which we'll eventually flesh out when we get to our post template. Let's start with the episode title. We've already specified that in the `title` tag, but there's an Apple-specific one to declare again. We can reuse the same syntax from before, though.
|
||||
```go-html-template
|
||||
<itunes:title>{{ .Title }}</itunes:title>
|
||||
```
|
||||
|
||||
Next up is `itunes:episodeType`, which can be either `full`, `bonus`, or `trailer`. Because this varies on an episode-to-episode basis, we'll need a custom parameter.
|
||||
```go-html-template
|
||||
<itunes:episodeType>{{ .Params.episodeType }}</itunes:episodeType>
|
||||
```
|
||||
We'll also add a `content:encoded` tag. Similar to `itunes:title`, this is redundant with another tag (`description`), but we're aiming for compatibility here. Some older podcast apps still use `content:encoded`, so we want to support it.
|
||||
|
||||
Now for the `itunes:summary` tag. This is your episode's tagline, a preview of its contents. Not all podcast apps surface this, but some do. We're going to use `.Summary` here; we'll get to customizing it when we set up our actual post templates.
|
||||
```go-html-template
|
||||
<itunes:summary>{{ .Summary | transform.XMLEscape | safeHTML }}</itunes:summary>
|
||||
```
|
||||
The next tag is probably the most important: `enclosure`, which is where you link your actual media file. We'll do this with two custom parameters: `episodeLength` (a bit of a misnomer — it's the file size in bytes) and `episodeURL`.
|
||||
```go-html-template
|
||||
<enclosure length="{{ .Params.episodeLength }}" type="audio/mpeg" url="{{ .Params.episodeURL }}" />
|
||||
```
|
||||
Now, for the actual *duration* of the episode, we need `itunes:duration`.
|
||||
```go-html-template
|
||||
<itunes:duration>{{ .Params.episodeDuration }}</itunes:duration>
|
||||
```
|
||||
I'm choosing to remain consistent with the code's syntax; I wish it was `enclosure size` because duration and length are too interchangeable, but it's not, so we will have to solider on.
|
||||
|
||||
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 *whole* isn't generally explicit, but on a particular episode, you discuss a Chuck Tingle book — you can mark just that episode as explicit.
|
||||
```go-html-template
|
||||
<itunes:explicit>{{ .Params.episodeExplicit }}</itunes:explicit>
|
||||
```
|
||||
We'll also need to specify an episode and season number. If your show is episodic, we'll just always use season 1, and podcatchers shouldn'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't use seasons right now, but I'd like to have the opportunity in the future, so I'll include it.
|
||||
```go-html-template
|
||||
<itunes:episode>{{ .Params.episodeNumber }}</itunes:episode>
|
||||
<itunes:season>{{ .Params.episodeSeason }}</itunes:season>
|
||||
```
|
||||
Now, we'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're going to wrap this in an `if` statement to check if the parameter returns `true`, meaning, your episode has chapters; if it does, we'll use a standard URL format. If it's `false`, this tag won't render. If we didn't do this, there would be a broken link in the feed.
|
||||
```go-html-template
|
||||
{{ if eq .Params.episodeChapters false }}
|
||||
{{ else }}
|
||||
<podcast:chapters url="{{ .Permalink }}chapters.json" type="application/json+chapters" />
|
||||
{{ end }}
|
||||
```
|
||||
If you need help generating chapters for your podcast, by the way, [there's a great web-based tool here](https://mp3chapters.github.io/).
|
||||
|
||||
We'll do the same if/else statement for transcripts (for the same reason). I like `vtt` format, but there are others out there; just specify whichever one you prefer.
|
||||
```go-html-template
|
||||
{{ if eq .Params.episodeTranscript false }}
|
||||
{{ else }}
|
||||
<podcast:transcript url="{{ .Permalink }}transcript.vtt" type="text/vtt" />
|
||||
{{ end }}
|
||||
```
|
||||
And that's it! There are a lot of other [available podcast tags](https://podcasting2.org/docs/podcast-namespace/1.0) 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're interested in using any other tags, just add them as we have been and build those custom parameters into your post template.
|
||||
|
||||
## Finished Feed Template
|
||||
We have created a custom podcast feed, which will render at `yourwebsite.com/feed.xml`. We've filled it with the following contents:
|
||||
```go-html-template
|
||||
{{- $authorEmail := "" }}
|
||||
{{- with site.Params.author }}
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .email }}
|
||||
{{- $authorEmail = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- $authorName := "" }}
|
||||
{{- with site.Params.author }}
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .name }}
|
||||
{{- $authorName = . }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- $authorName = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- $pctx := . }}
|
||||
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
|
||||
{{- $pages := slice }}
|
||||
{{- if or $.IsHome $.IsSection }}
|
||||
{{- $pages = $pctx.RegularPages }}
|
||||
{{- else }}
|
||||
{{- $pages = $pctx.Pages }}
|
||||
{{- end }}
|
||||
{{- $limit := .Site.Config.Services.RSS.Limit }}
|
||||
{{- if ge $limit 1 }}
|
||||
{{- $pages = $pages | first $limit }}
|
||||
{{- end }}
|
||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
|
||||
xmlns:podcast="https://podcastindex.org/namespace/1.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Just another podcast feed.</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
|
||||
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
|
||||
|
||||
<itunes:author>John Podcast</itunes:author>
|
||||
<itunes:type>episodic</itunes:type>
|
||||
<itunes:image href="https://yourwebsite.com/cover.png" />
|
||||
<image>
|
||||
<url>https://yourwebsite.com/cover.png</url>
|
||||
</image>
|
||||
<itunes:category text="Leisure">
|
||||
<itunes:category text="Video Games"/>
|
||||
</itunes:category>
|
||||
<itunes:explicit>true</itunes:explicit>
|
||||
<atom:link
|
||||
href="https://yourwebsite.com/feed.xml"
|
||||
rel="self"
|
||||
type="application/rss+xml" />
|
||||
|
||||
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
{{- with .OutputFormats.Get "RSS" }}
|
||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||
{{- end }}
|
||||
{{- range $pages }}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>{{ .Content | transform.XMLEscape | safeHTML }}</description>
|
||||
|
||||
<itunes:title>{{ .Title }}</itunes:title>
|
||||
<itunes:episodeType>{{ .Params.episodeType }}</itunes:episodeType>
|
||||
<content:encoded>{{ .Content | transform.XMLEscape | safeHTML }}</content:encoded>
|
||||
<itunes:subtitle>{{ .Summary | transform.XMLEscape | safeHTML }}</itunes:subtitle>
|
||||
<enclosure length="{{ .Params.episodeLength }}" type="audio/mpeg" url="{{ .Params.episodeURL }}" />
|
||||
<itunes:duration>{{ .Params.episodeDuration }}</itunes:duration>
|
||||
<itunes:explicit>{{ .Params.episodeExplicit }}</itunes:explicit>
|
||||
<itunes:episode>{{ .Params.episodeNumber }}</itunes:episode>
|
||||
<itunes:season>{{ .Params.episodeSeason }}</itunes:season>
|
||||
{{ if eq .Params.episodeChapters false }}
|
||||
{{ else }}
|
||||
<podcast:chapters url="{{ .Permalink }}chapters.json" type="application/json+chapters" />
|
||||
{{ end }}
|
||||
{{ if eq .Params.episodeTranscript false }}
|
||||
{{ else }}
|
||||
<podcast:transcript url="{{ .Permalink }}transcript.vtt" type="text/vtt" />
|
||||
{{ end }}
|
||||
</item>
|
||||
{{- end }}
|
||||
</channel>
|
||||
</rss>
|
||||
```
|
||||
Now, we'll need to work on creating episodes.
|
||||
## Episode Template
|
||||
Inside Hugo's `content` folder, we're going to create another folder titled `episodes`. Each episode will go in a folder, like so:
|
||||
```txt
|
||||
├── content/
|
||||
│ └── episodes/
|
||||
│ └── YYYY-MM-DD Title/
|
||||
│ └── chapters.json
|
||||
│ └── index.md
|
||||
│ └── transcript.vtt
|
||||
```
|
||||
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's not surfaced on your feed or in your post at all.
|
||||
|
||||
You can omit the `chapters.json` and `transcript.vtt` files if that episode doesn't have chapters or a transcript, respectively. The `index.md` file contains the actual content of our episode. In the frontmatter of every `index.md` file, we'll need to include the custom parameters that we created in our feed. Let's open up `index.md` for our first episode and get to work.
|
||||
|
||||
We will start with the standard frontmatter that Hugo requires:
|
||||
```yaml
|
||||
---
|
||||
title: "My First Post"
|
||||
date: 2024-01-14T07:07:07+01:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
Type your shownotes in markdown format here!
|
||||
```
|
||||
First, let's address the `itunes:subtitle` tag, which is currently set to pull Hugo'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'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 `summary` tag.
|
||||
```yaml
|
||||
---
|
||||
title: "My First Post"
|
||||
date: 2024-01-14T07:07:07+01:00
|
||||
draft: false
|
||||
summary: 'This is my episode subtitle!'
|
||||
---
|
||||
|
||||
Type your shownotes in markdown format here!
|
||||
```
|
||||
OK — now onto the parameters that we created for our podcast feed.
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| episodeType | String | `full`, `bonus`, or `trailer` |
|
||||
| episodeLength | Number | 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'll see it after `Size:` in parentheses. |
|
||||
| episodeURL | String | A direct link to your media file (probably an MP3) |
|
||||
| episodeDuration | String | The duration of your episode in hh:mm:ss format |
|
||||
| episodeExplicit | Boolean | `true` or `false` |
|
||||
| episodeNumber | Number | Increment with every episode |
|
||||
| episodeSeason | Number | If you're not using seasons, just set this as `1` every time |
|
||||
| episodeChapters | Boolean | `true` (the episode has chapters) or `false` (the episode does not have chapters). If set to `true`, make sure you place the `json` file in the episode folder. |
|
||||
| episodeTranscript | Boolean | `true` (the episode has a transcript) or `false` (the episode does not have a transcript). If set to `true`, make sure you place the `vtt` file in the episode folder. |
|
||||
|
||||
An example might be...
|
||||
```yaml
|
||||
---
|
||||
title: "My First Post"
|
||||
date: 2024-01-14T07:07:07+01:00
|
||||
draft: false
|
||||
summary: 'This is my episode subtitle!'
|
||||
|
||||
episodeType: full
|
||||
episodeLength: 20451328
|
||||
episodeURL: https://yourwebsite.com/episodes/episode1.mp3
|
||||
episodeDuration: 00:27:59
|
||||
episodeExplicit: true
|
||||
episodeNumber: 1
|
||||
episodeSeason: 1
|
||||
episodeChapters: false
|
||||
episodeTranscript: false
|
||||
---
|
||||
|
||||
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.
|
||||
```
|
||||
|
||||
Every time you're ready to post a new episode, you'll just create a new folder and `index.md` with the appropriate information. You can probably automate this a bit with [a custom archetype](https://gohugo.io/content-management/archetypes/), but I usually just copy and paste the frontmatter from the previous post and tweak it as necessary.
|
||||
|
||||
Now, you just have to build and deploy your site. Your feed will be found at `yourwebsite.com/feed.xml`. You'll have to manually submit that feed to the major podcast directories, but that's a one time deal; once you're listed, the apps should refresh shortly after you publish your episodes.
|
||||
|
||||
You can see this at work on [Pitch & Play](https://pitchandplay.org/). Do note that I've made a few customizations to the feed template for my show specifically — I'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 [Podtrificus Totalus](https://podtrificustotalus.com/), but some of the feed structure is outdated because I generated that site further back than Pitch & Play. Both sites use custom themes; they're bespoke and probably a bit janky, so I won't be releasing them to the public for use, but the [repos for them are public](https://git.32bit.cafe/cassie/), so you can steal whatever you want.
|
||||
|
||||
Want to test your feed? I like the [Podbase Validator](https://podba.se/validate/); you can [run Pitch & Play's feed directly by clicking here](https://podba.se/validate/?url=https://pitchandplay.org/feed.xml).[^3]
|
||||
|
||||
If this post helped you — or if something isn't working — feel free to [get in touch with me](http://cassie.ink/about/).
|
||||
|
||||
[^1]: I think about bringing Pitch & 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't mention because episodes of it still exist online (outside of my control) and I'd rather not attach myself to them.
|
||||
|
||||
[^2]: WordPress is a bloated monster that constantly has security patches, and the founder is super problematic.
|
||||
|
||||
[^3]: I'm failing the Byte-range support test right now, but that's related to where my media is hosted, not the RSS feed — and in my testing, I'm not sure that's actually a problem.
|
@ -17,6 +17,6 @@ url: week-notes/028
|
||||
## 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 sketch[^1], 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 downloaded *nothing or something to die for* by mui zyu. I had high hopes because I really like "donna like parasites" (I got a version of it in a sample pack by the label), but I found the album as a whole to be rather dull. "donna" was my only standout.
|
||||
I downloaded [*nothing or something to die for* by mui zyu](https://muizyu.bandcamp.com/album/nothing-or-something-to-die-for). I had high hopes because I really like "donna like parasites" (I got a version of it in [a free sample pack from the label](https://fatherdaughterrecords.com/products/its-2025-and-wow-thats-unfortunate-but-well-get-thru-this-with-a-free-sampler-so-here-ya-go)), but I found the album as a whole to be rather dull. "donna" was my only standout. zyu did put out [a collection with a few of the songs translated into Cantonese](https://muizyu.bandcamp.com/album/nothing-or-something-to-die-for-cantonese-tasting-menu), which features Emmy the Great (who I like) — a really cool idea but would be more novel if I was into the actual tracks.
|
||||
|
||||
[^1]: I had [similar beef](https://cassie.ink/week-notes/021/) with Mac Miller's *Circles*.
|
@ -28,4 +28,9 @@ enableRobotsTXT = true
|
||||
[[menus.main]]
|
||||
name = 'Week Notes'
|
||||
pageRef = '/tags/week-notes'
|
||||
weight = 40
|
||||
weight = 40
|
||||
|
||||
[markup.highlight]
|
||||
noClasses = false
|
||||
lineNos = true
|
||||
lineNumbersInTable = false
|
@ -12,10 +12,12 @@ this site is currently built using hugo. I edit my posts in Obsidian (with the h
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -12,10 +12,12 @@ I am the faculty advisor for my middle school’s GSA. I have been for years
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -12,10 +12,12 @@ This blog started on bearblog.dev as cassie.land. Bearblog is a great platform,
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/categories/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -12,10 +12,12 @@ My relationship with my bisexuality has been fraught. I can pinpoint in specific
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -3,8 +3,8 @@
|
||||
--text: #231f20;
|
||||
--background: #f4f4f4;
|
||||
--background-shade: #e8e8e8;
|
||||
--blue: #1291A9;
|
||||
--claret: #0e4e60;
|
||||
--blue: #117A92;
|
||||
--claret: #117A92;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
@ -12,8 +12,8 @@
|
||||
--text: #f4f4f4;
|
||||
--background: #231f20;
|
||||
--background-shade: #1f1b1c;
|
||||
--blue: #1bbbdb;
|
||||
--claret: #5da8bb;
|
||||
--blue: #1595B2;
|
||||
--claret: #1595B2;
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ body {
|
||||
color: var(--text);
|
||||
font-family: 'Domaine Text', serif;
|
||||
line-height: 1.5;
|
||||
max-width: 800px;
|
||||
max-width: 900px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 5%;
|
||||
@ -43,6 +43,41 @@ sup {
|
||||
}
|
||||
}
|
||||
|
||||
.highlight {
|
||||
max-width: 900px;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.highlight pre {
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
padding: 0.5% 1.5%;
|
||||
}
|
||||
|
||||
code {
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid var(--blue);
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
table-layout: auto;
|
||||
|
||||
th {
|
||||
border: 1px solid var(--blue);
|
||||
}
|
||||
|
||||
tr {
|
||||
|
||||
}
|
||||
|
||||
td {
|
||||
border: 1px solid var(--blue);
|
||||
padding: 5px 10px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* header */
|
||||
header {
|
||||
display: flex;
|
||||
@ -282,10 +317,7 @@ nav ul {
|
||||
}
|
||||
|
||||
.page pre {
|
||||
margin: 0;
|
||||
padding: 2.5% 5%;
|
||||
background-color: var(--background-shade);
|
||||
font-family: monospace;
|
||||
|
||||
}
|
||||
|
||||
.page article h2, h3 {
|
||||
@ -293,6 +325,7 @@ nav ul {
|
||||
color: var(--claret);
|
||||
font-family: 'Domaine Display', Georgia, serif;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.page article hr {
|
||||
|
183
public/css/syntax.css
Normal file
183
public/css/syntax.css
Normal file
@ -0,0 +1,183 @@
|
||||
/* Light */
|
||||
/* Generated using: hugo gen chromastyles --style=catppuccin-latte */
|
||||
|
||||
/* Background */ .bg, code { color:#4c4f69;background-color:#eff1f5; }
|
||||
/* PreWrapper */ .chroma { color:#4c4f69;background-color:#eff1f5; }
|
||||
/* Other */ .chroma .x { }
|
||||
/* Error */ .chroma .err { color:#d20f39 }
|
||||
/* CodeLine */ .chroma .cl { }
|
||||
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; }
|
||||
/* LineHighlight */ .chroma .hl { background-color:#bcc0cc }
|
||||
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1 }
|
||||
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8c8fa1 }
|
||||
/* Line */ .chroma .line { display:flex; }
|
||||
/* Keyword */ .chroma .k { color:#8839ef }
|
||||
/* KeywordConstant */ .chroma .kc { color:#fe640b }
|
||||
/* KeywordDeclaration */ .chroma .kd { color:#d20f39 }
|
||||
/* KeywordNamespace */ .chroma .kn { color:#179299 }
|
||||
/* KeywordPseudo */ .chroma .kp { color:#8839ef }
|
||||
/* KeywordReserved */ .chroma .kr { color:#8839ef }
|
||||
/* KeywordType */ .chroma .kt { color:#d20f39 }
|
||||
/* Name */ .chroma .n { }
|
||||
/* NameAttribute */ .chroma .na { color:#1e66f5 }
|
||||
/* NameClass */ .chroma .nc { color:#df8e1d }
|
||||
/* NameConstant */ .chroma .no { color:#df8e1d }
|
||||
/* NameDecorator */ .chroma .nd { color:#1e66f5;font-weight:bold }
|
||||
/* NameEntity */ .chroma .ni { color:#179299 }
|
||||
/* NameException */ .chroma .ne { color:#fe640b }
|
||||
/* NameLabel */ .chroma .nl { color:#04a5e5 }
|
||||
/* NameNamespace */ .chroma .nn { color:#fe640b }
|
||||
/* NameOther */ .chroma .nx { }
|
||||
/* NameProperty */ .chroma .py { color:#fe640b }
|
||||
/* NameTag */ .chroma .nt { color:#8839ef }
|
||||
/* NameBuiltin */ .chroma .nb { color:#04a5e5 }
|
||||
/* NameBuiltinPseudo */ .chroma .bp { color:#04a5e5 }
|
||||
/* NameVariable */ .chroma .nv { color:#dc8a78 }
|
||||
/* NameVariableClass */ .chroma .vc { color:#dc8a78 }
|
||||
/* NameVariableGlobal */ .chroma .vg { color:#dc8a78 }
|
||||
/* NameVariableInstance */ .chroma .vi { color:#dc8a78 }
|
||||
/* NameVariableMagic */ .chroma .vm { color:#dc8a78 }
|
||||
/* NameFunction */ .chroma .nf { color:#1e66f5 }
|
||||
/* NameFunctionMagic */ .chroma .fm { color:#1e66f5 }
|
||||
/* Literal */ .chroma .l { }
|
||||
/* LiteralDate */ .chroma .ld { }
|
||||
/* LiteralString */ .chroma .s { color:#40a02b }
|
||||
/* LiteralStringAffix */ .chroma .sa { color:#d20f39 }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color:#40a02b }
|
||||
/* LiteralStringChar */ .chroma .sc { color:#40a02b }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color:#1e66f5 }
|
||||
/* LiteralStringDoc */ .chroma .sd { color:#9ca0b0 }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color:#40a02b }
|
||||
/* LiteralStringEscape */ .chroma .se { color:#1e66f5 }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { color:#9ca0b0 }
|
||||
/* LiteralStringInterpol */ .chroma .si { color:#40a02b }
|
||||
/* LiteralStringOther */ .chroma .sx { color:#40a02b }
|
||||
/* LiteralStringRegex */ .chroma .sr { color:#179299 }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color:#40a02b }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color:#40a02b }
|
||||
/* LiteralNumber */ .chroma .m { color:#fe640b }
|
||||
/* LiteralNumberBin */ .chroma .mb { color:#fe640b }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color:#fe640b }
|
||||
/* LiteralNumberHex */ .chroma .mh { color:#fe640b }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color:#fe640b }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color:#fe640b }
|
||||
/* LiteralNumberOct */ .chroma .mo { color:#fe640b }
|
||||
/* Operator */ .chroma .o { color:#04a5e5;font-weight:bold }
|
||||
/* OperatorWord */ .chroma .ow { color:#04a5e5;font-weight:bold }
|
||||
/* Punctuation */ .chroma .p { }
|
||||
/* Comment */ .chroma .c { color:#9ca0b0;font-style:italic }
|
||||
/* CommentHashbang */ .chroma .ch { color:#9ca0b0;font-style:italic }
|
||||
/* CommentMultiline */ .chroma .cm { color:#9ca0b0;font-style:italic }
|
||||
/* CommentSingle */ .chroma .c1 { color:#9ca0b0;font-style:italic }
|
||||
/* CommentSpecial */ .chroma .cs { color:#9ca0b0;font-style:italic }
|
||||
/* CommentPreproc */ .chroma .cp { color:#9ca0b0;font-style:italic }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color:#9ca0b0;font-weight:bold;font-style:italic }
|
||||
/* Generic */ .chroma .g { }
|
||||
/* GenericDeleted */ .chroma .gd { color:#d20f39;background-color:#ccd0da }
|
||||
/* GenericEmph */ .chroma .ge { font-style:italic }
|
||||
/* GenericError */ .chroma .gr { color:#d20f39 }
|
||||
/* GenericHeading */ .chroma .gh { color:#fe640b;font-weight:bold }
|
||||
/* GenericInserted */ .chroma .gi { color:#40a02b;background-color:#ccd0da }
|
||||
/* GenericOutput */ .chroma .go { }
|
||||
/* GenericPrompt */ .chroma .gp { }
|
||||
/* GenericStrong */ .chroma .gs { font-weight:bold }
|
||||
/* GenericSubheading */ .chroma .gu { color:#fe640b;font-weight:bold }
|
||||
/* GenericTraceback */ .chroma .gt { color:#d20f39 }
|
||||
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
|
||||
/* TextWhitespace */ .chroma .w { }
|
||||
|
||||
/* Dark */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
/* Generated using: hugo gen chromastyles --style=doom-one2 */
|
||||
|
||||
/* Background */ .bg, code { color:#b0c4de;background-color:#282c34; }
|
||||
/* PreWrapper */ .chroma { color:#b0c4de;background-color:#282c34; }
|
||||
/* Other */ .chroma .x { }
|
||||
/* Error */ .chroma .err { }
|
||||
/* CodeLine */ .chroma .cl { }
|
||||
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; }
|
||||
/* LineHighlight */ .chroma .hl { background-color:#3d4148 }
|
||||
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f }
|
||||
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f }
|
||||
/* Line */ .chroma .line { display:flex; }
|
||||
/* Keyword */ .chroma .k { color:#76a9f9 }
|
||||
/* KeywordConstant */ .chroma .kc { color:#e5c07b }
|
||||
/* KeywordDeclaration */ .chroma .kd { color:#76a9f9 }
|
||||
/* KeywordNamespace */ .chroma .kn { color:#76a9f9 }
|
||||
/* KeywordPseudo */ .chroma .kp { color:#76a9f9 }
|
||||
/* KeywordReserved */ .chroma .kr { color:#76a9f9 }
|
||||
/* KeywordType */ .chroma .kt { color:#e5c07b }
|
||||
/* Name */ .chroma .n { color:#aa89ea }
|
||||
/* NameAttribute */ .chroma .na { color:#cebc3a }
|
||||
/* NameClass */ .chroma .nc { color:#ca72ff }
|
||||
/* NameConstant */ .chroma .no { color:#aa89ea;font-weight:bold }
|
||||
/* NameDecorator */ .chroma .nd { color:#e5c07b }
|
||||
/* NameEntity */ .chroma .ni { color:#bda26f }
|
||||
/* NameException */ .chroma .ne { color:#fd7474;font-weight:bold }
|
||||
/* NameLabel */ .chroma .nl { color:#f5a40d }
|
||||
/* NameNamespace */ .chroma .nn { color:#ca72ff }
|
||||
/* NameOther */ .chroma .nx { color:#aa89ea }
|
||||
/* NameProperty */ .chroma .py { color:#cebc3a }
|
||||
/* NameTag */ .chroma .nt { color:#76a9f9 }
|
||||
/* NameBuiltin */ .chroma .nb { color:#e5c07b }
|
||||
/* NameBuiltinPseudo */ .chroma .bp { color:#e5c07b }
|
||||
/* NameVariable */ .chroma .nv { color:#dcaeea }
|
||||
/* NameVariableClass */ .chroma .vc { color:#dcaeea }
|
||||
/* NameVariableGlobal */ .chroma .vg { color:#dcaeea;font-weight:bold }
|
||||
/* NameVariableInstance */ .chroma .vi { color:#e06c75 }
|
||||
/* NameVariableMagic */ .chroma .vm { color:#dcaeea }
|
||||
/* NameFunction */ .chroma .nf { color:#00b1f7 }
|
||||
/* NameFunctionMagic */ .chroma .fm { color:#00b1f7 }
|
||||
/* Literal */ .chroma .l { color:#98c379 }
|
||||
/* LiteralDate */ .chroma .ld { color:#98c379 }
|
||||
/* LiteralString */ .chroma .s { color:#98c379 }
|
||||
/* LiteralStringAffix */ .chroma .sa { color:#98c379 }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color:#98c379 }
|
||||
/* LiteralStringChar */ .chroma .sc { color:#98c379 }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color:#98c379 }
|
||||
/* LiteralStringDoc */ .chroma .sd { color:#7e97c3 }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color:#63c381 }
|
||||
/* LiteralStringEscape */ .chroma .se { color:#d26464;font-weight:bold }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { color:#98c379 }
|
||||
/* LiteralStringInterpol */ .chroma .si { color:#98c379 }
|
||||
/* LiteralStringOther */ .chroma .sx { color:#70b33f }
|
||||
/* LiteralStringRegex */ .chroma .sr { color:#56b6c2 }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color:#98c379 }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color:#56b6c2 }
|
||||
/* LiteralNumber */ .chroma .m { color:#d19a66 }
|
||||
/* LiteralNumberBin */ .chroma .mb { color:#d19a66 }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color:#d19a66 }
|
||||
/* LiteralNumberHex */ .chroma .mh { color:#d19a66 }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color:#d19a66 }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color:#d19a66 }
|
||||
/* LiteralNumberOct */ .chroma .mo { color:#d19a66 }
|
||||
/* Operator */ .chroma .o { color:#54b1c7 }
|
||||
/* OperatorWord */ .chroma .ow { color:#b756ff;font-weight:bold }
|
||||
/* Punctuation */ .chroma .p { color:#abb2bf }
|
||||
/* Comment */ .chroma .c { color:#8a93a5;font-style:italic }
|
||||
/* CommentHashbang */ .chroma .ch { color:#8a93a5;font-weight:bold;font-style:italic }
|
||||
/* CommentMultiline */ .chroma .cm { color:#8a93a5;font-style:italic }
|
||||
/* CommentSingle */ .chroma .c1 { color:#8a93a5;font-style:italic }
|
||||
/* CommentSpecial */ .chroma .cs { color:#8a93a5;font-style:italic }
|
||||
/* CommentPreproc */ .chroma .cp { color:#8a93a5;font-style:italic }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color:#8a93a5;font-style:italic }
|
||||
/* Generic */ .chroma .g { }
|
||||
/* GenericDeleted */ .chroma .gd { }
|
||||
/* GenericEmph */ .chroma .ge { font-style:italic }
|
||||
/* GenericError */ .chroma .gr { }
|
||||
/* GenericHeading */ .chroma .gh { color:#a2cbff;font-weight:bold }
|
||||
/* GenericInserted */ .chroma .gi { color:#a6e22e }
|
||||
/* GenericOutput */ .chroma .go { color:#a6e22e }
|
||||
/* GenericPrompt */ .chroma .gp { color:#a6e22e }
|
||||
/* GenericStrong */ .chroma .gs { font-weight:bold }
|
||||
/* GenericSubheading */ .chroma .gu { color:#a2cbff }
|
||||
/* GenericTraceback */ .chroma .gt { color:#a2cbff }
|
||||
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
|
||||
/* TextWhitespace */ .chroma .w { }
|
||||
|
||||
|
||||
}
|
BIN
public/css/syntax_dark.css
Normal file
BIN
public/css/syntax_dark.css
Normal file
Binary file not shown.
BIN
public/css/syntax_light.css
Normal file
BIN
public/css/syntax_light.css
Normal file
Binary file not shown.
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-02-23T00:00:00+00:00">February 23, 2024</time>
|
||||
<time datetime="2024-02-23T00:00:00+00:00">23 February 2024</time>
|
||||
|
||||
<h1>Early thoughts on Pokémon Unbound</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-12-28T00:00:00+00:00">December 28, 2023</time>
|
||||
<time datetime="2023-12-28T00:00:00+00:00">28 December 2023</time>
|
||||
|
||||
<h1>LITR 308 Emily Dickinson & Queer Theory</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ In case it was not clear, I am not a professional. I am a blockhead who likes to
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ In case it was not clear, I am not a professional. I am a blockhead who likes to
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2025-07-24T00:00:00+00:00">July 24, 2025</time>
|
||||
<time datetime="2025-07-24T00:00:00+00:00">24 July 2025</time>
|
||||
|
||||
<h1>FX chains by the utterly inept</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-01-07T00:00:00+00:00">January 7, 2024</time>
|
||||
<time datetime="2024-01-07T00:00:00+00:00">7 January 2024</time>
|
||||
|
||||
<h1>hate for the island</h1>
|
||||
|
||||
|
158
public/hosting-a-podcast-for-pennies-a-day/index.html
Normal file
158
public/hosting-a-podcast-for-pennies-a-day/index.html
Normal file
@ -0,0 +1,158 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us" dir="ltr">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<meta name="description" content="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 and maintain them for about $12/yr (not including the cost of the domains).
|
||||
">
|
||||
|
||||
<title>Hosting a podcast for pennies a day | cassie.ink</title>
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>
|
||||
<a href="http://localhost:1313/">
|
||||
cassie
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-droplet"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.708 2.372a2.382 2.382 0 0 0 -.71 .686l-4.892 7.26c-1.981 3.314 -1.22 7.466 1.767 9.882c2.969 2.402 7.286 2.402 10.254 0c2.987 -2.416 3.748 -6.569 1.795 -9.836l-4.919 -7.306c-.722 -1.075 -2.192 -1.376 -3.295 -.686z" /></svg>
|
||||
ink
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/about/">About</a>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-current="true" class="ancestor" href="/posts/">Posts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/tags/week-notes/">Week Notes</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
</header>
|
||||
<main class='page'>
|
||||
|
||||
<article>
|
||||
|
||||
<time datetime="2025-08-11T00:00:00+00:00">11 August 2025</time>
|
||||
|
||||
<h1>Hosting a podcast for pennies a day</h1>
|
||||
|
||||
<div class="barcode">
|
||||
hosting-a-podcast-for-pennies-a-day
|
||||
</div>
|
||||
|
||||
<p>I’ve been podcasting on and off for over ten years now — all shows that I’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’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 install<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, so here’s how I migrated the sites to Hugo and maintain them for about $12/yr (not including the cost of the domains).</p>
|
||||
<p>I chose <a href="https://gohugo.io/">Hugo</a> because I understand how to use it. I’m sure you could make this work with other static site generators; there’s <a href="https://eleventy-plugin-podcaster.com/">an 11ty plugin</a> out there too which is far more advanced than what I’ve set up. But I built this myself with minor knowledge of how to make a website. It’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>
|
||||
<h2 id="setting-up-a-podcast-feed-in-hugo">Setting up a podcast feed in Hugo</h2>
|
||||
<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.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> It’s a good base to start from; we’re basically going to use that and inject in the <a href="https://podcasters.apple.com/support/823-podcast-requirements">basic podcast tags</a> as well as some additional ones for newer features like chapter support.</p>
|
||||
<p><strong>Note:</strong> Hugo has updated the default RSS feed template since I set this up. I’m continuing to use <a href="https://github.com/gohugoio/hugo/blob/release-0.115.0/tpl/tplimpl/embedded/templates/_default/rss.xml">the old one</a> as my base, but I’m going through the changes I made step-by-step, so you can retro fit my edits to <a href="https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/rss.xml">the newer template</a>. Or you can just wholesale copy mine; it’s older, but it works. You can jump to the finished feed by clicking here.</p>
|
||||
<h3 id="creating-a-custom-feed-template">Creating a custom feed template</h3>
|
||||
<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" style="color:#f8f8f2;background-color:#433e56;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-TOML" data-lang="TOML"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>[outputs]
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>home = [<span style="color:#1bc5e0">"HTML"</span>, <span style="color:#1bc5e0">"RSS"</span>, <span style="color:#1bc5e0">"podcast"</span> ] <span style="color:#b0bec5"># Sets up podcast feed</span>
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span>
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span>[outputFormats]
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span> [outputFormats.podcast]
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6</span><span> MediaType = <span style="color:#1bc5e0">"application/rss+xml"</span>
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7</span><span> BaseName = <span style="color:#1bc5e0">"feed"</span> <span style="color:#b0bec5"># Your feed will be located at example.org/feed.xml. If you edit this value, you need to edit line 43 in layouts/index.podcast.xml.</span>
|
||||
</span></span></code></pre></div><p>This tells Hugo to use the new feed template that we’re going to create. Now, let’s work on the 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. We’re going to start by changing the <code>rss</code> tag to add podcasting namespaces. Find…</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#433e56;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
</span></span></code></pre></div><p>and replace it with…</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#433e56;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><rss version="2.0"
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> xmlns:podcast="https://podcastindex.org/namespace/1.0"
|
||||
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span> xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
</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’s take a look at the first few items in <code><channel></code> tag. Think of this as the show information. We’ll get to the episodes later in the <code><item</code> tag. Hugo will, by default, use the site information you provided in your contact file; we’re going to override that. I hard-coded these values, but you probably could declare them in your config file. I don’t really plan on changing the name of my show, though, so it’s fine to hard code them. Editing the template is just as easy as editing your config template.</p>
|
||||
<div class="footnotes" role="doc-endnotes">
|
||||
<hr>
|
||||
<ol>
|
||||
<li id="fn:1">
|
||||
<p>I think about bringing Pitch & 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’t mention because episodes of it still exist online (outside of my control) and I’d rather not attach myself to them. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn:2">
|
||||
<p>WordPress is a bloated monster that constantly has security patches and the founder is super problematic. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn:3">
|
||||
<p>This template has been updated since I set up my feeds; I’m sticking with the old version. <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/podcasting/">Podcasting</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<ul class="social">
|
||||
<li>
|
||||
<a href="mailto:me@cassie.ink" aria-label="Email">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mail"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z" /><path d="M3 7l9 6l9 -6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/index.xml" aria-label="RSS">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f26522" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-rss">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="me" href="https://social.lol/@cass" aria-label="Mastodon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#6364ff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-mastodon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944z" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://listenbrainz.org/user/babyspace/" aria-label="Listen Brainz">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#eb743b" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-metabrainz"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7v10l7 4v-18z" /><path d="M21 7v10l-7 4v-18z" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="forget">
|
||||
don't forget to have fun.
|
||||
</p>
|
||||
<p class="copyright">
|
||||
all errors © cassie
|
||||
</p>
|
||||
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
509
public/hugo-podcast/index.html
Normal file
509
public/hugo-podcast/index.html
Normal file
@ -0,0 +1,509 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us" dir="ltr">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<meta name="description" content="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).
|
||||
">
|
||||
|
||||
<title>Using Hugo to generate a podcast feed | cassie.ink</title>
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>
|
||||
<a href="http://localhost:1313/">
|
||||
cassie
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-droplet"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.708 2.372a2.382 2.382 0 0 0 -.71 .686l-4.892 7.26c-1.981 3.314 -1.22 7.466 1.767 9.882c2.969 2.402 7.286 2.402 10.254 0c2.987 -2.416 3.748 -6.569 1.795 -9.836l-4.919 -7.306c-.722 -1.075 -2.192 -1.376 -3.295 -.686z" /></svg>
|
||||
ink
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/about/">About</a>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-current="true" class="ancestor" href="/posts/">Posts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/tags/week-notes/">Week Notes</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
</header>
|
||||
<main class='page'>
|
||||
|
||||
<article>
|
||||
|
||||
<time datetime="2025-08-12T00:00:00+00:00">12 August 2025</time>
|
||||
|
||||
<h1>Using Hugo to generate a podcast feed</h1>
|
||||
|
||||
<div class="barcode">
|
||||
hugo-podcast
|
||||
</div>
|
||||
|
||||
<p>I’ve been podcasting on and off for over ten years now — all shows that I’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’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 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 because I understand how to use it. I’m sure you could make this work with other static site generators. There’s <a href="https://eleventy-plugin-podcaster.com/">an 11ty plugin</a> 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).</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’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’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’re going to work from Hugo’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’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">"HTML"</span><span class="p">,</span> <span class="s2">"RSS"</span><span class="p">,</span> <span class="s2">"podcast"</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">"application/rss+xml"</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">"feed"</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’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">""</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">""</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">"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"</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"><</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">"2.0"</span> <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">"http://www.w3.org/2005/Atom"</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">35</span><span class="cl"> <span class="p"><</span><span class="nt">channel</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">36</span><span class="cl"> <span class="p"><</span><span class="nt">title</span><span class="p">></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"></</span><span class="nt">title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">37</span><span class="cl"> <span class="p"><</span><span class="nt">link</span><span class="p">></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"></</span><span class="nt">link</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">38</span><span class="cl"> <span class="p"><</span><span class="nt">description</span><span class="p">></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"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">39</span><span class="cl"> <span class="p"><</span><span class="nt">generator</span><span class="p">></span>Hugo<span class="p"></</span><span class="nt">generator</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">40</span><span class="cl"> <span class="p"><</span><span class="nt">language</span><span class="p">></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"></</span><span class="nt">language</span><span class="p">></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"><</span><span class="nt">managingEditor</span><span class="p">></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"></</span><span class="nt">managingEditor</span><span class="p">></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"><</span><span class="nt">webMaster</span><span class="p">></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"></</span><span class="nt">webMaster</span><span class="p">></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"><</span><span class="nt">copyright</span><span class="p">></span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p"></</span><span class="nt">copyright</span><span class="p">></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"><</span><span class="nt">lastBuildDate</span><span class="p">></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">"Mon, 02 Jan 2006 15:04:05 -0700"</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"></</span><span class="nt">lastBuildDate</span><span class="p">></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">"RSS"</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">"<atom:link href=%q rel=\"self\" type=%q />"</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"><</span><span class="nt">item</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">50</span><span class="cl"> <span class="p"><</span><span class="nt">title</span><span class="p">></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"></</span><span class="nt">title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">51</span><span class="cl"> <span class="p"><</span><span class="nt">link</span><span class="p">></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"></</span><span class="nt">link</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">52</span><span class="cl"> <span class="p"><</span><span class="nt">pubDate</span><span class="p">></span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">"Mon, 02 Jan 2006 15:04:05 -0700"</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"></</span><span class="nt">pubDate</span><span class="p">></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"><</span><span class="nt">author</span><span class="p">></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"></</span><span class="nt">author</span><span class="p">></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"><</span><span class="nt">guid</span><span class="p">></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"></</span><span class="nt">guid</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">55</span><span class="cl"> <span class="p"><</span><span class="nt">description</span><span class="p">></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"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">56</span><span class="cl"> <span class="p"></</span><span class="nt">item</span><span class="p">></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"></</span><span class="nt">channel</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">59</span><span class="cl"><span class="p"></</span><span class="nt">rss</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>We’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"><</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">"2.0"</span> <span class="na">xmlns:atom</span><span class="o">=</span><span class="s">"http://www.w3.org/2005/Atom"</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>and replace it with…</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"><</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">"2.0"</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">"http://www.w3.org/2005/Atom"</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">"http://www.itunes.com/dtds/podcast-1.0.dtd"</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">"https://podcastindex.org/namespace/1.0"</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">"http://purl.org/rss/1.0/modules/content/"</span><span class="p">></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’t be able to recognize the podcast-specific tags we’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’re also adding supporting for <a href="https://podcasting2.org/docs/podcast-namespace">Podcast Index’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’s take a look at the first few items in <code><channel></code> tag. Think of this as the basic show information; we’ll get to the episodes later in the <code><item></code> tag. Here’s what Hugo has by default at the start of the <code><channel></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"><</span><span class="nt">title</span><span class="p">></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"></</span><span class="nt">title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="p"><</span><span class="nt">link</span><span class="p">></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"></</span><span class="nt">link</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p"><</span><span class="nt">description</span><span class="p">></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"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">4</span><span class="cl"> <span class="p"><</span><span class="nt">generator</span><span class="p">></span>Hugo<span class="p"></</span><span class="nt">generator</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">5</span><span class="cl"> <span class="p"><</span><span class="nt">language</span><span class="p">></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"></</span><span class="nt">language</span><span class="p">></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"><</span><span class="nt">managingEditor</span><span class="p">></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"></</span><span class="nt">managingEditor</span><span class="p">></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"><</span><span class="nt">webMaster</span><span class="p">></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"></</span><span class="nt">webMaster</span><span class="p">></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"><</span><span class="nt">copyright</span><span class="p">></span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p"></</span><span class="nt">copyright</span><span class="p">></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"><</span><span class="nt">lastBuildDate</span><span class="p">></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">"Mon, 02 Jan 2006 15:04:05 -0700"</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"></</span><span class="nt">lastBuildDate</span><span class="p">></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’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’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"><</span><span class="nt">description</span><span class="p">></span>Just another podcast feed.<span class="p"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>Now, we’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’t want your full first and last name out there, don’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"><</span><span class="nt">itunes:author</span><span class="p">></span>John Podcast<span class="p"></</span><span class="nt">itunes:author</span><span class="p">></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’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"><</span><span class="nt">itunes:type</span><span class="p">></span>episodic<span class="p"></</span><span class="nt">itunes:type</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>The <code>itunes:image</code> tag is where you’ll specify your show’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"><</span><span class="nt">itunes:image</span> <span class="na">href</span><span class="o">=</span><span class="s">"https://yourwebsite.com/cover.png"</span> <span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p"><</span><span class="nt">image</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p"><</span><span class="nt">url</span><span class="p">></span>https://yourwebsite.com/cover.png<span class="p"></</span><span class="nt">url</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p"></</span><span class="nt">image</span><span class="p">></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’s assume you’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"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Leisure"</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Video Games"</span><span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="p"></</span><span class="nt">itunes:category</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>If your show is in a category with an ampersand (&), 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"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Society &amp; Culture"</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Documentary"</span> <span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="p"></</span><span class="nt">itunes:category</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Health &amp; Fitness"</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">5</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Mental Health"</span> <span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p"></</span><span class="nt">itunes:category</span><span class="p">></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’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’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"><</span><span class="nt">itunes:explicit</span><span class="p">></span>true<span class="p"></</span><span class="nt">itunes:explicit</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>I’m not actually sure if this part is required, but I have it and it doesn’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"><</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">"https://yourwebsite.com/feed.xml"</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">"self"</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">"application/rss+xml"</span> <span class="p">/></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’re all set on the <code>channel</code> information. Now, let’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’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’s a little more complicated. The content in the <code>channel</code> tag is relatively constant — you’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’re going to have to create some custom parameters that we will then specify in the episode content files.</p>
|
||||
<p>Here’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"><</span><span class="nt">item</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">2</span><span class="cl"> <span class="p"><</span><span class="nt">title</span><span class="p">></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"></</span><span class="nt">title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">3</span><span class="cl"> <span class="p"><</span><span class="nt">link</span><span class="p">></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"></</span><span class="nt">link</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">4</span><span class="cl"> <span class="p"><</span><span class="nt">pubDate</span><span class="p">></span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">"Mon, 02 Jan 2006 15:04:05 -0700"</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"></</span><span class="nt">pubDate</span><span class="p">></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"><</span><span class="nt">author</span><span class="p">></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"></</span><span class="nt">author</span><span class="p">></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"><</span><span class="nt">guid</span><span class="p">></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"></</span><span class="nt">guid</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">7</span><span class="cl"> <span class="p"><</span><span class="nt">description</span><span class="p">></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"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">8</span><span class="cl"> <span class="p"></</span><span class="nt">item</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>We’re off to a start, but, of course, there’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’s set to your post’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’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"><</span><span class="nt">description</span><span class="p">></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"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>OK — now let’s dig into actually making these podcast episodes. We’re going to be slotting in a lot of custom parameters, which we’ll eventually flesh out when we get to our post template. Let’s start with the episode title. We’ve already specified that in the <code>title</code> tag, but there’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"><</span><span class="nt">itunes:title</span><span class="p">></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"></</span><span class="nt">itunes:title</span><span class="p">></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’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"><</span><span class="nt">itunes:episodeType</span><span class="p">></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"></</span><span class="nt">itunes:episodeType</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>We’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’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’s tagline, a preview of its contents. Not all podcast apps surface this, but some do. We’re going to use <code>.Summary</code> here; we’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"><</span><span class="nt">itunes:summary</span><span class="p">></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"></</span><span class="nt">itunes:summary</span><span class="p">></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’ll do this with two custom parameters: <code>episodeLength</code> (a bit of a misnomer — it’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"><</span><span class="nt">enclosure</span> <span class="na">length</span><span class="o">=</span><span class="s">"</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">"</span> <span class="na">type</span><span class="o">=</span><span class="s">"audio/mpeg"</span> <span class="na">url</span><span class="o">=</span><span class="s">"</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">"</span> <span class="p">/></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"><</span><span class="nt">itunes:duration</span><span class="p">></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"></</span><span class="nt">itunes:duration</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>I’m choosing to remain consistent with the code’s syntax; I wish it was <code>enclosure size</code> because duration and length are too interchangeable, but it’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’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"><</span><span class="nt">itunes:explicit</span><span class="p">></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"></</span><span class="nt">itunes:explicit</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>We’ll also need to specify an episode and season number. If your show is episodic, we’ll just always use season 1, and podcatchers shouldn’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’t use seasons right now, but I’d like to have the opportunity in the future, so I’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"><</span><span class="nt">itunes:episode</span><span class="p">></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"></</span><span class="nt">itunes:episode</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p"><</span><span class="nt">itunes:season</span><span class="p">></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"></</span><span class="nt">itunes:season</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>Now, we’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’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’ll use a standard URL format. If it’s <code>false</code>, this tag won’t render. If we didn’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"><</span><span class="nt">podcast:chapters</span> <span class="na">url</span><span class="o">=</span><span class="s">"</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"</span> <span class="na">type</span><span class="o">=</span><span class="s">"application/json+chapters"</span> <span class="p">/></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’s a great web-based tool here</a>.</p>
|
||||
<p>We’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"><</span><span class="nt">podcast:transcript</span> <span class="na">url</span><span class="o">=</span><span class="s">"</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"</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/vtt"</span> <span class="p">/></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’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’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’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">""</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">""</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">"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"</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"><</span><span class="nt">rss</span> <span class="na">version</span><span class="o">=</span><span class="s">"2.0"</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">"http://www.w3.org/2005/Atom"</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">"http://www.itunes.com/dtds/podcast-1.0.dtd"</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">"https://podcastindex.org/namespace/1.0"</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">"http://purl.org/rss/1.0/modules/content/"</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">39</span><span class="cl"> <span class="p"><</span><span class="nt">channel</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">40</span><span class="cl"> <span class="p"><</span><span class="nt">title</span><span class="p">></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"></</span><span class="nt">title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">41</span><span class="cl"> <span class="p"><</span><span class="nt">link</span><span class="p">></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"></</span><span class="nt">link</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">42</span><span class="cl"> <span class="p"><</span><span class="nt">description</span><span class="p">></span>Just another podcast feed.<span class="p"></</span><span class="nt">description</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">43</span><span class="cl"> <span class="p"><</span><span class="nt">generator</span><span class="p">></span>Hugo<span class="p"></</span><span class="nt">generator</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">44</span><span class="cl"> <span class="p"><</span><span class="nt">language</span><span class="p">></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"></</span><span class="nt">language</span><span class="p">></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"><</span><span class="nt">copyright</span><span class="p">></span><span class="cp">{{</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="p"></</span><span class="nt">copyright</span><span class="p">></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"><</span><span class="nt">itunes:author</span><span class="p">></span>John Podcast<span class="p"></</span><span class="nt">itunes:author</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">48</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:type</span><span class="p">></span>episodic<span class="p"></</span><span class="nt">itunes:type</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">49</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:image</span> <span class="na">href</span><span class="o">=</span><span class="s">"https://yourwebsite.com/cover.png"</span> <span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">50</span><span class="cl"> <span class="p"><</span><span class="nt">image</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">51</span><span class="cl"> <span class="p"><</span><span class="nt">url</span><span class="p">></span>https://yourwebsite.com/cover.png<span class="p"></</span><span class="nt">url</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">52</span><span class="cl"> <span class="p"></</span><span class="nt">image</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">53</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Leisure"</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">54</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:category</span> <span class="na">text</span><span class="o">=</span><span class="s">"Video Games"</span><span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">55</span><span class="cl"> <span class="p"></</span><span class="nt">itunes:category</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">56</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:explicit</span><span class="p">></span>true<span class="p"></</span><span class="nt">itunes:explicit</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">57</span><span class="cl"> <span class="p"><</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">"https://yourwebsite.com/feed.xml"</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">"self"</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">"application/rss+xml"</span> <span class="p">/></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"><</span><span class="nt">lastBuildDate</span><span class="p">></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">"Mon, 02 Jan 2006 15:04:05 -0700"</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"></</span><span class="nt">lastBuildDate</span><span class="p">></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">"RSS"</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">"<atom:link href=%q rel=\"self\" type=%q />"</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"><</span><span class="nt">item</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">68</span><span class="cl"> <span class="p"><</span><span class="nt">title</span><span class="p">></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"></</span><span class="nt">title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">69</span><span class="cl"> <span class="p"><</span><span class="nt">link</span><span class="p">></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"></</span><span class="nt">link</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">70</span><span class="cl"> <span class="p"><</span><span class="nt">pubDate</span><span class="p">></span><span class="cp">{{</span><span class="w"> </span><span class="na">.PublishDate.Format</span><span class="w"> </span><span class="s">"Mon, 02 Jan 2006 15:04:05 -0700"</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"></</span><span class="nt">pubDate</span><span class="p">></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"><</span><span class="nt">author</span><span class="p">></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"></</span><span class="nt">author</span><span class="p">></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"><</span><span class="nt">guid</span><span class="p">></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"></</span><span class="nt">guid</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">73</span><span class="cl"> <span class="p"><</span><span class="nt">description</span><span class="p">></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"></</span><span class="nt">description</span><span class="p">></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"><</span><span class="nt">itunes:title</span><span class="p">></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"></</span><span class="nt">itunes:title</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">76</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:episodeType</span><span class="p">></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"></</span><span class="nt">itunes:episodeType</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">77</span><span class="cl"> <span class="p"><</span><span class="nt">content:encoded</span><span class="p">></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"></</span><span class="nt">content:encoded</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">78</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:subtitle</span><span class="p">></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"></</span><span class="nt">itunes:subtitle</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">79</span><span class="cl"> <span class="p"><</span><span class="nt">enclosure</span> <span class="na">length</span><span class="o">=</span><span class="s">"</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">"</span> <span class="na">type</span><span class="o">=</span><span class="s">"audio/mpeg"</span> <span class="na">url</span><span class="o">=</span><span class="s">"</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">"</span> <span class="p">/></span>
|
||||
</span></span><span class="line"><span class="ln">80</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:duration</span><span class="p">></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"></</span><span class="nt">itunes:duration</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">81</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:explicit</span><span class="p">></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"></</span><span class="nt">itunes:explicit</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">82</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:episode</span><span class="p">></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"></</span><span class="nt">itunes:episode</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">83</span><span class="cl"> <span class="p"><</span><span class="nt">itunes:season</span><span class="p">></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"></</span><span class="nt">itunes:season</span><span class="p">></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"><</span><span class="nt">podcast:chapters</span> <span class="na">url</span><span class="o">=</span><span class="s">"</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"</span> <span class="na">type</span><span class="o">=</span><span class="s">"application/json+chapters"</span> <span class="p">/></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"><</span><span class="nt">podcast:transcript</span> <span class="na">url</span><span class="o">=</span><span class="s">"</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"</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/vtt"</span> <span class="p">/></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"></</span><span class="nt">item</span><span class="p">></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"></</span><span class="nt">channel</span><span class="p">></span>
|
||||
</span></span><span class="line"><span class="ln">95</span><span class="cl"><span class="p"></</span><span class="nt">rss</span><span class="p">></span>
|
||||
</span></span></code></pre></div><p>Now, we’ll need to work on creating episodes.</p>
|
||||
<h2 id="episode-template">Episode Template</h2>
|
||||
<p>Inside Hugo’s <code>content</code> folder, we’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’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’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’ll need to include the custom parameters that we created in our feed. Let’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">"My First Post"</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’s address the <code>itunes:subtitle</code> tag, which is currently set to pull Hugo’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’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">"My First Post"</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">'This is my episode subtitle!'</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’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’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…</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">"My First Post"</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">'This is my episode subtitle!'</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’re ready to post a new episode, you’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’ll have to manually submit that feed to the major podcast directories, but that’s a one time deal; once you’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 & Play</a>. Do note that I’ve made a few customizations to the feed template for my show specifically — I’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 & Play. Both sites use custom themes; they’re bespoke and probably a bit janky, so I won’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 & Play’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’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 & 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’t mention because episodes of it still exist online (outside of my control) and I’d rather not attach myself to them. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn:2">
|
||||
<p>WordPress is a bloated monster that constantly has security patches, and the founder is super problematic. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn:3">
|
||||
<p>I’m failing the Byte-range support test right now, but that’s related to where my media is hosted, not the RSS feed — and in my testing, I’m not sure that’s actually a problem. <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/podcasting/">Podcasting</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<ul class="social">
|
||||
<li>
|
||||
<a href="mailto:me@cassie.ink" aria-label="Email">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mail"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z" /><path d="M3 7l9 6l9 -6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/index.xml" aria-label="RSS">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f26522" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-rss">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="me" href="https://social.lol/@cass" aria-label="Mastodon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#6364ff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-mastodon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944z" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://listenbrainz.org/user/babyspace/" aria-label="Listen Brainz">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#eb743b" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-metabrainz"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7v10l7 4v-18z" /><path d="M21 7v10l-7 4v-18z" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="forget">
|
||||
don't forget to have fun.
|
||||
</p>
|
||||
<p class="copyright">
|
||||
all errors © cassie
|
||||
</p>
|
||||
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -11,10 +11,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -48,7 +52,70 @@
|
||||
|
||||
<article>
|
||||
<time>
|
||||
6 August 2025
|
||||
11 August 2025
|
||||
</time>
|
||||
<h2><a href="/week-notes/028/">(week notes 28)</a></h2>
|
||||
<div class="barcode">
|
||||
week-notes/028
|
||||
</div>
|
||||
<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’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 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>: “Reason Why” and “Live in My Truth” were standouts, but in general, it lacked the thrill and voice of SOPHIE (RIP).</p>
|
||||
<div class="jump">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-bounce-right"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14.143 11.486a1 1 0 0 1 1.714 1.028c-1.502 2.505 -2.41 4.89 -2.87 7.65c-.16 .956 -1.448 1.15 -1.881 .283c-2.06 -4.12 -3.858 -4.976 -6.79 -3.998a1 1 0 1 1 -.632 -1.898c3.2 -1.067 5.656 -.373 7.803 2.623l.091 .13l.011 -.04c.522 -1.828 1.267 -3.55 2.273 -5.3l.28 -.478z" /><path d="M18 4a3 3 0 1 0 0 6a3 3 0 0 0 0 -6z" /></svg>
|
||||
<a href="/week-notes/028/" class="jump">
|
||||
Read More
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/week-notes/">Week-Notes</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
11 August 2025
|
||||
</time>
|
||||
<h2><a href="/hugo-podcast/">Using Hugo to generate a podcast feed</a></h2>
|
||||
<div class="barcode">
|
||||
hugo-podcast
|
||||
</div>
|
||||
<p>I’ve been podcasting on and off for over ten years now — all shows that I’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’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 install<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, so here’s how I migrated the sites to Hugo (which I then deploy with Cloudflare Pages).</p>
|
||||
<div class="jump">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-bounce-right"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14.143 11.486a1 1 0 0 1 1.714 1.028c-1.502 2.505 -2.41 4.89 -2.87 7.65c-.16 .956 -1.448 1.15 -1.881 .283c-2.06 -4.12 -3.858 -4.976 -6.79 -3.998a1 1 0 1 1 -.632 -1.898c3.2 -1.067 5.656 -.373 7.803 2.623l.091 .13l.011 -.04c.522 -1.828 1.267 -3.55 2.273 -5.3l.28 -.478z" /><path d="M18 4a3 3 0 1 0 0 6a3 3 0 0 0 0 -6z" /></svg>
|
||||
<a href="/hugo-podcast/" class="jump">
|
||||
Read More
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/podcasting/">Podcasting</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
10 August 2025
|
||||
</time>
|
||||
<h2><a href="/week-notes/027/">I want to fuck my computer (week notes 027)</a></h2>
|
||||
<div class="barcode">
|
||||
@ -131,69 +198,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
24 July 2025
|
||||
</time>
|
||||
<h2><a href="/fx-chains-by-the-utterly-inept/">FX chains by the utterly inept</a></h2>
|
||||
<div class="barcode">
|
||||
fx-chains-by-the-utterly-inept
|
||||
</div>
|
||||
<p>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.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
|
||||
<p>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 <em>how</em> I edit my audio. Maybe another time.</p>
|
||||
<div class="jump">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-bounce-right"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14.143 11.486a1 1 0 0 1 1.714 1.028c-1.502 2.505 -2.41 4.89 -2.87 7.65c-.16 .956 -1.448 1.15 -1.881 .283c-2.06 -4.12 -3.858 -4.976 -6.79 -3.998a1 1 0 1 1 -.632 -1.898c3.2 -1.067 5.656 -.373 7.803 2.623l.091 .13l.011 -.04c.522 -1.828 1.267 -3.55 2.273 -5.3l.28 -.478z" /><path d="M18 4a3 3 0 1 0 0 6a3 3 0 0 0 0 -6z" /></svg>
|
||||
<a href="/fx-chains-by-the-utterly-inept/" class="jump">
|
||||
Read More
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/podcasting/">Podcasting</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/audio/">Audio</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
18 July 2025
|
||||
</time>
|
||||
<h2><a href="/i-finished-lord-of-the-rings/">Climbing my personal Mount Doom (I finished reading Lord of the Rings)</a></h2>
|
||||
<div class="barcode">
|
||||
i-finished-lord-of-the-rings
|
||||
</div>
|
||||
<p>Peter Jackson’s <em>The Lord of the Rings: The Fellowship of the Ring</em> released in 2001 when I was seven years old. At the time, my media diet consisted mostly of <em>The Powerpuff Girls</em> and obsessively reading and re-reading the first four <em>Harry Potter</em> books.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> 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 <em>Fellowship</em> 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.</p>
|
||||
<div class="jump">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-bounce-right"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14.143 11.486a1 1 0 0 1 1.714 1.028c-1.502 2.505 -2.41 4.89 -2.87 7.65c-.16 .956 -1.448 1.15 -1.881 .283c-2.06 -4.12 -3.858 -4.976 -6.79 -3.998a1 1 0 1 1 -.632 -1.898c3.2 -1.067 5.656 -.373 7.803 2.623l.091 .13l.011 -.04c.522 -1.828 1.267 -3.55 2.273 -5.3l.28 -.478z" /><path d="M18 4a3 3 0 1 0 0 6a3 3 0 0 0 0 -6z" /></svg>
|
||||
<a href="/i-finished-lord-of-the-rings/" class="jump">
|
||||
Read More
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/literature/">Literature</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="all">
|
||||
<a href="/posts">
|
||||
view all
|
||||
|
142
public/index.xml
142
public/index.xml
File diff suppressed because one or more lines are too long
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-12-28T00:00:00+00:00">December 28, 2023</time>
|
||||
<time datetime="2023-12-28T00:00:00+00:00">28 December 2023</time>
|
||||
|
||||
<h1>Intentional Listening</h1>
|
||||
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"sources":["file:///F:/Websites/cassiedotink/themes/neverhungoveragain/assets/js/main.js"],"sourcesContent":["console.log('This site was generated by Hugo.');\n"],"mappings":";;AAAA,UAAQ,IAAI,kCAAkC;","names":[]}
|
||||
{"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":[]}
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-09-19T00:00:00+00:00">September 19, 2023</time>
|
||||
<time datetime="2023-09-19T00:00:00+00:00">19 September 2023</time>
|
||||
|
||||
<h1>LITR 250 Close Reading 2E</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-02-04T00:00:00+00:00">February 4, 2024</time>
|
||||
<time datetime="2024-02-04T00:00:00+00:00">4 February 2024</time>
|
||||
|
||||
<h1>Media Log (January 2024)</h1>
|
||||
|
||||
|
@ -10,10 +10,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -45,8 +47,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-08-31T00:00:00+00:00">August 31, 2023</time>
|
||||
<time datetime="2023-08-31T00:00:00+00:00">31 August 2023</time>
|
||||
|
||||
<h1>Media Log (August 2023)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@ Movies The Fast and the Furious - a rewatch of a movie I watched way too much as
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@ Movies The Fast and the Furious - a rewatch of a movie I watched way too much as
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-07-30T00:00:00+00:00">July 30, 2023</time>
|
||||
<time datetime="2023-07-30T00:00:00+00:00">30 July 2023</time>
|
||||
|
||||
<h1>Media Log (July 2023)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-03-10T00:00:00+00:00">March 10, 2024</time>
|
||||
<time datetime="2024-03-10T00:00:00+00:00">10 March 2024</time>
|
||||
|
||||
<h1>Moving my home server to a new chassis</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-02T00:00:00+00:00">August 2, 2024</time>
|
||||
<time datetime="2024-08-02T00:00:00+00:00">2 August 2024</time>
|
||||
|
||||
<h1>Moving to a rack mount setup</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ However, I am a very goal-oriented, reflective person. In late 2022, after years
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ However, I am a very goal-oriented, reflective person. In late 2022, after years
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-01-01T00:00:00+00:00">January 1, 2024</time>
|
||||
<time datetime="2024-01-01T00:00:00+00:00">1 January 2024</time>
|
||||
|
||||
<h1>my year in lists</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-07-31T00:00:00+00:00">July 31, 2023</time>
|
||||
<time datetime="2023-07-31T00:00:00+00:00">31 July 2023</time>
|
||||
|
||||
<h1>Old Woman Yells at the Cloud</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ When I was a kid, I was always interested in teaching; my grandparents had an un
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ When I was a kid, I was always interested in teaching; my grandparents had an un
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-08-18T00:00:00+00:00">August 18, 2023</time>
|
||||
<time datetime="2023-08-18T00:00:00+00:00">18 August 2023</time>
|
||||
|
||||
<h1>On Teaching</h1>
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
132
public/posts/hosting-a-podcast-for-pennies-a-day/index.html
Normal file
132
public/posts/hosting-a-podcast-for-pennies-a-day/index.html
Normal file
@ -0,0 +1,132 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us" dir="ltr">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<meta name="description" content="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 and maintain them for about $12/yr (not including the cost of the domains).
|
||||
">
|
||||
|
||||
<title>Hosting a podcast for pennies a day | cassie.ink</title>
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>
|
||||
<a href="http://localhost:1313/">
|
||||
cassie
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-droplet"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.708 2.372a2.382 2.382 0 0 0 -.71 .686l-4.892 7.26c-1.981 3.314 -1.22 7.466 1.767 9.882c2.969 2.402 7.286 2.402 10.254 0c2.987 -2.416 3.748 -6.569 1.795 -9.836l-4.919 -7.306c-.722 -1.075 -2.192 -1.376 -3.295 -.686z" /></svg>
|
||||
ink
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/about/">About</a>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-current="true" class="ancestor" href="/posts/">Posts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/tags/week-notes/">Week Notes</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
</header>
|
||||
<main class='page'>
|
||||
|
||||
<article>
|
||||
|
||||
<time datetime="2025-08-11T00:00:00+00:00">11 August 2025</time>
|
||||
|
||||
<h1>Hosting a podcast for pennies a day</h1>
|
||||
|
||||
<div class="barcode">
|
||||
|
||||
</div>
|
||||
|
||||
<p>I’ve been podcasting on and off for over ten years now — all shows that I’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’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 install<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, so here’s how I migrated the sites to Hugo and maintain them for about $12/yr (not including the cost of the domains).</p>
|
||||
<p>I chose <a href="https://gohugo.io/">Hugo</a> because I understand how to use it. I’m sure you could make this work with other static site generators; there’s <a href="https://eleventy-plugin-podcaster.com/">an 11ty plugin</a> out there too which is far more advanced than what I’ve set up. But I built this myself with minor knowledge of how to make a website. It’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! I’m sharing not because this is a perfect, optimized workflow but because I hope it might help someone.</p>
|
||||
<h2 id="setting-up-a-podcast-feed-in-hugo">Setting up a podcast feed in Hugo</h2>
|
||||
<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.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> It’s a good base to start from; we’re basically going to use that and inject in the <a href="https://podcasters.apple.com/support/823-podcast-requirements">basic podcast tags</a> as well as some additional ones for newer features like chapter support.</p>
|
||||
<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>
|
||||
<p><code>[outputs]</code>
|
||||
<code>home = ["HTML", "RSS", "podcast" ] # Sets up podcast feed</code></p>
|
||||
<p><code>[outputFormats]</code>
|
||||
<code>[outputFormats.podcast]</code>
|
||||
<code>MediaType = "application/rss+xml"</code>
|
||||
<code>BaseName = "feed" # Your feed will be located at example.org/feed.xml. If you edit this value, you need to edit line 43 in layouts/index.podcast.xml.</code></p>
|
||||
<div class="footnotes" role="doc-endnotes">
|
||||
<hr>
|
||||
<ol>
|
||||
<li id="fn:1">
|
||||
<p>I think about bringing Pitch & 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’t mention because episodes of it still exist online (outside of my control) and I’d rather not attach myself to them. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn:2">
|
||||
<p>WordPress is a bloated monster that constantly has security patches and the founder is super problematic. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn:3">
|
||||
<p>This template has been updated since I set up my feeds; I’m sticking with the old version. <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<ul class="social">
|
||||
<li>
|
||||
<a href="mailto:me@cassie.ink" aria-label="Email">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mail"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z" /><path d="M3 7l9 6l9 -6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/index.xml" aria-label="RSS">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f26522" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-rss">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="me" href="https://social.lol/@cass" aria-label="Mastodon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#6364ff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-mastodon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944z" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://listenbrainz.org/user/babyspace/" aria-label="Listen Brainz">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#eb743b" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-metabrainz"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7v10l7 4v-18z" /><path d="M21 7v10l-7 4v-18z" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="forget">
|
||||
don't forget to have fun.
|
||||
</p>
|
||||
<p class="copyright">
|
||||
all errors © cassie
|
||||
</p>
|
||||
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,6 +51,31 @@
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
11 August 2025
|
||||
</time>
|
||||
<h2><a href="/hugo-podcast/">Using Hugo to generate a podcast feed</a></h2>
|
||||
<div class="barcode">
|
||||
hugo-podcast
|
||||
</div>
|
||||
<p>I’ve been podcasting on and off for over ten years now — all shows that I’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’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 install<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, so here’s how I migrated the sites to Hugo. I’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’ll do another write up in the future on those topics.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/podcasting/">Podcasting</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
24 July 2025
|
||||
@ -133,31 +162,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
1 December 2024
|
||||
</time>
|
||||
<h2><a href="/an-ode-to-gitsync/">an ode to gitsync</a></h2>
|
||||
<div class="barcode">
|
||||
an-ode-to-gitsync
|
||||
</div>
|
||||
<p>Since I <a href="https://cassie.ink/what%27s-this-%28and-how-it-works%29/">moved this site to Hugo</a>, 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 Obsidian<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> vault at that.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/meta/">Meta</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -377,6 +381,34 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -408,7 +440,7 @@
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--last">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/6/">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/7/">
|
||||
Last
|
||||
</a>
|
||||
</li>
|
||||
|
@ -6,8 +6,15 @@
|
||||
<description>Recent content in Posts on cassie.ink</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Thu, 24 Jul 2025 00:00:00 +0000</lastBuildDate>
|
||||
<lastBuildDate>Mon, 11 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<atom:link href="http://localhost:1313/posts/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Using Hugo to generate a podcast feed</title>
|
||||
<link>http://localhost:1313/hugo-podcast/</link>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/hugo-podcast/</guid>
|
||||
<description><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></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>FX chains by the utterly inept</title>
|
||||
<link>http://localhost:1313/fx-chains-by-the-utterly-inept/</link>
|
||||
@ -45,9 +52,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<title></title>
|
||||
<link>http://localhost:1313/posts/2024-11-25-23-06-55/</link>
|
||||
<link>http://localhost:1313/posts/turning-30/</link>
|
||||
<pubDate>Mon, 25 Nov 2024 23:56:38 -0500</pubDate>
|
||||
<guid>http://localhost:1313/posts/2024-11-25-23-06-55/</guid>
|
||||
<guid>http://localhost:1313/posts/turning-30/</guid>
|
||||
<description><p>My thirtieth birthday party, the day before my actual turn from one decade to the next, was a beautiful night. My mom, both pre-emptively staking out her territory as an Italian-American grandmother and (past but an adverb?) fulfilling regrets at never having been able to throw me a childhood party, brought too much food and snacks and love — or staying up and out past the early afternoon, which is a kind of love for us; my friends, older than me in years and with busy families and schedules, brought wisdom and comfort in growing older gracefully; and my friends closer in age drove great distances to celebrate <em>me</em> — or at least, with me.</p></description>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,11 +51,36 @@
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
1 December 2024
|
||||
</time>
|
||||
<h2><a href="/an-ode-to-gitsync/">an ode to gitsync</a></h2>
|
||||
<div class="barcode">
|
||||
an-ode-to-gitsync
|
||||
</div>
|
||||
<p>Since I <a href="https://cassie.ink/what%27s-this-%28and-how-it-works%29/">moved this site to Hugo</a>, 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 Obsidian<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> vault at that.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/meta/">Meta</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
25 November 2024
|
||||
</time>
|
||||
<h2><a href="/posts/2024-11-25-23-06-55/"></a></h2>
|
||||
<h2><a href="/posts/turning-30/"></a></h2>
|
||||
<div class="barcode">
|
||||
|
||||
</div>
|
||||
@ -138,30 +167,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
17 August 2024
|
||||
</time>
|
||||
<h2><a href="/the-basic-eight/">I finished The Basic Eight and I can't decide if I enjoyed it</a></h2>
|
||||
<div class="barcode">
|
||||
the-basic-eight
|
||||
</div>
|
||||
<p>Spoilers to follow.</p>
|
||||
<p>I wrote in my week notes:</p>
|
||||
<blockquote>
|
||||
<p><strong><em>The Basic Eight</em> by Daniel Handler.</strong> Handler’s <em>Adverbs</em> is often what I cite when folks ask what my favorite book is, and I loved <em>Watch Your Mouth</em>, too. I need light reprieves from <em>The Odyssey</em>, too, so this seemed an excellent time to round out my reading of Handler’s bibliography. I’m about halfway through and enraptured by the narrative voice. It’s pretentious, as a story narrated by a precocious high school senior should be, without being cloying, and with Handler’s charming humor throughout. I love it so far and have faith that the feeling will continue. I normally hate books set in high school, but this one takes me back to my high school self — somehow, in a good way, which I don’t think I’ve ever felt before.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/literature/">Literature</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -393,6 +398,34 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -424,7 +457,7 @@
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--last">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/6/">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/7/">
|
||||
Last
|
||||
</a>
|
||||
</li>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,6 +51,30 @@
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
17 August 2024
|
||||
</time>
|
||||
<h2><a href="/the-basic-eight/">I finished The Basic Eight and I can't decide if I enjoyed it</a></h2>
|
||||
<div class="barcode">
|
||||
the-basic-eight
|
||||
</div>
|
||||
<p>Spoilers to follow.</p>
|
||||
<p>I wrote in my week notes:</p>
|
||||
<blockquote>
|
||||
<p><strong><em>The Basic Eight</em> by Daniel Handler.</strong> Handler’s <em>Adverbs</em> is often what I cite when folks ask what my favorite book is, and I loved <em>Watch Your Mouth</em>, too. I need light reprieves from <em>The Odyssey</em>, too, so this seemed an excellent time to round out my reading of Handler’s bibliography. I’m about halfway through and enraptured by the narrative voice. It’s pretentious, as a story narrated by a precocious high school senior should be, without being cloying, and with Handler’s charming humor throughout. I love it so far and have faith that the feeling will continue. I normally hate books set in high school, but this one takes me back to my high school self — somehow, in a good way, which I don’t think I’ve ever felt before.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/literature/">Literature</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
8 August 2024
|
||||
@ -161,35 +189,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
10 March 2024
|
||||
</time>
|
||||
<h2><a href="/moving-my-home-server-to-a-new-chassis/">Moving my home server to a new chassis</a></h2>
|
||||
<div class="barcode">
|
||||
moving-my-home-server-to-a-new-chassis
|
||||
</div>
|
||||
<p>I have a home server (running Unraid) that I use to backup computers, as media storage, and to run various apps. It’s mostly been cobbled together from used parts I found for cheap, and it generally followed <a href="https://forums.serverbuilds.net/t/guide-nas-killer-4-0-fast-quiet-power-efficient-and-flexible-starting-at-125/667">Serverbuild’s NAS Killer 4 guide</a>. It runs like a dream, and putting it together is one of the best decisions I’ve ever made. More recently, with streaming sites like Netflix, Hulu, etc. cracking down on password sharing, it has become my pathway to shedding some monthly subscriptions and owning my own media.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/home/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/life/">Life</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -421,6 +420,34 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -452,7 +479,7 @@
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--last">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/6/">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/7/">
|
||||
Last
|
||||
</a>
|
||||
</li>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,6 +51,35 @@
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
10 March 2024
|
||||
</time>
|
||||
<h2><a href="/moving-my-home-server-to-a-new-chassis/">Moving my home server to a new chassis</a></h2>
|
||||
<div class="barcode">
|
||||
moving-my-home-server-to-a-new-chassis
|
||||
</div>
|
||||
<p>I have a home server (running Unraid) that I use to backup computers, as media storage, and to run various apps. It’s mostly been cobbled together from used parts I found for cheap, and it generally followed <a href="https://forums.serverbuilds.net/t/guide-nas-killer-4-0-fast-quiet-power-efficient-and-flexible-starting-at-125/667">Serverbuild’s NAS Killer 4 guide</a>. It runs like a dream, and putting it together is one of the best decisions I’ve ever made. More recently, with streaming sites like Netflix, Hulu, etc. cracking down on password sharing, it has become my pathway to shedding some monthly subscriptions and owning my own media.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/home/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/life/">Life</a>
|
||||
</li>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/tech/">Tech</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
10 March 2024
|
||||
@ -153,27 +186,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
7 January 2024
|
||||
</time>
|
||||
<h2><a href="/hate-for-the-island/">hate for the island</a></h2>
|
||||
<div class="barcode">
|
||||
hate-for-the-island
|
||||
</div>
|
||||
<p>I was born and raised on Long Island in a hamlet that rests along the Great South Bay.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> 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.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/life/">Life</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -226,12 +238,9 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -253,14 +262,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -288,14 +294,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -323,14 +326,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -358,14 +358,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -393,14 +390,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -417,6 +411,30 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -430,7 +448,7 @@
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--last">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/6/">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/7/">
|
||||
Last
|
||||
</a>
|
||||
</li>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,6 +51,27 @@
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
7 January 2024
|
||||
</time>
|
||||
<h2><a href="/hate-for-the-island/">hate for the island</a></h2>
|
||||
<div class="barcode">
|
||||
hate-for-the-island
|
||||
</div>
|
||||
<p>I was born and raised on Long Island in a hamlet that rests along the Great South Bay.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> 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.</p>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/life/">Life</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
1 January 2024
|
||||
@ -156,38 +181,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
31 August 2023
|
||||
</time>
|
||||
<h2><a href="/media-log-august-2023/">Media Log (August 2023)</a></h2>
|
||||
<div class="barcode">
|
||||
media-log-august-2023
|
||||
</div>
|
||||
<h1 id="movies">Movies</h1>
|
||||
<ul>
|
||||
<li><em>Barbie</em> - I was underwhelmed. There’s been lots of chatter, and I loved <em>Lady Bird</em>, but <em>Barbie</em> didn’t hit for me; too much Ken (to be the hundredth person to whine about it) and the ending felt unearned and thematically confused. This was more of an homage to <em>Barbie</em> as a product than it was an homage to womanhood, but it pretended to be the latter.</li>
|
||||
</ul>
|
||||
<h1 id="games">Games</h1>
|
||||
<ul>
|
||||
<li><em>Vampire Survivors</em> - I originally played <em>Vampire Survivors</em> for my video game podcast, <a href="https://pitchandplay.org">Pitch & Play</a> (on hiatus but will come back!); my friend and co-host Ross recommended it to me. I was pleasantly surprised by how much I got into it given that I don’t really have nostalgia for this sort of game, but I played several hours of it and then became distracted by life. While moving this month, I was without internet for quite a while and had not hooked up my consoles (or my PC, still). To kill some time while my body recovered from lifting boxes and scrubbing surfaces, I downloaded <em>Vampire Survivors</em> onto my phone and went deep into it. It’s a fantastic game that I’ll come to associate with my early days in the house.</li>
|
||||
</ul>
|
||||
<h1 id="books">Books</h1>
|
||||
<ul>
|
||||
<li><em>Walk Two Moons</em> by Sharon Creech - I read this book originally as a child in the fifth grade. I remember loving it but little else. I have been looking for a text to add to my curriculum and wanted to try <em>Walk Two Moons</em> out. I enjoyed reading it and was surprised by how much of it came back to me even though I am (nearly) twenty years out from reading it the first time. I do think the Native American set dressing might be problematic given that the author is not, by any account I’ve read, actually Native; the plot is also predictable, but perhaps that is because I’m an adult reading a book written for children and because I’ve read it before. I’m not sure it’s the book I’m looking for, but it’s not a bad read.</li>
|
||||
</ul>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/media-log/">Media-Log</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -269,8 +262,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -283,12 +274,6 @@
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/2/" class="pagination__link">
|
||||
2
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -431,6 +416,41 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/7/" class="pagination__link">
|
||||
7
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -444,7 +464,7 @@
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--last">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/6/">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/7/">
|
||||
Last
|
||||
</a>
|
||||
</li>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,6 +51,38 @@
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
31 August 2023
|
||||
</time>
|
||||
<h2><a href="/media-log-august-2023/">Media Log (August 2023)</a></h2>
|
||||
<div class="barcode">
|
||||
media-log-august-2023
|
||||
</div>
|
||||
<h1 id="movies">Movies</h1>
|
||||
<ul>
|
||||
<li><em>Barbie</em> - I was underwhelmed. There’s been lots of chatter, and I loved <em>Lady Bird</em>, but <em>Barbie</em> didn’t hit for me; too much Ken (to be the hundredth person to whine about it) and the ending felt unearned and thematically confused. This was more of an homage to <em>Barbie</em> as a product than it was an homage to womanhood, but it pretended to be the latter.</li>
|
||||
</ul>
|
||||
<h1 id="games">Games</h1>
|
||||
<ul>
|
||||
<li><em>Vampire Survivors</em> - I originally played <em>Vampire Survivors</em> for my video game podcast, <a href="https://pitchandplay.org">Pitch & Play</a> (on hiatus but will come back!); my friend and co-host Ross recommended it to me. I was pleasantly surprised by how much I got into it given that I don’t really have nostalgia for this sort of game, but I played several hours of it and then became distracted by life. While moving this month, I was without internet for quite a while and had not hooked up my consoles (or my PC, still). To kill some time while my body recovered from lifting boxes and scrubbing surfaces, I downloaded <em>Vampire Survivors</em> onto my phone and went deep into it. It’s a fantastic game that I’ll come to associate with my early days in the house.</li>
|
||||
</ul>
|
||||
<h1 id="books">Books</h1>
|
||||
<ul>
|
||||
<li><em>Walk Two Moons</em> by Sharon Creech - I read this book originally as a child in the fifth grade. I remember loving it but little else. I have been looking for a text to add to my curriculum and wanted to try <em>Walk Two Moons</em> out. I enjoyed reading it and was surprised by how much of it came back to me even though I am (nearly) twenty years out from reading it the first time. I do think the Native American set dressing might be problematic given that the author is not, by any account I’ve read, actually Native; the plot is also predictable, but perhaps that is because I’m an adult reading a book written for children and because I’ve read it before. I’m not sure it’s the book I’m looking for, but it’s not a bad read.</li>
|
||||
</ul>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/media-log/">Media-Log</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
18 August 2023
|
||||
@ -161,29 +197,6 @@
|
||||
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<time>
|
||||
26 July 2023
|
||||
</time>
|
||||
<h2><a href="/what%27s-this/">What's This?</a></h2>
|
||||
<div class="barcode">
|
||||
what's-this
|
||||
</div>
|
||||
<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’ve started and may promptly abandon.</p>
|
||||
<p>Here’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>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/meta/">Meta</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -265,8 +278,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -279,12 +290,6 @@
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/2/" class="pagination__link">
|
||||
2
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -427,12 +432,59 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/7/" class="pagination__link">
|
||||
7
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--next">
|
||||
<a href="/posts/page/7/" class="pagination__link pagination__link--next">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-arrow-right"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12l14 0" /><path d="M13 18l6 -6" /><path d="M13 6l6 6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--last">
|
||||
<a class="pagination__link pagination__link--last" href="/posts/page/7/">
|
||||
Last
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
400
public/posts/page/7/index.html
Normal file
400
public/posts/page/7/index.html
Normal file
@ -0,0 +1,400 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us" dir="ltr">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<meta name="description" content="Hi, my name is Cassie. This is my personal blog and home of the esoteric bullshit that I am incomprehensibly fixated on, which includes books, video games, music, and thinking way too much about everything.">
|
||||
|
||||
<title>Posts | cassie.ink</title>
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/posts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>
|
||||
<a href="http://localhost:1313/">
|
||||
cassie
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-droplet"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.708 2.372a2.382 2.382 0 0 0 -.71 .686l-4.892 7.26c-1.981 3.314 -1.22 7.466 1.767 9.882c2.969 2.402 7.286 2.402 10.254 0c2.987 -2.416 3.748 -6.569 1.795 -9.836l-4.919 -7.306c-.722 -1.075 -2.192 -1.376 -3.295 -.686z" /></svg>
|
||||
ink
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/about/">About</a>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-current="page" class="active" href="/posts/">Posts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/tags/week-notes/">Week Notes</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
</header>
|
||||
<main class='section'>
|
||||
|
||||
<h1>All Posts</h1>
|
||||
|
||||
|
||||
|
||||
<article>
|
||||
<time>
|
||||
26 July 2023
|
||||
</time>
|
||||
<h2><a href="/what%27s-this/">What's This?</a></h2>
|
||||
<div class="barcode">
|
||||
what's-this
|
||||
</div>
|
||||
<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’ve started and may promptly abandon.</p>
|
||||
<p>Here’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>
|
||||
|
||||
<div class="tags">
|
||||
<ul>
|
||||
<li>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tag"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>
|
||||
<a href="/tags/meta/">Meta</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="pagination">
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--first">
|
||||
<a class="pagination__link pagination__link--first" href="/posts/">
|
||||
First
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--previous">
|
||||
<a href="/posts/page/6/" class="pagination__link pagination__link--previous">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-arrow-left"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12l14 0" /><path d="M5 12l6 6" /><path d="M5 12l6 -6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/3/" class="pagination__link">
|
||||
3
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/4/" class="pagination__link">
|
||||
4
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/5/" class="pagination__link">
|
||||
5
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item">
|
||||
<a href="/posts/page/6/" class="pagination__link">
|
||||
6
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="pagination__item pagination__item--current">
|
||||
<a href="/posts/page/7/" class="pagination__link">
|
||||
7
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<ul class="social">
|
||||
<li>
|
||||
<a href="mailto:me@cassie.ink" aria-label="Email">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mail"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z" /><path d="M3 7l9 6l9 -6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/index.xml" aria-label="RSS">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f26522" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-rss">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="me" href="https://social.lol/@cass" aria-label="Mastodon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#6364ff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-mastodon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944z" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://listenbrainz.org/user/babyspace/" aria-label="Listen Brainz">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#eb743b" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-metabrainz"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7v10l7 4v-18z" /><path d="M21 7v10l-7 4v-18z" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="forget">
|
||||
don't forget to have fun.
|
||||
</p>
|
||||
<p class="copyright">
|
||||
all errors © cassie
|
||||
</p>
|
||||
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
117
public/posts/turning-30/index.html
Normal file
117
public/posts/turning-30/index.html
Normal file
@ -0,0 +1,117 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us" dir="ltr">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<meta name="description" content="My thirtieth birthday party, the day before my actual turn from one decade to the next, was a beautiful night. My mom, both pre-emptively staking out her territory as an Italian-American grandmother and (past but an adverb?) fulfilling regrets at never having been able to throw me a childhood party, brought too much food and snacks and love — or staying up and out past the early afternoon, which is a kind of love for us; my friends, older than me in years and with busy families and schedules, brought wisdom and comfort in growing older gracefully; and my friends closer in age drove great distances to celebrate me — or at least, with me.
|
||||
">
|
||||
|
||||
<title> | cassie.ink</title>
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>
|
||||
<a href="http://localhost:1313/">
|
||||
cassie
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-droplet"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.708 2.372a2.382 2.382 0 0 0 -.71 .686l-4.892 7.26c-1.981 3.314 -1.22 7.466 1.767 9.882c2.969 2.402 7.286 2.402 10.254 0c2.987 -2.416 3.748 -6.569 1.795 -9.836l-4.919 -7.306c-.722 -1.075 -2.192 -1.376 -3.295 -.686z" /></svg>
|
||||
ink
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/about/">About</a>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-current="true" class="ancestor" href="/posts/">Posts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/tags/week-notes/">Week Notes</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
</header>
|
||||
<main class='page'>
|
||||
|
||||
<article>
|
||||
|
||||
<time datetime="2024-11-25T23:56:38-05:00">25 November 2024</time>
|
||||
|
||||
<h1></h1>
|
||||
|
||||
<div class="barcode">
|
||||
|
||||
</div>
|
||||
|
||||
<p>My thirtieth birthday party, the day before my actual turn from one decade to the next, was a beautiful night. My mom, both pre-emptively staking out her territory as an Italian-American grandmother and (past but an adverb?) fulfilling regrets at never having been able to throw me a childhood party, brought too much food and snacks and love — or staying up and out past the early afternoon, which is a kind of love for us; my friends, older than me in years and with busy families and schedules, brought wisdom and comfort in growing older gracefully; and my friends closer in age drove great distances to celebrate <em>me</em> — or at least, with me.</p>
|
||||
<p>The actual day passed uneventfully, cleaning and resting from the festivities, alone and at home with Joe. As the night wore on, however, I noticed, with (something something - mixed alarm, absence, desparation, and a painful normalcy) that I hadn’t heard from my dad, and I was suddenly borne ceaselessly back into the past.</p>
|
||||
<p>After years of baggage and mixed-up emptions, ups and downs, I’ve entered a maintenance phase in my relationship with him: I maintain the most tenuous connection I possibly can while his mother, my grandmother, is still alive, and I have planned to sever those last vestiges when she passed. I’ve entertained fleeting fancies on what would happen when <em>he</em> goes — how I would find out, how I would react, if I would even bother to attend or instead seize it as an opportunity to enact my triumphant revenge by never showing up.</p>
|
||||
<p>And yet, and yet, despite years of receiving a call on the wrong birthday, I’m back in the second grade, at an in-school Father’s Day celebration, waiting, waiting for any sign; mixed gratitude and crushing disappointment to see my maternal grandfather in my dad’s stead; and sunk lower by every playground busy-bpdy asking why my dad was so old and having to explain that it’s not actually my perfectly hale and hearty dad, who simply did not show up. I’m back in the schoolyard waiting for him — late again — to pick us up for his agreed upon custodial visits, so late the sun starts to set and a worried teacher contacts home seeing three abandoned kids who are realizing, slowly, that they are not important to their father. I’m back at my high school graduation and not bothering to invite him because I have almost two decades of experience to know the outcome, to know it’s better than to set myself up for disappointment by expecting him to show. I’m back at my college graduation, a tremendous, back-breaking accomplishment, shocked to see him show up but wishing he hadn’t as he makes it about himself: “I’m glad to see you’re not a fuck up like me.”</p>
|
||||
<p>I am 30. Why now, on the cusp of starting my own family — of discussing the unsexy logistics of planned conception, (lack of sufficient) maternity leave, and childcare, do I need a call from my daddy on my birthday? Why have I not learned the lesson experience has so deeply (that isn’t the right word) taught me so many times over?</p>
|
||||
<p>At a parent meeting for a beloved student, I sang praises about her while admiring the original: she is, in every respect — her mannerisms, dress, energy — her mother. A little shorter and less gray, but otherwise a carbon, in the ways that matter. And as I went home that evening and reflected, I wondered what in me I would pass along — those idiosyncrasies impossible to spot within oneself that would one day leave bemused teachers, friends, family to remark the same of my child and me.</p>
|
||||
<p>And again, the lingering seven year old in me bubbled to the surface: what in me resembled my father — and, worse yet, what of his toxic line would seep (need a stronger verb, think like an oil spill) into another generation? Have I created enough distance to avoid his influence? Is there some latent biological evil in my genetics? And what of my traumas, my inability to move past my feelings of abandonment, would I, against my best efforts, inflict on my own?</p>
|
||||
<p>People say girls look for their fathers in their partners. I’ve looked for the opposite. Joe is always gentle, always patient — the kind to drop everything just to be there for a friend in need. When I asked him if I had any mannerisms he thought I might pass along, he laughed and responded with a list, paramount upon which was my passion. He recalled nights at the movie theater sitting in a mostly one-sided conversation, listening to me monologue about some esoteric music bullshit and falling in love.</p>
|
||||
<p>I hope for my children from me passion and devotion; that they stick wholeheartedly to that which — and <em>who</em> — they care about. I wish for them the softness that comes from having two parents who make them feel loved, valued, important.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<ul class="social">
|
||||
<li>
|
||||
<a href="mailto:me@cassie.ink" aria-label="Email">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mail"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z" /><path d="M3 7l9 6l9 -6" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/index.xml" aria-label="RSS">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f26522" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-rss">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />
|
||||
<path d="M4 4a16 16 0 0 1 16 16" />
|
||||
<path d="M4 11a9 9 0 0 1 9 9" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="me" href="https://social.lol/@cass" aria-label="Mastodon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#6364ff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-mastodon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M18.648 15.254c-1.816 1.763 -6.648 1.626 -6.648 1.626a18.262 18.262 0 0 1 -3.288 -.256c1.127 1.985 4.12 2.81 8.982 2.475c-1.945 2.013 -13.598 5.257 -13.668 -7.636l-.026 -1.154c0 -3.036 .023 -4.115 1.352 -5.633c1.671 -1.91 6.648 -1.666 6.648 -1.666s4.977 -.243 6.648 1.667c1.329 1.518 1.352 2.597 1.352 5.633s-.456 4.074 -1.352 4.944z" />
|
||||
<path d="M12 11.204v-2.926c0 -1.258 -.895 -2.278 -2 -2.278s-2 1.02 -2 2.278v4.722m4 -4.722c0 -1.258 .895 -2.278 2 -2.278s2 1.02 2 2.278v4.722" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://listenbrainz.org/user/babyspace/" aria-label="Listen Brainz">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#eb743b" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-metabrainz"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7v10l7 4v-18z" /><path d="M21 7v10l-7 4v-18z" /></svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="forget">
|
||||
don't forget to have fun.
|
||||
</p>
|
||||
<p class="copyright">
|
||||
all errors © cassie
|
||||
</p>
|
||||
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-11-07T00:00:00+00:00">November 7, 2024</time>
|
||||
<time datetime="2024-11-07T00:00:00+00:00">7 November 2024</time>
|
||||
|
||||
<h1>Reflections on elections</h1>
|
||||
|
||||
|
@ -2,20 +2,35 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>http://localhost:1313/</loc>
|
||||
<lastmod>2025-08-06T00:00:00+00:00</lastmod>
|
||||
<loc>http://localhost:1313/week-notes/028/</loc>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/week-notes/027/</loc>
|
||||
<lastmod>2025-08-06T00:00:00+00:00</lastmod>
|
||||
<loc>http://localhost:1313/</loc>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/podcasting/</loc>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/posts/</loc>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/</loc>
|
||||
<lastmod>2025-08-06T00:00:00+00:00</lastmod>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/tech/</loc>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/hugo-podcast/</loc>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/week-notes/</loc>
|
||||
<lastmod>2025-08-06T00:00:00+00:00</lastmod>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/week-notes/</loc>
|
||||
<lastmod>2025-08-06T00:00:00+00:00</lastmod>
|
||||
<lastmod>2025-08-11T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/week-notes/027/</loc>
|
||||
<lastmod>2025-08-10T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/week-notes/026/</loc>
|
||||
<lastmod>2025-07-29T00:00:00+00:00</lastmod>
|
||||
@ -28,15 +43,6 @@
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/fx-chains-by-the-utterly-inept/</loc>
|
||||
<lastmod>2025-07-24T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/podcasting/</loc>
|
||||
<lastmod>2025-07-24T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/posts/</loc>
|
||||
<lastmod>2025-07-24T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/tags/tech/</loc>
|
||||
<lastmod>2025-07-24T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/i-finished-lord-of-the-rings/</loc>
|
||||
<lastmod>2025-07-18T00:00:00+00:00</lastmod>
|
||||
@ -89,7 +95,7 @@
|
||||
<loc>http://localhost:1313/week-notes/015/</loc>
|
||||
<lastmod>2024-12-01T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/posts/2024-11-25-23-06-55/</loc>
|
||||
<loc>http://localhost:1313/posts/turning-30/</loc>
|
||||
<lastmod>2024-11-25T23:56:38-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>http://localhost:1313/week-notes/014/</loc>
|
||||
|
@ -14,10 +14,12 @@ The first is from “Banshee Beat” by Animal Collective, which I first
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -49,8 +51,7 @@ The first is from “Banshee Beat” by Animal Collective, which I first
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-08T00:00:00+00:00">August 8, 2024</time>
|
||||
<time datetime="2024-08-08T00:00:00+00:00">8 August 2024</time>
|
||||
|
||||
<h1>smooth runs the water where the brook is deep</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ Stage 2: Coping / Bargaining Okay, there is actually a lot to do, but it’s
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ Stage 2: Coping / Bargaining Okay, there is actually a lot to do, but it’s
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2023-08-15T00:00:00+00:00">August 15, 2023</time>
|
||||
<time datetime="2023-08-15T00:00:00+00:00">15 August 2023</time>
|
||||
|
||||
<h1>Stages of Moving</h1>
|
||||
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/ai/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/audio/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/exercise/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/games/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/home/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,14 +50,14 @@
|
||||
<h1>Tags</h1>
|
||||
|
||||
|
||||
<h2><a href="/tags/week-notes/">Week-Notes</a></h2>
|
||||
|
||||
<h2><a href="/tags/audio/">Audio</a></h2>
|
||||
|
||||
<h2><a href="/tags/podcasting/">Podcasting</a></h2>
|
||||
|
||||
<h2><a href="/tags/tech/">Tech</a></h2>
|
||||
|
||||
<h2><a href="/tags/week-notes/">Week-Notes</a></h2>
|
||||
|
||||
<h2><a href="/tags/audio/">Audio</a></h2>
|
||||
|
||||
<h2><a href="/tags/literature/">Literature</a></h2>
|
||||
|
||||
<h2><a href="/tags/meta/">Meta</a></h2>
|
||||
|
@ -6,12 +6,26 @@
|
||||
<description>Recent content in Tags on cassie.ink</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Wed, 06 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<lastBuildDate>Mon, 11 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<atom:link href="http://localhost:1313/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Podcasting</title>
|
||||
<link>http://localhost:1313/tags/podcasting/</link>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/tags/podcasting/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Tech</title>
|
||||
<link>http://localhost:1313/tags/tech/</link>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/tags/tech/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Week-Notes</title>
|
||||
<link>http://localhost:1313/tags/week-notes/</link>
|
||||
<pubDate>Wed, 06 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/tags/week-notes/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
@ -22,20 +36,6 @@
|
||||
<guid>http://localhost:1313/tags/audio/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Podcasting</title>
|
||||
<link>http://localhost:1313/tags/podcasting/</link>
|
||||
<pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/tags/podcasting/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Tech</title>
|
||||
<link>http://localhost:1313/tags/tech/</link>
|
||||
<pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/tags/tech/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Literature</title>
|
||||
<link>http://localhost:1313/tags/literature/</link>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/internet/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/life/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/literature/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/media-log/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/meta/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/music/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/podcasting/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -51,6 +55,13 @@
|
||||
</h1>
|
||||
|
||||
|
||||
<article>
|
||||
<h2><a href="/hugo-podcast/">Using Hugo to generate a podcast feed</a></h2>
|
||||
<time>
|
||||
11 August 2025
|
||||
</time>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h2><a href="/fx-chains-by-the-utterly-inept/">FX chains by the utterly inept</a></h2>
|
||||
<time>
|
||||
|
@ -6,8 +6,15 @@
|
||||
<description>Recent content in Podcasting on cassie.ink</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Thu, 24 Jul 2025 00:00:00 +0000</lastBuildDate>
|
||||
<lastBuildDate>Mon, 11 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<atom:link href="http://localhost:1313/tags/podcasting/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Using Hugo to generate a podcast feed</title>
|
||||
<link>http://localhost:1313/hugo-podcast/</link>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/hugo-podcast/</guid>
|
||||
<description><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></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>FX chains by the utterly inept</title>
|
||||
<link>http://localhost:1313/fx-chains-by-the-utterly-inept/</link>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/pokemon/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/politics/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/prompts/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/teaching/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/tech/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -51,6 +55,13 @@
|
||||
</h1>
|
||||
|
||||
|
||||
<article>
|
||||
<h2><a href="/hugo-podcast/">Using Hugo to generate a podcast feed</a></h2>
|
||||
<time>
|
||||
11 August 2025
|
||||
</time>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h2><a href="/fx-chains-by-the-utterly-inept/">FX chains by the utterly inept</a></h2>
|
||||
<time>
|
||||
|
@ -6,8 +6,15 @@
|
||||
<description>Recent content in Tech on cassie.ink</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Thu, 24 Jul 2025 00:00:00 +0000</lastBuildDate>
|
||||
<lastBuildDate>Mon, 11 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<atom:link href="http://localhost:1313/tags/tech/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Using Hugo to generate a podcast feed</title>
|
||||
<link>http://localhost:1313/hugo-podcast/</link>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/hugo-podcast/</guid>
|
||||
<description><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></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>FX chains by the utterly inept</title>
|
||||
<link>http://localhost:1313/fx-chains-by-the-utterly-inept/</link>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/undergrad/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
@ -10,10 +10,14 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/week-notes/index.xml" title="cassie.ink">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -51,10 +55,17 @@
|
||||
</h1>
|
||||
|
||||
|
||||
<article>
|
||||
<h2><a href="/week-notes/028/">(week notes 28)</a></h2>
|
||||
<time>
|
||||
11 August 2025
|
||||
</time>
|
||||
</article>
|
||||
|
||||
<article>
|
||||
<h2><a href="/week-notes/027/">I want to fuck my computer (week notes 027)</a></h2>
|
||||
<time>
|
||||
6 August 2025
|
||||
10 August 2025
|
||||
</time>
|
||||
</article>
|
||||
|
||||
|
@ -6,12 +6,19 @@
|
||||
<description>Recent content in Week-Notes on cassie.ink</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Wed, 06 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<lastBuildDate>Mon, 11 Aug 2025 00:00:00 +0000</lastBuildDate>
|
||||
<atom:link href="http://localhost:1313/tags/week-notes/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>(week notes 28)</title>
|
||||
<link>http://localhost:1313/week-notes/028/</link>
|
||||
<pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/week-notes/028/</guid>
|
||||
<description><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></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>I want to fuck my computer (week notes 027)</title>
|
||||
<link>http://localhost:1313/week-notes/027/</link>
|
||||
<pubDate>Wed, 06 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<pubDate>Sun, 10 Aug 2025 00:00:00 +0000</pubDate>
|
||||
<guid>http://localhost:1313/week-notes/027/</guid>
|
||||
<description><h2 id="doing">Doing</h2>
<p>I&rsquo;m still working on planning for the college class I&rsquo;m teaching in a few weeks. I <em>need</em> to have my basic syllabus done within the next week or two, but I don&rsquo;t really plan that way, so I&rsquo;m going week by week and outlining the entire lesson. It&rsquo;s a lot of work, but I&rsquo;m <a href="https://cassie.ink/week-notes/026/">feeling a lot better than I was last week</a>. I was previously trying to reverse engineer the previous professor&rsquo;s syllabus while bringing in some of my own resources, but I gave myself permission to do my own thing and only consult her work when I felt I needed something more for a lesson or a text. I&rsquo;m moving much faster and things feel easier now, so it&rsquo;s just a matter of doing the work.</p></description>
|
||||
</item>
|
||||
|
@ -13,10 +13,12 @@ The Basic Eight by Daniel Handler. Handler’s Adverbs is often what I cite
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -48,8 +50,7 @@ The Basic Eight by Daniel Handler. Handler’s Adverbs is often what I cite
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-17T00:00:00+00:00">August 17, 2024</time>
|
||||
<time datetime="2024-08-17T00:00:00+00:00">17 August 2024</time>
|
||||
|
||||
<h1>I finished The Basic Eight and I can't decide if I enjoyed it</h1>
|
||||
|
||||
|
@ -13,10 +13,12 @@ I approached my response largely as a list of albums that have meant something t
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -48,8 +50,7 @@ I approached my response largely as a list of albums that have meant something t
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-03-10T00:00:00+00:00">March 10, 2024</time>
|
||||
<time datetime="2024-03-10T00:00:00+00:00">10 March 2024</time>
|
||||
|
||||
<h1>Thirteen to Know Me</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-07-21T00:00:00+00:00">July 21, 2024</time>
|
||||
<time datetime="2024-07-21T00:00:00+00:00">21 July 2024</time>
|
||||
|
||||
<h1>Week Notes 01</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ Doing My district is finally paying me to organize Safe Space trainings. This we
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ Doing My district is finally paying me to organize Safe Space trainings. This we
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-07-28T00:00:00+00:00">July 28, 2024</time>
|
||||
<time datetime="2024-07-28T00:00:00+00:00">28 July 2024</time>
|
||||
|
||||
<h1>ask yourself is that going to bring you peace, though? (week notes 02)</h1>
|
||||
|
||||
|
@ -10,10 +10,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -45,8 +47,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-04T00:00:00+00:00">August 4, 2024</time>
|
||||
<time datetime="2024-08-04T00:00:00+00:00">4 August 2024</time>
|
||||
|
||||
<h1>clean as paper before the poem (week notes 03)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-11T00:00:00+00:00">August 11, 2024</time>
|
||||
<time datetime="2024-08-11T00:00:00+00:00">11 August 2024</time>
|
||||
|
||||
<h1>I love when you invoke my death (week notes 04)</h1>
|
||||
|
||||
|
@ -10,10 +10,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -45,8 +47,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-18T00:00:00+00:00">August 18, 2024</time>
|
||||
<time datetime="2024-08-18T00:00:00+00:00">18 August 2024</time>
|
||||
|
||||
<h1>the secrecy won't keep you free (week notes 05)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-08-26T00:00:00+00:00">August 26, 2024</time>
|
||||
<time datetime="2024-08-26T00:00:00+00:00">26 August 2024</time>
|
||||
|
||||
<h1>I want to sleep and dream alone (week notes 06)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-09-01T00:00:00+00:00">September 1, 2024</time>
|
||||
<time datetime="2024-09-01T00:00:00+00:00">1 September 2024</time>
|
||||
|
||||
<h1>I guess I feel a bit lost without you (week notes 07)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-09-08T00:00:00+00:00">September 8, 2024</time>
|
||||
<time datetime="2024-09-08T00:00:00+00:00">8 September 2024</time>
|
||||
|
||||
<h1>the birds remember how to come home (week notes 08)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-09-15T00:00:00+00:00">September 15, 2024</time>
|
||||
<time datetime="2024-09-15T00:00:00+00:00">15 September 2024</time>
|
||||
|
||||
<h1>666 with a princess streak (week notes 09)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-09-22T00:00:00+00:00">September 22, 2024</time>
|
||||
<time datetime="2024-09-22T00:00:00+00:00">22 September 2024</time>
|
||||
|
||||
<h1>I know if I don't go now I won't make it out (week notes 10)</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ Doing Joe and I drove back to ___ for a funeral… and then back, all in on
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ Doing Joe and I drove back to ___ for a funeral… and then back, all in on
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-10-06T00:00:00+00:00">October 6, 2024</time>
|
||||
<time datetime="2024-10-06T00:00:00+00:00">6 October 2024</time>
|
||||
|
||||
<h1>but let's talk about you for a minute (week notes 11)</h1>
|
||||
|
||||
|
@ -13,10 +13,12 @@ I’m watching Joe play The Legend of Zelda: Echoes of Wisdom.
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -48,8 +50,7 @@ I’m watching Joe play The Legend of Zelda: Echoes of Wisdom.
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-10-13T00:00:00+00:00">October 13, 2024</time>
|
||||
<time datetime="2024-10-13T00:00:00+00:00">13 October 2024</time>
|
||||
|
||||
<h1>what would it mean for us if i fell off this slide? (week notes 12)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-10-20T00:00:00+00:00">October 20, 2024</time>
|
||||
<time datetime="2024-10-20T00:00:00+00:00">20 October 2024</time>
|
||||
|
||||
<h1>spend my days running in circles (week notes 13)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@ Doing I turned 30. I had a big party with lots of friends — and I feel gratefu
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@ Doing I turned 30. I had a big party with lots of friends — and I feel gratefu
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-11-24T00:00:00+00:00">November 24, 2024</time>
|
||||
<time datetime="2024-11-24T00:00:00+00:00">24 November 2024</time>
|
||||
|
||||
<h1>it's second nature to love you (week notes 14)</h1>
|
||||
|
||||
|
@ -10,10 +10,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -45,8 +47,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-12-01T00:00:00+00:00">December 1, 2024</time>
|
||||
<time datetime="2024-12-01T00:00:00+00:00">1 December 2024</time>
|
||||
|
||||
<h1>my voice moved hades so he extinguished the fire (week notes 15)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-12-08T00:00:00+00:00">December 8, 2024</time>
|
||||
<time datetime="2024-12-08T00:00:00+00:00">8 December 2024</time>
|
||||
|
||||
<h1>to find part of you still works is like a tiny victory (week notes 16)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-12-15T00:00:00+00:00">December 15, 2024</time>
|
||||
<time datetime="2024-12-15T00:00:00+00:00">15 December 2024</time>
|
||||
|
||||
<h1>sleepyhead 'cause all the fucking foxes kept me awake last night (week notes 17)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2024-12-22T00:00:00+00:00">December 22, 2024</time>
|
||||
<time datetime="2024-12-22T00:00:00+00:00">22 December 2024</time>
|
||||
|
||||
<h1>using purell 'til my hands bleed and swell (week notes 18)</h1>
|
||||
|
||||
|
@ -12,10 +12,12 @@ I’ve burned through several seasons of Girls since my last week notes. I&r
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -47,8 +49,7 @@ I’ve burned through several seasons of Girls since my last week notes. I&r
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2025-01-04T00:00:00+00:00">January 4, 2025</time>
|
||||
<time datetime="2025-01-04T00:00:00+00:00">4 January 2025</time>
|
||||
|
||||
<h1>stop thinking a phone call or text is too complicated (week notes 19)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2025-01-11T00:00:00+00:00">January 11, 2025</time>
|
||||
<time datetime="2025-01-11T00:00:00+00:00">11 January 2025</time>
|
||||
|
||||
<h1>hold on tight to this time, this place (week notes 20)</h1>
|
||||
|
||||
|
@ -11,10 +11,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -46,8 +48,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2025-01-19T00:00:00+00:00">January 19, 2025</time>
|
||||
<time datetime="2025-01-19T00:00:00+00:00">19 January 2025</time>
|
||||
|
||||
<h1>she knows I love my cereal (week notes 21)</h1>
|
||||
|
||||
|
@ -10,10 +10,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -45,8 +47,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2025-01-26T00:00:00+00:00">January 26, 2025</time>
|
||||
<time datetime="2025-01-26T00:00:00+00:00">26 January 2025</time>
|
||||
|
||||
<h1>I need love, can you get to me now? (week notes 22)</h1>
|
||||
|
||||
|
@ -10,10 +10,12 @@
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/syntax.css">
|
||||
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -45,8 +47,7 @@
|
||||
|
||||
<article>
|
||||
|
||||
|
||||
<time datetime="2025-02-02T00:00:00+00:00">February 2, 2025</time>
|
||||
<time datetime="2025-02-02T00:00:00+00:00">2 February 2025</time>
|
||||
|
||||
<h1>dancing around the subject 'til my legs hurt (week notes 23)</h1>
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user