Reorganized into separate app, server, and client