* [ ] Use versioning in /api/check. To elaborate, make it so that when a version string reported by server is higher than expected, force user to reload the page (which should be all that is needed for users to be loading latest front-end assets). Possibly also use it in /api/tokens/verify, for dashboard page.
* [x] Better `df` handling (system disk stats). To elaborate, either properly show disk usages of directories that have sub-directories, or only show disk usages of whitelisted directories (thumbs, chunks, etc).
* [ ] Add "View uploads" button in "Manage your albums" page. Assuming the sidebar album menus are collapsed, users can optionally use this button as a shortcut, if they already happened to be in that page.
* [x] I forsaked all `Promise.all()` in favor of `await-in-for-loop` a while back. I personally think it was fine, considering a lot of them were tasks that required serial processing (continuation be dependant on previous iterations), but maybe I should review the current codes to find any sections that would do just fine, or maybe even great, with `Promise.all()`.
I think it may be fair to load the colorscheming JS file before `style.css` gets loaded. Meaning the colorscheme script in particular needs to be in HEAD tag, as opposed to the standard where we put all JS files at the end of BODY tag.
Once this is implemented, default colorscheme should be the old dark grey.
* [ ] Turn `render.js` into a standalone script (don't use `page` window variable).
Due to the fact that it needs to have `page` variable defined first, it can't ever be loaded before `home.js`.
This may prevent proper async load of JS assets, which I'd like to look into, in pursuit of even more speed.
* [ ] Remember last pages of uploads & users lists.
Consider remembering last pages of each individual albums as well. When deleting an album, properly delete its remembered last page, if any. When listing albums sidebar and/or listing albums in Manage your albums, also delete remembered last pages of any missing albums (assume the albums were deleted from another device).
* [x] Descriptive upload progress, such as upload speed. Also tell user which chunk is currently being uploaded, to avoid confusion when progress "stops" when shifting to the next chunk.
* [ ] Delete own account feature. Since we already have delete user API endpoint, which also already includes the ability to delete uploads associated with the account, it should be easy to expand it a little to allow deleting own account and uploads.
* [ ] Add uploads date filter, possibly with support for range and operators (e.g. less than, more than, etc). Should convert human-readable date inputs locally into unix timestamps, so users can just follow their local timezones, since dates will already be displayed using their browser's timezone.
* [ ] Add uploads sorting feature. Attempt to make this work even when using filters.
* [ ] Find a way to detect whether a user had disabled their browser's built-in smooth scrolling capability. We will then use that to decide whether we should use smooth scrolling when auto-scrolling during navigation (for now smooth scrolling is always enabled; and polified if applicable).
* [ ] Support [fragments](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web#Fragment) for dashboard sidebar menus.
* [ ] When registering a new account, check for existing account(s) with the same username case-insesitively (for people who forgets how exactly they wrote their username). But still forces case-sensitivity when trying to login (cause this is a considerable security layer).
**Downgraded to lowest priority:** This seems pretty annoying to implement (using either `like` operator or `upper` function seem pretty slow-ish). It seems to be a much better idea to force [nocase collation](https://www.sqlite.org/datatype3.html#collating_sequences) onto username column instead. It'll also improve performance when querying users table by username. But that requires rebuilding existing users table and sacrificing duplicates, which makes it not that good of an idea either.