I’ve found it nice to keep streams conceptually simple and “pure”. So when the UI requires collections to be broken up into sections, I’d break a stream up into multiple streams. In your case, you could group the messages by date when you pull the messages from the database and then create a stream for each individual day’s messages. For reference, the TodoTrek repo shows how to stream todos grouped into lists.
While this encapsulation may add some complexity and overhead upfront, I’ve found it easier to reason about and extend down the line. For example, it would be fairly straightforward to implement a feature allowing users to delete all messages sent on a specific date by clicking a delete button in the date divider.
me: a message from two days ago
-----Sept 24----- [x] => delete all messages sent on 11/24
me: a message from yesterday
them: a reply from yesterday
-----Sept 25----- [x] => delete all messages on 11/25
me: a message from today