------ Minimum Viable Product ------ TypeScript and SASS Clean up TypeScript type names Unit tests would be pretty nice for the cache stuff Get rid of the duplicate fetch metadata query at startup (fetch-server) Add labels to input boxes Server requests should never be sent if not verified rather than waiting 5 seconds to verify - May fix the duplicate fetch-members request - However, we probably should wait if nothing is in the DB cache - currently there are many requests that are getting sent before verification - Relates to the _queryServer function in client-controller.js - Especially since everything gets refreshed on verification anyway Rework message data structure to be a linked-list that stores the previous message in the channel (or the message index?) - Maybe just the send time is fine too... Create invite token dialog Create invite with privileges Kick out members - Do we delete all messages from the member? - Probably not, just remove them from the member list and don't let them connect again. When leaving, send a courtesy message to the server so that the member no longer has to show up on the members list. Loading overlay before any servers connected to Re-order text channels for server admins Remove text channel for server admins Flavor text length restriction Admin role management - Create role - Delete role (also removes from all users with specified role) - Assign role privileges - Apply role to a user - Remove role from a user Install server node script? For a lower effort, MUCH more contained install, use a sqlite3 database on the server side? - uuidv4 id tables? probably switch to integer primary keys - hashing data has to be done with node Keep scroll position after clicking try again when loading messages fails More testing with offline servers. - How to make a pending-sent message timeout? Does it need to? - Don't even send the queryServer requests when the server still is not verified? - Again, would be better to have queryServer only called one time to refresh the cache in most situations rather than every time. Packaging and Distribution First-time setup dialog? Custom download directory (and preset to something not hard-coded) - Use browser-based download rather than custom download manager - Generally use browser-based file transfers rather than fs Sent messages highlight channel / server (notifications) Offline status that does not attempt to connect to server Test multiple connected members at once, multiple connections from the same client at 2 servers on the same machine seems to work already Something is causing a fetch-messages-recent request with null channelId Properly figure out TLS so that the server identification can be done with x509 certs rather than an extra challenge-signature Get .cordis file from HTTP request Add hover overlay for ellipsized text Date spacer for messages on new days Member Role Groupings Channel groupings? Show overlay when hovering over ellipsized text Add server avatar to .cordis file Use server name / member display name / channel name as option in log files Default paths for file opening stuff should be properly handled cross-platform Server audit logs - Registration times per-user, role changes, who created tokens, etc. ------ After Voice Channels ------ Kick users for server admins - Right click dialogue Per-user audio boost ------ SECURITY RISKS ------ A DoS attack vector exists by sending oversized socket.io packets - The max-size stuff should be good enough for now. - socket.io-stream for resource transfers ------ Future Goals ------ Auto-load things that will need to be fetched later (slowly) when there's nothing else to do. Revoke tokens with a flag rather than a full revocation, allow the user to undo the revocation from the list. - Auto-delete tokens after a day of being revoked? Resources are left forever, they need to be garbage collected when no longer in use - Server Icon is Changed - Avatar is Changed - Message is Deleted Don't re-fetch the recent messages if they have already been fetched since the last disconnect - I think this also goes for channel list + members Allow SVG profile pictures / image resource elements Clicking maximize a second time should un-maximize For looks, add some images to the overlays BUG: Members not getting moved to the fully correct position. I think this happens when two are updated in VERY quick succession BUG: Overlay closes on mouseup rather than only when clicked on Multiple tokens for the same member on multiple devices Send a message to the server when leaving it (so that the member can be removed) Hello Gamers, this is definitely not needed in the MVP, we can definitely have this security risk sitting around - Proper TLS to prevent MITM attacks? (could be forwarded at this point :|) Make **abcd generate "**abcd" instead of "abdd" - Non-closed _, *, **, *** generate their text if not closed rather than making the rest of everything underline/italic/bold/etc. - **abc*d** -> abc*d Dedupe _queryServer requests? Messages, members, and text channels only need to be cache-checked one time after verification. - Convert fetch events to not query the server every time Auto-set away? <- This has privacy concerns Set status across all servers at once Verify and maintain last used status Multiple connections from same member - Properly update status Right-click to save images Remove deleted messages after reconnect before updating infinite scroll (corner case!) - Since the top/bottom message could be deleted, possibly select messages based on a date range? - 'Select-around' where it selects more messages on either-end if messages were deleted. (good for if a lot of messages were deleted) - Without this, if a top/bottom message was deleted (and we're not using deleted flags), the infinite scroll will get stuck at the deleted message. Socket.io use socket.io-stream for resources Max resource size / text message size per-server config Spam prevention Emojis! Roles Client-side nicknames / notes per-user Should we really be jpegging scaled-down images or would it be better to only store one resource in some situations. Sometimes messages take a long time to send, even on localhost. Find a way to reproduce this. Text channel day dividers Popup image preview css transition Play gif on hover, identify gifs with icon in top-right In-memory cache also store one or two larger resource(s) (of GIF size, 5-20 MB) so that when gifs are hovered over, they are cached in memory in case they are hovered out and back in quickly Pending sent messages show up within the channel feed and allow for another message to be queued to be sent Delete messages? (make sure to clean up resources) Update messages? Private Messages Larger file sharing Cache (in memory) elements returned from q.js rather than re-querying all the time ------ Stretch Goals ------ PNG -> SVG for any client Test building a list and swapping it out rather than updating the elements (especially for channel-list) Maintain scroll position after reconnect when scrolling through feed - Also refresh current feed Peer-to-peer network option Embedded Videos Save Scroll Position Preview more image types? (webp, bmp, etc.) Create registration file dialogue (for server admins) Database encryption? Multiple public keys associated with one member Better server/identity differentiation in cache? (getServerConfigs) Web browser client? Mobile App? Private messages? Bots