Problem
Footwear shoppers compare several pairs at once. If moving between the listing, a product page, and the cart drops their selection or their filter, they leave.

Footwear shoppers compare several pairs at once. If moving between the listing, a product page, and the cart drops their selection or their filter, they leave.
A Next.js App Router storefront. Category is a URL search parameter, product pages are dynamic routes, and cart and wishlist live in a small global store that persists across navigation.
App Router pages for the catalogue and product detail; a client-side store for cart and wishlist; next/image with per-breakpoint sizes for the grid; product data in typed modules so the card and detail views share one shape.
Product imagery dominates a footwear store, and loading full-resolution shots for a whole grid made first paint heavy.
In commerce the grid is the product. Most of the engineering effort belongs to the listing view, not the checkout.
A deployed storefront where filtering, product detail, and cart state all work together and hold up on mobile.