So, I've had a lot of the same issues with Streamlit in terms of going beyond the very raw PoC phase, which is why we often end up using Plotly's Dash[1] framework (React + Flask) at work for this kind of task.
Taking a step back, what would the benefits be compared to Dash?
When dash came out I was a massive fan but found the abstraction layer not quite right.
When writing a python script you tend to think from top to bottom - as your script runs through. Dash adopts the html approach of defining a document and callbacks. After doing the refactor to this model I found the trade-offs of Dash wasn't worth the time saved of going straight to a more traditional stack, and again you're pretty locked-in to this choice now.
One example was writing a Dash SSO component turned into quite an ordeal (more so than most SSO integrations) - my aim here is to make an extension like this easier because you've got access directly to the FastAPI app with `hs.app`.
Taking a step back, what would the benefits be compared to Dash?
[1]: https://dash.plotly.com/