Initial interface

This branch's purpose is to experiment with the api and initial organization of the files before committing anything to master.