refactored to support new products with more ease
after-interview
Merge branch 'refactor'
After interview refactor