refactor to split into server and data containers

Just so we don't have to rebuild the server part whenever there is an update. Feel free to reject this PR if you think I changed too many things.