diff --git a/blog/site-update-patron-page-fixed.markdown b/blog/site-update-patron-page-fixed.markdown
new file mode 100644
index 0000000..cd42799
--- /dev/null
+++ b/blog/site-update-patron-page-fixed.markdown
@@ -0,0 +1,117 @@
+---
+title: "Site Update: I Fixed the Patron Page"
+date: 2022-05-18
+---
+
+So I fixed [the patron page](https://christine.website/patrons) and the
+underlying issue was stupid enough that I feel like explaining it so you all can
+learn from my mistake.
+
+For those of you playing the christine dot
+website home game, look
+[here](https://github.com/Xe/site/commit/e2b9f384bf4033eddf321b5b5020ac4847609b37)
+to see the fix and play along!
+
+My blog is basically a thin wrapper around two basic things:
+
+1. Markdown files (such as for this article you are reading right now)
+2. Static files (such as for the CSS that is making this article look nice)
+
+When I create a package out of my blog's code, I have a layout that resembles
+the directory structure in my git repo:
+
+```console
+$ ls -l /nix/store/crc94hqyb546w3w9fzdyr8zvz3xf3p1j-xesite-2.4.0
+total 64
+dr-xr-xr-x 2 root root 4096 Dec 31 1969 bin/
+dr-xr-xr-x 2 root root 20480 Dec 31 1969 blog/
+-r--r--r-- 24 root root 8663 Dec 31 1969 config.dhall
+dr-xr-xr-x 2 root root 4096 Dec 31 1969 css/
+dr-xr-xr-x 2 root root 4096 Dec 31 1969 gallery/
+-r--r--r-- 52 root root 5902 Dec 31 1969 signalboost.dhall
+dr-xr-xr-x 12 root root 4096 Dec 31 1969 static/
+dr-xr-xr-x 2 root root 4096 Dec 31 1969 talks/
+```
+
+Here is my git repo for comparison:
+
+```console
+$ ls -l
+total 188
+drwxr-xr-x 2 cadey users 20480 May 18 20:21 blog/
+-rw-r--r-- 1 cadey users 77521 May 18 20:15 Cargo.lock
+-rw-r--r-- 1 cadey users 1795 May 18 20:15 Cargo.toml
+-rw-r--r-- 1 cadey users 198 Oct 30 2020 CHANGELOG.md
+-rw-r--r-- 1 cadey users 2779 Apr 5 20:32 config.dhall
+drwxr-xr-x 2 cadey users 4096 Apr 16 11:56 css/
+-rw-r--r-- 1 cadey users 1325 Jan 15 2021 default.nix
+drwxr-xr-x 2 cadey users 4096 Mar 15 2020 docs/
+drwxr-xr-x 2 cadey users 4096 Mar 21 20:23 examples/
+-rw-r--r-- 1 cadey users 1882 Apr 30 16:13 flake.lock
+-rw-r--r-- 1 cadey users 6547 Apr 24 20:35 flake.nix
+drwxr-xr-x 2 cadey users 4096 Jun 17 2020 gallery/
+drwxr-xr-x 6 cadey users 4096 Mar 21 20:23 lib/
+-rw-r--r-- 1 cadey users 887 Jan 1 2021 LICENSE
+drwxr-xr-x 2 cadey users 4096 Dec 18 00:06 nix/
+-rw-r--r-- 1 cadey users 1467 Feb 21 20:39 README.md
+drwxr-xr-x 2 cadey users 4096 Mar 21 21:21 scripts/
+-rw-r--r-- 1 cadey users 5902 May 18 16:44 signalboost.dhall
+drwxr-xr-x 5 cadey users 4096 Apr 5 20:32 src/
+drwxr-xr-x 12 cadey users 4096 Jan 10 17:22 static/
+drwxr-xr-x 2 cadey users 4096 Nov 10 2021 talks/
+drwxr-xr-x 4 cadey users 4096 Apr 16 09:56 target/
+drwxr-xr-x 2 cadey users 4096 May 15 07:59 templates/
+```
+
+The main problem is that my site expects all of this to be in the current
+working directory. In my site's systemd unit I have a launch script that looks
+like this:
+
+```nix
+script = let site = packages.default;
+in ''
+ export SOCKPATH=${cfg.sockPath}
+ export DOMAIN=${toString cfg.domain}
+ cd ${site}
+ exec ${site}/bin/xesite
+'';
+```
+
+However the Nix store isn't writable by user code. My patreon API client looked
+for its credentials in the current working directory. When I set it up on the
+target server I put the credentials in `/srv/within/xesite/.patreon.json`,
+thinking that the `WorkingDirectory` setting would make it Just Work:
+
+```nix
+WorkingDirectory = "/srv/within/xesite";
+```
+
+But this was immediately blown away by the `cd` command on line 4 of the script.
+
+I have fixed this by making my Patreon client put its credentials in the home
+directory explicitly with this fragment of code:
+
+```rust
+let mut p = dirs::home_dir().unwrap_or(".".into());
+p.push(".patreon.json");
+```
+
+This will make the Patreon credentials get properly stored in the service's home
+directory (which is writable). This will also make the patrons page work
+persistently without having to manually rotate secrets every month.
+
+Here's a good lesson for you all, make sure to print out the absolute path of
+everything in error messages. For the longest time I had to debug this from this
+error message:
+
+```
+patrons: xesite::app: ".patreon.json" does not exist
+```
+
+I was looking at the directory `/srv/within/xesite` and I saw it existing right
+in front of my eyes. This made me feel like I was going crazy and I've been
+putting off fixing it because of that. However, it's a simple fix and I was
+blind.
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/lib/patreon/src/lib.rs b/lib/patreon/src/lib.rs
index 68fbd7d..e611f43 100644
--- a/lib/patreon/src/lib.rs
+++ b/lib/patreon/src/lib.rs
@@ -1,4 +1,4 @@
-use std::{fs, io, path::Path};
+use std::{fs, io};
use chrono::prelude::*;
use serde::{Deserialize, Serialize};