client side app