- ensure all scraper functions have a `api.XYZ` version and a package-level convenience function
- isolate `the_api` to top-level convenience functions, in preparation for removal
- move a bunch of scraper functions around to be nearby their related functions
- new ErrLoginRequired
- remove obsolete APIv1 stuff (Feed, TweetDetail)
- rename scraper function GetUserFeedGraphqlFor => GetUserFeed
- fix go.mod Go version incorrectly claiming it's compatible with Go 1.16 (should be Go 1.17)
- escape HTML entities in messages so "<" doesn't scrape as "<"
- escape quotes in sent messages, so they no longer fail to send
- fix the web UI receiving the last 50 messages after every sent message instead of just the new ones
- rendering helpers moved to their own file (separate from response helpers)
- create a unified render helper instead of "buffered_render_basic_X" and "buffered_render_tweet_X"
- this helper takes 2 data objects: one with global data (tweet trove, logged in user, etc) and one page-specific
- this lets us remove the disgusting interface type
- modify the User List template to use UserIDs indexing into a global data object instead of a list of Users
- Chat list previews look a bit nicer, and display the time of last message
- Chat messages show sent_at time
- Messages with line breaks will actually display as paragraphs now
- Misc spacing improvements
- BUGFIX: fix preview DB query crashing if there's no messages in a chat