Turismo
Web turística multilingüe con CMS, booking y SEO internacional
Plataforma web completa para PurpleBasqueTours, operador de experiencias y tours privados en el País Vasco. Problema: necesitaban una presencia online que gestionara tours, precios y contenido en varios idiomas sin depender de un desarrollador para cada cambio. Solución: Next.js 15 App Router con Sanity CMS headless como backend de contenido, routing internacionalizado por [locale] (EN/ES), integración de booking con Cal.com, formulario de contacto con validación Zod y envío por Resend, galerías de fotos con yet-another-react-lightbox, y monitoreo con Sentry + Vercel Analytics. Seguridad: CSP headers, HSTS, permisos restrictivos. Testing: Jest + Playwright E2E. Resultado: sitio autogestionable preparado para público internacional con infraestructura profesional.
Métricas
- Autogestionable — Contenido desde Sanity CMS: Tours, precios, fotos y textos multilingües editables sin tocar código
- Booking integrado — Cal.com embebido: Sistema de reservas profesional con slots, confirmaciones y sin fricción para el usuario
- EN + ES — Multilingüe completo: Routing por locale, contenido traducido en Sanity y SEO por idioma
Decisiones clave
Contenido multilingüe gestionable por el cliente
El operador necesitaba controlar textos, tours y precios en inglés y español sin asistencia técnica.
Enfoque: Sanity CMS con schema de traducciones por campo, flujo de publicación con webhooks y scripts de validación automática.
Integración de booking sin fricción
El sistema de reservas debía sentirse parte del sitio, no un iframe externo.
Enfoque: Cal.com embed con React SDK, sincronización de estilos con el design system y CSP configurado para permitir el frame sin romper seguridad.
Calidad de código y despliegue confiable
Un sitio con CMS + booking + formularios necesita tests sólidos para no romper nada en cada cambio.
Enfoque: Jest para unitarios, Playwright para E2E, Sentry para errores en producción, Vercel Analytics para rendimiento, y CI con lint + typecheck + test + build.
Base técnica
Next.js 15 App Router + Sanity CMS headless. Routing i18n por [locale] (EN/ES). Componentes server-first con client islands para interactividad (booking, formularios, lightbox). CSP headers, HSTS, next/image con remotePatterns de Sanity CDN. Webhooks de Sanity para revalidación on-demand.
Aprendizajes aplicables
- Arquitectura de contenido multilingüe con Sanity CMS y routing por locale en Next.js App Router
- Integración de booking embebido (Cal.com) con diseño cohesivo y CSP restrictivo
- Formularios server-side con React Hook Form + Zod + Resend
- E2E testing con Playwright para flujos multilingües críticos (navegación, booking, contacto)
- Security headers hardening (CSP, HSTS, COOP, CORP) en Next.js