refactored to use `product` and added tag component