I've been playing with Remix.js a bit and come to similar conclusions. I'm not exited to go all in on route actions. I found myself using socket.io with TS interfaces to define the API. I guess pretty similar to how trpc works albeit with a bit more boilerplate. Currently looking into Vike (vite-plugin-ssr) to cut down on meta dependencies.