So to answer your question directly, you could either add your JSON or GraphQL API directly in the same router that serves your LiveViews, or you could create a router specific to the API, or you could introduce a completely separate Phoenix endpoint and router that starts a 2nd web server. Both would boot as part of the app serving different ports. Phoenix remains a great choice for native clients if we're talking JSON/GraphQL, but because we also have native channels clients in objc/swift. Hope that helps!
Edit: I realize you could just use regular web sockets with Phoenix to do what Socket.IO does. But my confusion comes from actually getting it all to play nice with a LiveView front end, as well as a native app front end.
The channel docs give a solid overview of the server side, and we have a listing of third-party channels clients for most platforms here:
https://hexdocs.pm/phoenix/1.6.0-rc.1/channels.html#client-l...
The Getting Started guide on Phoenix has a lot of useful material even for your use case. I might be missing something crucial though :)