Disorder is a fullstack single-page web application that closely follows the design and features of the popular gaming live-chat system, Discord. Users can securely log in, create and edit servers and channels, and chat in real time with other logged-in users.
ActionCable allows users to receive messages, friend requests, and server invitations instantly
Users are able to chat in real-time with each other using channels.
Live chat is the primary feature of this application. It utilizes Rails Action Cable, subscribing users to chat channels for servers and direct messages.
Once a user has logged in, subscriptions to the messages channel are created and saved to the redux store.
Whenever a user creates or edits a message, the frontend components send the message to the MessagesChannel. When the messages channel receives an edit, the message entry is updated and broadcast to the relevant channel.
If the message channel is creating a new message, the message is broadcast through MessagesJob perform method. This allows the backend to handle broadcasts for messages sent through the MessagesChannel or created through tradition Ajax requests. This method is used to account for messages containing images uploaded to AWS which cannot be handled through ActionCable.
Users are able to create, edit, and delete servers as well as upload an image from their local storage as a server's cover photo using AWS's S3 Storage System, securely saving their media.
Users are also able to create, edit, and delete channels within servers to diversify their conversation funnels.
Thanks to AWS image hosting, users can upload images to message channels and customize their user and server icons.
Component that takes in styling props, props to trigger on hover transitions, and can contain either text or image links.
Simple Modal component. Necessary props are handleClose, function, and show, boolean. Will align content at center of the page unless passed a position prop with x and y coordinates.
Renders text editing area using the Slate library. Accepts placeholder, text, and submit props.