Please read the first article, then proceed to the second and this repository to understand the reasoning behind the current structure.