- Required Tools for the Project
- Install React / Redux Dev Tools for Google Chrome
- Git Clone and Install Dependencies
- Organize Project, Create Routes
- Setup Firebase
- Create Register Form
- Register User with Email and Password
- Form Validation for Register Form
- Clear Errors upon Registration, Show Loading State
- Add Name and Avatar to Users, Add New Users to Database
- Create Login Form and Functionality
- onAuthStateChanged to Listen for Login/Register
- Set up Redux to Make User Data Available on Global State
- Add Spinner Component for Loading State
- Scaffold App Components
- App Header / UserPanel Dropdown
- Add Signout Functionality, Clear User Action
- Passing Redux State via Props
- Add Avatar to User Dropdown
- Add Channels Component
- Create Modal for Adding Channels
- Create Channels Collection, Add First Channel to Database
- Display Channels with child_added Listener
- Put Channel on Global State, Add channel_reducer
- Set First Channel on Page Load, Show Active Channel
- Remove Listeners with componentWillUnmount
- Scaffold ColorPanel / Message Components
- Create Messages Collection, Add First Message to Database
- Controlled Input to Clear Message, Disable Button on Loading State
- Display Messages, Create Message Component
- Create File Modal to Upload File
- Put Media File in State, Add Mimetype Validation
- Upload Image File, Post Image Message
- ProgressBar Component to Represent Image Upload
- Options for Displaying ProgressBar
- Add Channel Title / Users Count to Messages Header
- Add Ability to Search Messages
- Create DirectMessages Component
- Add Users to DirectMessages Component, Show If Online/Offline
- Put DirectMessage Channel Data in Global State, Set as Private Channels
- Functionality to Add Messages / Images to Private Channels
- Display Active DirectMessage Channel
- Add Notifications to Public Channel
- Add Starred Component to Hold Starred (Favorited) Channels
- Update 'Starred' Property for User Data Upon Starring Channel
- Display Starred Channels in Starred Component
- Scaffold MetaPanel Component
- Display Channel Info in MetaPanel
- Display Top Posters for each Channel in MetaPanel
- Add Color Picker Modal to ColorPanel
- Attach Chosen Colors to User Data
- Display Saved User Colors as Icons, Change App Colors on Click
- Create Change Avatar Modal
- Crop Uploaded Image with AvatarEditor
- Upload Cropped Image to Firebase, Put on User Profile
- Add Typing Collection to Track When Other Users Typing
- Add Typing Component / Animation, Display in Messages
- Add Typing Listeners to See When Other Users Typing
- Emoji Picker to Add Emojis to Messages
- Automatic Scroll to Bottom upon New Message
- Show Message Skeleton when Messages Loading
- Create Key Combo Shortcuts to Send Messages
- Remove Listeners upon Component Unmount
- Write Firebase Storage Rules for Media Files
- Write Database Rules for App Data
- Deploy our App with Firebase Tools