Receiving money online has never been easier, but there are a couple of small problems:

 - everyone has preferred sending and receiving platforms
 - if I want to get money, I end up copy/pasting my various links everywhere

I wanted a link like `panozzaj.com/$` that was easy to remember so I could type it on my phone.

Ended up making [a page on this blog](/$) for this. Buttons link to my preferred receiving platforms so folks can pick how they want to send money.


![Payment page showing Cash App, PayPal, and Venmo buttons](/images/payment-page.png)


It also takes an optional `?amount=` query parameter (in cents) and pre-fills the payment links. For example:

```
panozzaj.com/$?amount=1500
```

shows **$15.00** and links directly to that platform's payment page with the amount pre-filled.


### Gotchas

**Shell escaping.** `$` triggers variable expansion in bash, so any scripts or commands that reference the file need quoting.

I host my blog in S3, so there were a couple of additional production tweaks.

**Jekyll permalink needs a trailing slash.** `permalink: /$` generates `$.html`, which means S3 serves it at `panozzaj.com/$.html` instead of `panozzaj.com/$`. Using `permalink: /$/` makes Jekyll generate `$/index.html`, which S3 serves correctly.

**S3 adds a trailing slash redirect.** Requesting `panozzaj.com/$` returns a 302 to `panozzaj.com/$/`. To avoid this, after `s3 sync`, we copy the object to an extensionless key:

```bash
aws s3 cp "s3://${bucket}/$/index.html" "s3://${bucket}/$" \
  --content-type "text/html"
```
