I am heading in that direction and adopting web components for a framework free client experience and a Phoenix backend to handle events and ship delta state updates without API ceremony and complexity using live_state and Phoenix channels so the backend is basically the same as LiveView responding to events over a websocket which interfaces with my phoenix contexts to fetch and update data but without html rendering, only state delta rendering.
The next step is to add some simple client side routing like vannila router, and then beyond that is both routing and local state caching strategies so the client doesn’t degrade to useless when disconnected using Google workbox..