Documents in Users collection:
In addition to user data, each document would have a subcollection also called Conversations (or UserConvs to avoid confusion - these documents might just have an ID which matches the ID of documents in the main Conversations collection and the subject) which lists the conversations that the user is subscribed to
Documents in Conversations collection:
Each would have (simplest implementation) a subject
and a Users (or ConvUsers, where each document for the user only contains their name and maybe a url for their profile picture) subcollection, that lists the users that are subscribed to the conversation
and a Messages subcollection that contains the message body, the name or ID of the user that sent it, and probably a timestamp
How the app would work:
User signs in
Sees a list of users (maybe a User document also has a subcollection of Contacts - so you only list that users contacts rather than all users)
or a list of conversations (UserConvs)
New conversation - show a screen to set a subject, the first message and the other user(or users if you want group chat rather than just 1-1) to send to
when the new conversation is created (sent to firestore), the conversation is created as a document in the Conversations collection AND a document with the subject and users in the UserConvs subcollection for the user.
When selecting an existing conversation (from the list fetched from the UserConvs subcollection) you then fetch the full document containing the messages from the Conversations collection (obviously using security rules to check that the authenticated user is listed in the users/members(ConvUsers) subcollection for the conversation)
Deleting conversations - you might just unsubscribe the user from the conversation (remove the conversation from their UserConvs subcollection and remove them from the ConvUsers subcollection of the conversation), but not delete the conversation from Firestore, so that other users that didn't delete it can still view it... you might have a cloud function that checks for changes to the ConvUsers subcollection of a conversation and then remove the whole conversation document if it doesn't contain an users (i.e. when ever user in the conversation has deleted it / unsubscribed).
I'll let you figure out dealing with messages.
Would appreciate any feedback on my idea of how to implement this would be appreciated (obviously not the idea of having more than 2 users in a conversation since it's essentially a whatsapp copy).