Restructure the entire app.

This branch splits the API into modular components - thus eliminating the issue
with the large file.

It also separates the API and frontend into two separate applications.

This branch will require extensive testing + still needs some work (on my
part).

Currently, it's in a working state but I intend to do some additional
refactoring.