Repository for learning purposes, under construction, I recommend not following this structure completely