figuring out how to architect this app