La piattaforma gestisce l'intero flusso dell'evento outdoor: registrazione customer con autenticazione Payload, catalogo esperienze diviso per giornata (16/17 maggio), carrello laterale persistente con Zustand, checkout Stripe embedded per prodotti a pagamento, flusso immediato senza pagamento per esperienze gratuite, gestione ordini con tracking status, email conferma automatiche con template React Email, sezione "Le tue prenotazioni" per customer loggati, programma con blocchi orari e descrizioni rich-text, partner showcase, e admin CMS completo per staff. Design responsive e ottimizzato per mobile.
Funzionalità principali
- Carrello persistente: Zustand store con drawer laterale, persistenza localStorage, add/remove items, quantità, calcolo totale real-time.
- Checkout Stripe: sessione embedded senza redirect, supporto coupon con validazione, calcolo sconti, idempotenza, webhooks (
checkout.session.completed, charge.refunded, payment_intent.failed). - Prodotti gratuiti: flusso ottimizzato senza Stripe, creazione ordine immediato con status
paid, invio email conferma, svuotamento carrello. - Customer auth: registrazione/login via Payload auth (
customerAuth tRPC router), sessioni persistenti, logout, me query per profilo utente. - Programma multi-giornata: griglia prodotti divisa per date (16/17 maggio), blocchi orari con
startTime/endTime, filtro per categoria, rich-text descriptions, immagini, PDF percorsi. - Email automatiche: template React Email bilingue (conferma ordine, rimborso), job queue Payload con retry (3 tentativi), trigger webhook Stripe.
- My Bookings: sezione customer con lista ordini acquistati, view details per singolo prodotto, empty state con CTA, toast conferma iscrizione.
- i18n: supporto completo IT/EN con next-intl, locale routing, traduzioni dinamiche per prodotti/programma.
Data layer e integrazioni
- Payload CMS 3.73 con MongoDB per collezioni (products, orders, customers, programs, brands, categories, partners, media, users).
- Stripe 20 per checkout embedded, webhooks, coupon validation, idempotenza, payment tracking.
- tRPC 11 + React Query 5 per API type-safe (
customerAuth, products, program, checkout, partners,
homepage, bookings, events). - Zod 4 per validazioni schema.
- Zustand per cart state management con persistenza.
- Resend 6 + React Email per email transazionali.
- Vercel Blob per media storage.
- Background jobs Payload con retry (
send-confirmation-email, send-refund-email).
Sicurezza e accessi
- Ruoli
admin, editor con RBAC granulare su Payload collections. - Webhook Stripe con verifica firma e idempotency keys.
- Rate limiting su checkout endpoints (10 req/15min per IP).
- Customer auth con sessioni Payload, password hashing.
- Access control: customers vedono solo i propri ordini, admin ha accesso completo.
- Input validation con Zod su tutti gli endpoint tRPC.
UI/UX e performance
- Tailwind CSS 4 per utility-first styling.
- GSAP per animazioni fluide.
- Radix UI per componenti accessibili (Dialog, Select, Checkbox, Avatar, Separator).
- Lucide React e React Icons per icone.
- Sonner per toast notifications, next-themes per theme switching.
- TanStack Form per form management e validazione client-side.
- Vercel Analytics e Speed Insights per monitoring.
- Responsive design, skeleton loading, lazy images, ottimizzazione LCP/CLS.
Highlight tecnico
- Next.js 16 + React 19 + TypeScript 5.
- Payload 3.73 (MongoDB), Vercel Blob media.
- Stripe 20 (checkout embedded, webhooks, coupon, idempotenza).
- Zustand cart con persistenza localStorage.
- Prodotti gratuiti con flusso ottimizzato (no Stripe).
- Customer auth via Payload (register, login, sessioni).
- tRPC 11 +
superjson + React Query 5. - React Email + Resend 6 con background jobs.
- next-intl 4 (IT/EN), GSAP, Pino 10 logging.
- TanStack Form, Zod 4, Tailwind 4, Radix UI, Biome, pnpm 10.