The ejabberd system was great at the time but lacked flexibility. But I think we saved at least 3 months of dev thanks to it.
I see you are using 3 languages, that's a lot of things to coordinate and keep in the brain. May I ask why you use node for the rest API and not elixir ? That would simplify things a lot.
Sure you can email me at jm at producture dot com
I am using 3 languages because I originally started this project using nodeJS+pg backend + flutter mobile apps. I've been experimenting with a lot of stuff as well, at one point switching to Go because I had some CPU heavy stuff, but I find myself going back to nodeJS because I'm most productive in it and I feel that its performance (I/O wise, since I'm doing DB or API calls) to dev time ratio is pretty good especially considering the number of well made dependencies and SDKs available.
I am still a noob at elixir (only a few days of total experience), so maybe some day I might migrate the REST API over. However, Phoenix channels are amazing and for that piece of the overall system I think I am happy to have stumbled upon it. I found that using phoenix channel API is a lot easier to work with both from server perspective and flutter client side. I need to figure out the proper way to auth (right now just auth'ing on socket connect against my nodeJS API, then continue).
I been working on it since May :D
Fwiw I was using firestore for real time before since it was easier. Now I like phoenix channels (I’m still struggling with the language truth be told, but it makes sense after reviewing at the code like eight times).
My app (social app, still wip) is currently using flutter for the mobile apps, a nodeJS backend for the rest APIs, and a phoenix server for the chats. I’d be interested to have a discussion if that’s okay.