first, untested pass at the models. no views or templates have been written