The finished product, forgot to continually update here on github