For the UI, I use a combination of Common UI and layer pattern.
Right now, there are 2 layers, registered in the W_Base widget and mapped with a tag.
You can push a widget for every layer using the function:

If you add multiple widgets to the same layer, be mindful of their order, as only the last one added will be displayed.
When a widget is deactivated, the system automatically falls back to the previous widget in the stack and displays it.
<aside> ⚠️
Widgets MUST derives from AstActivatableWidget, otherwise they’re not accepted in the Add function.
</aside>
Check W_MainMenu flow to see an example of how this system works.