I honestly can't say enough good stuff about the Kotlin Multiplatform system. You can use your React. You can bring MUI, so it's pretty by default, and animations / UI are really smooth.
Because of Kotlin Serialization, you can speak Protobuf or JSON really easily with Kotlin data classes, across platform boundaries.
Kotlin Coroutines support means your implementation code can work on top of ListenableFuture on the JVM or Promise in the browser.
It's just great. Very likely to be maintained, and even improved greatly, over the next 10 years, as it is the basis of Jetbrains' own business.
Run it native (GraalVM) or JVM on the server, JS in the browser.