#24 add a server/client framework