viewport.js looking awesome, first stage in refactoring into an actual engine that makes sense