feat(js): restructure MVC