[refactor] encapsulate keyboard logic into keyboard.coffee