add initial boilerplate code

still needs some cleanup and documentation