So, it turns out that css background-images don't get loaded until the relevant selector is triggered.
Many people might say "neat!"
I used it to build a bi-directional CSS-only async chat.
There are a bunch of free/cheap options for hosting static sites (just html/css/js) out there: github pages, netlify, firebase hosting - but when I want to build a bulletproof static site "for real", my go-to toolset is S3 for hosting with Cloudfront caching in front of it.
Some people, when confronted with a problem, think "I know, I'll use AWS Lambda." Now they have thousands of concurrent problems.
If you want to know how to build a sanely-architected url-shortener using AWS Lambda on top of a datastore like Postgres, this is not the post for you. We're going to build a Rube-Goldberg url-shortener using just Lambda.
Update: This post became a talk at RubyConf 2018.