TASKS.md — KAI CLUB
Orden de ejecución real. Cada fase termina con validación (lint + typecheck + tests + build) antes de pasar a la siguiente. Estado: [ ] pendiente · [x] hecho · [~] en curso.
F0 — Auditoría y estrategia ✅ 2026-08-11
- Descarga y análisis de las 8 páginas (HTML servido + DOM renderizado)
- Lighthouse móvil real (Perf 25, 199 MB, LCP 19,8 s)
- Extracción de carta/bebidas/tarifas reales desde los PNG
- Workflow multi-agente: 6 auditorías + mercado + verificación adversarial
- Docs: KAI_AUDIT, PRODUCT_STRATEGY, ARCHITECTURE, DESIGN_SYSTEM, DATABASE_SCHEMA, SEO_STRATEGY, TASKS
F1 — Fundación (P0)
- Scaffold Next.js 16 + TS + Tailwind 4 + Prisma (BD
kai_cluben PG16 local Docker rcsd-pg) - prisma/schema.prisma según DATABASE_SCHEMA.md + migración inicial + seed (productos reales, carta [CONFIRMAR], settings)
- next-intl: /es /en /de, slugs localizados, hreflang en layout, messages base
- Design tokens Tailwind (paleta Kai Dayparts, Antonio+Manrope self-hosted vía next/font)
- Componentes base: Header, Footer (con aviso subvención EU), BookBar móvil, WhatsAppCta contextual
- Validación F1
F2 — Home narrativa (P0)
- Hero (poster inmediato; vídeo cuando el cliente entregue material; presupuesto ≤2,5 MB móvil)
- KaiTodayStrip (clima Open-Meteo + sunset calculado + datos admin; oculta lo que no exista)
- Secciones: Espacios (Kai/Kanaloa/Brasserie) → Experiencias → Carta teaser → Bebidas teaser → NEXT AT KAI → Celebrar → Galería teaser → Reseñas → Localización → CTA final
- OG images por página; metadata por locale
- Validación F2 (incl. QA 375/390/430 px)
F3 — Motor de reservas (P0, el corazón)
- lib/availability: POOLED (tx serializable) + UNIQUE (índice parcial), expiración PENDING 20 min (cron)
- lib/pricing: acceso×pax + consumo mínimo por scope + extras + reglas sáb/dom/festivos vs L-V
- Wizard /reservar 4 pasos móvil-first (fecha+pax → experiencia/reservado → extras+datos → confirmación)
- Rama «mesa para comer» → CoverManager (locale correcto + UTM + evento GA4)
- Confirmación: página + email (outbox) con código KAI-XXXXXX
- Tests Vitest de availability/pricing (incl. concurrencia y festivos) + E2E Playwright del wizard
- Validación F3
F4 — Carta y bebidas (P0)
- /carta y /bebidas HTML desde BD (sticky nav de categorías, iconos alérgenos/dieta, precios con price_note)
- Buscador/filtro simple client-side (sin librerías pesadas)
- Traducción EN/DE de la carta seed (marcada [CONFIRMAR])
- Validación F4 (perf: carta < 100 KB HTML+CSS)
F5 — Eventos + Celebrar (P0/P1)
- /eventos + [slug] (empty-state honesto si no hay) + NEXT AT KAI en home
- /celebrar: wizard de lead (tipo→invitados→fecha→servicios→datos) + consentimiento RGPD
- Aviso interno de lead (outbox) + evento GA4 private_event_lead
- Validación F5
F6 — Admin (P0)
- Auth.js credenciales + RBAC + rate-limit login + audit_logs
- Reservas: listado día/rango, detalle, cambio estado, creación manual (fuente PHONE/WHATSAPP)
- Productos: precios, cupos por día (calendar_overrides), activar/desactivar
- Carta/Bebidas: CRUD items y categorías (i18n inline)
- Eventos: CRUD con imagen · Leads: kanban NEW→WON/LOST · Clientes: ficha RGPD (export/anonimizar)
- KAI TODAY: formulario 30-segundos · Galería: upload con pipeline sharp · Ajustes: settings tipados
- Dashboard honesto (reservas hoy/futuras, ocupación, leads; ingresos solo con Stripe activo)
- Validación F6 (E2E flujo admin crítico)
F7 — SEO + Analytics (P0/P1)
- sitemap.xml trilingüe, robots.txt, canonicals, Schema (Restaurant/Event/FAQ/Breadcrumb)
- /faq con preguntas reales + FAQPage schema · /legal /privacidad /cookies + banner Consent Mode v2
- GA4: 8 eventos de conversión · plan de redirects 301 (nginx) documentado para el go-live
- Validación F7
F8 — Performance + Seguridad + QA (P0)
- Pipeline media: AVIF/WebP srcset, vídeo comprimido, presupuesto por página verificado
- Lighthouse móvil objetivo: Perf >90 · A11y >95 · BP >95 · SEO >95 (medido, no estimado)
- Revisión seguridad: RBAC en actions, Zod, rate-limit, cabeceras/CSP, cookies, secrets
- QA responsive 320–1920 (los 11 anchos del brief) + prefers-reduced-motion + teclado/lector
- Auditoría final §53 del brief (links rotos, TODOs, console errors, CLS…) + autopuntuación §54
- Validación F8 completa
F9 — Stripe + Deploy demo (P1)
- Stripe DEPOSIT tras flag + webhook firmado + reconciliador cron 5 min + E2E pago test
- Deploy srv1: pm2 kai-club :4700 + nginx + certbot → kai.rcsolucionesdigitales.com
- pg_dump diario + update-app.sh
- Smoke test producción (reserva real de prueba, emails, admin)
Bloqueado por el cliente (no nos para)
- Fotografía/vídeo real → sustituir TODO_KAI_REAL_IMAGE
- Confirmación carta/precios/nº hamacas por tier · política de cancelación (activa Stripe)
- SMTP, cuenta Stripe, acceso GBP, DNS kaiclub.es (redirects 301 listos)