diff --git a/content/posts/git-workflow-0.md b/content/posts/git-workflow-0.md
index 565e833..19d70e4 100644
--- a/content/posts/git-workflow-0.md
+++ b/content/posts/git-workflow-0.md
@@ -16,7 +16,7 @@ Following the drama, I'm putting together a multi-part guide on how to leverage
I'll update this post as I add articles to the series. At the moment, I've planned to write the following articles:
-1. [Hydra Hosting](../../../2020/11/18/git-workflow-1.html): repository hosting.
+1. [Hydra Hosting](/2020/11/18/git-workflow-1.html): repository hosting.
2. Community feedback (issues, support, etc.)
3. Community contributions (patches)
4. CI/CD
@@ -45,5 +45,5 @@ Q: I'm not interested in trying anything new, no matter what the benefits are.
A: First of all, that wasn't a question. Second, this series isn't for you. You should not read this. I recommend doing literally anything else.
-Next: Resilient Git, Part 1: [Hydra Hosting](../../../2020/11/18/git-workflow-1.html)
+Next: Resilient Git, Part 1: [Hydra Hosting](/2020/11/18/git-workflow-1.html)
diff --git a/content/posts/keeping-platforms-open.md b/content/posts/keeping-platforms-open.md
index 79c6c3d..ed04dd3 100644
--- a/content/posts/keeping-platforms-open.md
+++ b/content/posts/keeping-platforms-open.md
@@ -14,7 +14,7 @@ title: Keeping platforms open
---
This article is the second entry of series of posts exploring situations in which FLOSS alone isn't enough to secure user freedom.
-My previous article, [Whatsapp and the domestication of users](../../../2021/01/27/whatsapp-and-the-domestication-of-users.html), got more attention than I was expecting. Some responses gave me a lot to think about,[^1] especially regarding _actions_ we can take. I suggest reading that article first; it explained what "user domestication" is and why it's a problem. It enumerated three countermeasures: FLOSS, simplicity, and open platforms.
+My previous article, [Whatsapp and the domestication of users](/2021/01/27/whatsapp-and-the-domestication-of-users.html), got more attention than I was expecting. Some responses gave me a lot to think about,[^1] especially regarding _actions_ we can take. I suggest reading that article first; it explained what "user domestication" is and why it's a problem. It enumerated three countermeasures: FLOSS, simplicity, and open platforms.
Hard problems, by definition, lack easy solutions. Simply choosing (or creating) a platform that avoids user domestication isn't enough if that platform can change. The price of freedom is eternal vigilance; in addition to settling on the right platform, we must ensure that it honors its users in both the present _and the future_. Keeping a platform FLOSS and simple is more straightforward[^2] than keeping a platform "open".
diff --git a/content/posts/password-strength.md b/content/posts/password-strength.md
index d7e8dcd..19765e5 100644
--- a/content/posts/password-strength.md
+++ b/content/posts/password-strength.md
@@ -13,7 +13,7 @@ footnote_heading: References and endnotes
---
This is a tale of the intersection between thermal physics, cosmology, and a tiny amount of computer science to answer a seemingly innocuous question: "How strong does a password need to be for it to be physically impossible to brute-force, ever?"
-[TLDR]({{[}}) at the bottom.
+[TLDR](#conclusiontldr) at the bottom.
_Note: this post contains equations. Since none of the equations were long or complex, I decided to just write them out in code blocks instead of using images or MathML the way Wikipedia does._
@@ -41,7 +41,7 @@ How strong should your password be for it to be safe from a brute-force attack b
### Quantifying password strength.
-_A previous version of this section wasn't clear and accurate. I've since removed the offending bits and added a clarification about salting/hashing to the [Caveats and estimates]({{][}}) section._
+_A previous version of this section wasn't clear and accurate. I've since removed the offending bits and added a clarification about salting/hashing to the [Caveats and estimates](#caveats-and-estimates) section._
A good measure of password strength is **entropy bits.** The entropy bits in a password is a base-2 logarithm of the number of guesses required to brute-force it.[^1]
diff --git a/layouts/_default/_markup/render-link.rss.xml b/layouts/_default/_markup/render-link.rss.xml
new file mode 100644
index 0000000..e81c9ea
--- /dev/null
+++ b/layouts/_default/_markup/render-link.rss.xml
@@ -0,0 +1,12 @@
+{{- $parsedDest := urls.Parse (.Destination | absURL) -}}
+{{- if (strings.HasPrefix .Destination "#") -}}
+ {{ .Text | safeHTML }}
+{{- else if not (strings.HasPrefix .Destination $parsedDest.Scheme) -}}
+ {{- $baseURL := trim .Page.Site.BaseURL "/" -}}
+ {{- $fragment := "" -}}
+ {{- with $parsedDest.Fragment -}}{{- $fragment = printf "#%s" . -}}{{- end -}}
+ {{- $href := printf "%s%s%s" $baseURL $parsedDest.Path $fragment | absURL -}}
+ {{ .Text | safeHTML }}
+{{- else -}}
+ {{ .Text | safeHTML }}
+{{- end -}}
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
index 9d89ee4..fa78be5 100644
--- a/layouts/_default/rss.xml
+++ b/layouts/_default/rss.xml
@@ -24,7 +24,7 @@
{{.}}{{end}}{{ if not .Date.IsZero }}
{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }}
{{ with .OutputFormats.Get "RSS" }}
- {{ printf "" .Permalink .MediaType | safeHTML }}
+ {{ printf "" .Permalink .MediaType | safeHTML }}
{{ end }}
{{ range where .Site.Pages "Kind" "page" }}
{{ if or (eq .Section "posts") (eq .Section "post") }}
]