Dynamically generate product list