As soon as you want to view something through a different direction you run into this problem. Sure, you can embed chat messages into a conversation, but what if you want to look up every message by a particular user?
I would be surprised to find that 90% of apps don't have this kind of requirement. Pokemon is easy because that data is static.
Viewing all posts by a user is solved with classic denormalization. You maintain a separate index of post by user and do two writes per chat msg. It's a case where a user has no incentive not do the second write so it be fine to implement clientside. If however it was business critical, you would have a server side process listen to all chat messages and write the user to message index with the admin account. That index would essentially be eventually consistent.
I would be surprised to find that 90% of apps don't have this kind of requirement. Pokemon is easy because that data is static.