client side of the app