client-side shopping cart