Thanks! Unfortunately I haven't done much with it in a while, just enough to keep it running on modern linux systems, but it still works nicely. (code is here: https://github.com/mempko/firestr)
Data lives on the clients. How multi-writer is handled is up to the app you write but I have built in support for vector clocks. So for example, the built-in app editor uses vector clocks and a merge algorithm.
I thought about adding CRDTs for making syncing data structures easier. Maybe there is someone out there that is motivated...
Regarding the architecture, where does the data live? On the clients?
How are you achieving a multi-writer functionality? Meaning, how can two people edit the same chat data structure?