TODO user-images-extract-to-table:
User profile images and banner images => extract to table.  Add `is_downloaded` column.  Add test for double-downloading a user, shouldn't change the write-times on these files

TODO update-all

TODO broadcast-cards
panic: Unknown card type: 3691233323:periscope_broadcast
panic: Unknown card type: 745291183405076480:broadcast

TODO video-bitrates
- add "bitrate" and "available bitrates" fields
- option to upgrade or downgrade video quality

TODO: videos-view-count
- videos don't parse properly in APIv2

TODO video-not-downloading: https://twitter.com/JustinPulitzer/status/1496709662602932224

TODO get-user-tweets-user-doesn't-exist

TODO bash-completions
- Should have bash completions.

TODO twitter-spaces
- add `is_details_available` flag

TODO authenticated-requests
- media tab
- quote-tweets
- notifications

TODO post-tweets
- post tweets
  - reply to a tweet
  - quote-tweet a tweet
- retweet a tweet

TODO spaces-fetch-participants-info
- some user information is available in a Spaces result.  Right now we just render them as null users (handle = "", id = 0) if they're not fetched already
- distinguish whether someone was an admin in the space or not

TODO spaces-fetch-sharings
- you can fetch the stuff that was posted in the jumbotron

TODO tweets-with-italics
- https://twitter.com/exit_org/status/1656813511572443141

TODO authenticated-only-request-warning
- warn when attempting to run requests which require authentication without a session active
  - right now it will try and then produce an HTTP error (404)

TODO unknown-user-upgrading
- if an unknown user (created to satisfy SQLite integrity check on user_id foreign key) has user details fetched, the "Join Date" and other zero-value fields should update with the new value

TODO apiv2-tombstones
- on Tweet Detail:
  - tombstones in replies to the focused tweet
- on User Feed:
  - tombstones (e.g, "Age restricted") that show up as top-level entries
    - keep in mind that these might be retweets; the entry-id is the RetweetID, not the TweetID

TODO tidy-up-command-line-flags
- make flags that are part of a subcommand go after that subcommand (e.g., `twitter get_user_tweets -n 200 ...`)

TODO: fatih-color
- replace "terminal-utils" with "fatih/color"

TODO: mobile-requests
- implement mobile versions of various requests
- Check in `pkg/scraper/test_responses/mobile_requests`

TODO: search-bottom-cursor
- Entry type "TimelineReplaceEntries" that replaces the cursor in the timeline instead of the new timeline having a new one
- As first step, need helper function that returns the []Instruction element in a APIV2Response (not just the MainInstruction which is TimelineAddEntries)
	- since different requests have different paths to the Instructions, e.g., Data.User.Result.Timeline.Timeline.Instructions vs Data.Home.HomeTimelineUrt.Instructions, etc

TODO: newer-version-tombstone
- Preserve tombstone after re-scraping

TODO: failed-tweets
- https://twitter.com/_HARVEY__DENT_/status/1755665502385377720
- "Empty tweet": https://twitter.com/wispem_wantex/status/1581333495393107968

TODO: new-content-type
- https://twitter.com/itsbackwereover/status/1757947530506043872

Webserver
---------

TODO: SQL-logger

TODO const-select-fields
- There's a few queries that use "select ..." and write out all the fields.  Put the field names in one spot

TODO compound-query-structs
- Right now the result structs for the compound queries (e.g., "Feed", "TweetDetail") are in the `persistence` package.  They don't go there probably

TODO: login-routes-tests
- Make the scraper.API object injectable somehow (get rid of singleton pattern) and add tests for login and change-session sequences
- Also test profile.ListSessions()

TODO: webserver-session-arg-active-user
- make the active user get set on initializing the Application object if a --session flag is given

TODO: paste-twitter-urls-in-search-bar
- pasting a link from twitter.com into the search bar should handle it properly
	- space

TODO: show-errors-in-UI
- if an HTTP request fails, show an error in the UI somehow
  - scrape failed due to rate limiting
  - non-HTMX 500 errors now show a weird HTML page

TODO: refactor-compound_queries_test-file
- Move the tests for user feeds into the compound_queries_ssf_test file

TODO: features-from-qt-version
- Add all features from the Qt app to the web UI
  - when previous tweet in thread is missing, put a "fetch tweet" button to get it

TODO: dms
- fetch chat room history on opening
- add scrollback / pagination
- add search

TODO: search-terms-highlighted
- on Search page, highlight matches for the search keywords

TODO: profile-image-template
- There are a lot of places that use a circle profile image aside from author-infos

Windows Build
-------------

TODO: windows-session-list
- Check that sessions load as @Offline_Twatter instead of @test\Offline_Twatter on Windows

TODO: windows-automated-build
- build and upload to offline-twitter.org on release branches
