I spent 2 weeks evaluating peer-to-peer protocols for my app.
There are many promising solutions suitable for different use cases.
I likely misunderstood something and welcome corrections!
I would worry about users "missing" each other and never being able to get a copy of whatever data from each other.
I would expect users would read silence as "this app doesn't work" or "no one likes me", not as.. *takes deep breath*...
> "oh, I must have missed that message because the senders client / senders friends clients were never connected at the same time as mine, and my client was never connected during the servers retention period after it was sent"
Ultimately I think the server retention period will have to be cranked really high to make the app usable and prevent missed messages.. And there's really no limit to "how high".
So at that point, the situation ends up looking rather silly, the server is going to be the primary data store whether we like it or not, simply because its the one that folks can connect to.