structure done on client side