The platform handles the entire outdoor event flow: customer registration with Payload auth, experience catalog divided by day (May 16/17), persistent side cart with Zustand, embedded Stripe checkout for paid products, immediate no-payment flow for free experiences, order management with status tracking, automatic confirmation emails with React Email templates, "My Bookings" section for logged customers, program with time blocks and rich-text descriptions, partner showcase, and complete CMS admin for staff. Responsive design optimized for mobile.
Key features
- Persistent cart: Zustand store with side drawer, localStorage persistence, add/remove items, quantity, real-time total calculation.
- Stripe checkout: embedded session without redirect, coupon support with validation, discount calculation, idempotency, webhooks (
checkout.session.completed, charge.refunded, payment_intent.failed). - Free products: optimized flow without Stripe, immediate order creation with
paid status, confirmation email sending, cart clearing. - Customer auth: registration/login via Payload auth (
customerAuth tRPC router), persistent sessions, logout, me query for user profile. - Multi-day program: product grid divided by dates (May 16/17), time blocks with
startTime/endTime, category filter, rich-text descriptions, images, PDF routes. - Automated emails: bilingual React Email templates (order confirmation, refund), Payload job queue with retry (3 attempts), Stripe webhook trigger.
- My Bookings: customer section with purchased orders list, view details per product, empty state with CTA, subscription confirmation toast.
- i18n: full IT/EN support with next-intl, locale routing, dynamic translations for products/program.
Data layer & integrations
- Payload CMS 3.73 with MongoDB for collections (products, orders, customers, programs, brands, categories, partners, media, users).
- Stripe 20 for embedded checkout, webhooks, coupon validation, idempotency, payment tracking.
- tRPC 11 + React Query 5 for type-safe APIs (
customerAuth, products, program, checkout, partners,
homepage, bookings, events). - Zod 4 for schema validation.
- Zustand for cart state management with persistence.
- Resend 6 + React Email for transactional emails.
- Vercel Blob for media storage.
- Background jobs Payload with retry (
send-confirmation-email, send-refund-email).
Security & access
admin, editor roles with granular RBAC on Payload collections.- Stripe webhook with signature verification and idempotency keys.
- Rate limiting on checkout endpoints (10 req/15min per IP).
- Customer auth with Payload sessions, password hashing.
- Access control: customers see only their orders, admin has full access.
- Input validation with Zod on all tRPC endpoints.
UI/UX and performance
- Tailwind CSS 4 for utility-first styling.
- GSAP for smooth animations.
- Radix UI for accessible components (Dialog, Select, Checkbox, Avatar, Separator).
- Lucide React and React Icons for icons.
- Sonner for toast notifications, next-themes for theme switching.
- TanStack Form for form management and client-side validation.
- Vercel Analytics and Speed Insights for monitoring.
- Responsive design, skeleton loading, lazy images, tuned LCP/CLS.
Technical highlights
- Next.js 16 + React 19 + TypeScript 5.
- Payload 3.73 (MongoDB), Vercel Blob media.
- Stripe 20 (embedded checkout, webhooks, coupons, idempotency).
- Zustand cart with localStorage persistence.
- Free products with optimized flow (no Stripe).
- Customer auth via Payload (register, login, sessions).
- tRPC 11 +
superjson + React Query 5. - React Email + Resend 6 with background jobs.
- next-intl 4 (IT/EN), GSAP, Pino 10 logging.
- TanStack Form, Zod 4, Tailwind 4, Radix UI, Biome, pnpm 10.