initial commit; still needs some work, but functional and educational