Really good start to your design docs, Francis! Here's my feedback so far:
MVP LIST
[x] Re-order your MVPs so that hosting on heroku is first, and production README is last
[x] Change the dates keeping in mind that the first day of fullstacks is the 21st (your first feature says the 19th)
[x] User Auth: which features are only available to logged in users?
[x] I’d suggest re-ordering such that live chat comes after channels (the live chat would appear within channels, and also is complicated to implement)
[x] Channels: spell out all the CRUD functionality: creating and deleting channels (creating would make someone admin of channel), and possibly updating (adding members)
[x] Channels: Where do users see channels (that they are a part of)? How / where can users join channels?
[x] You may want to consider making pinned messages and message reactions bonus, up to you
[x] Direct Messages: spell out the CRUD functionality (deleting and editing)
[x] Direct Messages: how do users initiate a direct message? Where can a user see a list of all their direct message conversations?
SCHEMA
[x] All: make sure to make every column and table name snake_case (no spaces)
[x] Users: name profile picture with id to make clear it’s a foreign key to the profile pictures table
[x] Users: what does the channels column refer to? If it’s to hold reference to the channels a user is a part of, consider using a joins table instead (many to many relationship); this joins table should probably reference a user's id and the id of either a channel or a dm convo (polymorphic association)
[x] Users: likewise for direct messages; if you’re talking about conversations (containers for dms, ala channels), consider just using your separate direct_messages table with the joins table described above
[x] Messages: should belong to a channel or dm conversation; consider using a polymorphic association there (for belonging to either a channel or a dm convo)
[x] Messages: parent_message should allow null for top level messages
[x] Channels: consider adding a foreign key for admin, if you want channels to have admins (also, and this could bonus, but you may want to allow channels to be private as well)
Really good start to your design docs, Francis! Here's my feedback so far:
MVP LIST
SCHEMA
channels
column refer to? If it’s to hold reference to the channels a user is a part of, consider using a joins table instead (many to many relationship); this joins table should probably reference a user's id and the id of either a channel or a dm convo (polymorphic association)direct messages
; if you’re talking about conversations (containers for dms, ala channels), consider just using your separate direct_messages table with the joins table described above