No reliance on a framework
Reorganized for publishing to NPM