Best Practices for Structuring Full-Stack Applications

I am working on a application which consists of a client and server project. I want to separate the server application into “headless” services and the web frontend, so I have three mix projects.
Currently I have everything in a single umbrella application. ElixirLS seems to be struggling with this setup, so I was wondering how you are doing it?

What are your best practices on how to separate concerns, but keep relevant code together?
I often need to change code in all three projects at the same time, so I would rather not manage three separate git repos.