refactor: better controller with `BaseCtrl` class

Closes #97