finally a solid architecture

tried a lot of different approaches, this one seems feasible