# 25 — App pubblica: catalogo e carrello Leggi `CLAUDE.md`. ## Obiettivo Shop navigabile e carrello, consumando solo le route `/shop/*` di Fastify. ## Cosa fare - `/shop`: griglia prodotti con filtri categoria, ricerca, paginazione (stato nell'URL). - `/shop/:handle`: galleria, varianti, prezzo IVA inclusa, schede tecniche pubbliche collegate (da `/documents`), aggiungi al carrello, JSON-LD `Product`. - Stato carrello con signals in un `CartStore`; badge nel header; drawer o pagina `/carrello` con modifica quantità e rimozione. - Chiamate con `withCredentials` (cookie `cart_id`). Il carrello si carica solo lato browser, non durante SSR. - Se l'utente è loggato nell'area privata come installatore approvato e ha il token, i prezzi mostrati sono quelli riservati (documenta come l'app pubblica ottiene lo stato di login: chiamata `/auth/refresh` con il cookie condiviso tra sottodomini). ## Criteri di accettazione - Aggiungi/modifica/rimuovi prodotto aggiornano subito totali e badge. - Il carrello sopravvive al refresh della pagina. - Pagine prodotto renderizzate lato server con prezzo e meta corretti. - `CLAUDE.md` aggiornato.