Práctico

Función de Reservas — Disponibilidad, Depósitos, Google Calendar

Activa una función modular de reservas con horarios laborales, depósitos en Stripe Checkout, confirmación por webhook, archivos ICS y enlaces a Google Calendar.

Reservas (Función Demo)

Incluye un flujo completo y modular:

  • Disponibilidad por horario laboral con márgenes y control de choques
  • Retenciones suaves hasta que se complete el pago
  • Stripe Checkout para depósitos o prepago total
  • Confirmación por webhook
  • Email con archivo ICS adjunto
  • Enlace “Agregar a Google Calendar” (sin OAuth)
  • Listo para i18n: /:locale/reserve y /:locale/account/reservations

Configuración

  1. Variables de entorno y configuración en código
NEXT_PUBLIC_FEATURE_RESERVATIONS_ENABLED=true
STRIPE_PRIVATE_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
RESEND_API_KEY=...
EMAIL_FROM="Tu App <no-reply@tu-dominio.com>"
NEXT_PUBLIC_WEB_URL="http://localhost:3000"

Ajusta horarios, retención y zona horaria en src/data/reservations.ts.

  1. Base de datos
pnpm drizzle-kit generate --config src/db/config.ts
pnpm drizzle-kit migrate --config src/db/config.ts
  1. Webhooks locales
stripe listen --forward-to localhost:3000/api/pay/webhook/stripe
  1. Ejecutar
pnpm dev

Abre /es/reserve para probar.

Personalización

  • Zona horaria base: edita baseTimeZone en src/data/reservations.ts (p.ej., Europe/Madrid).
  • Depósito vs prepago: deposit_amount y require_deposit por servicio.
  • Márgenes: buffer_before_min, buffer_after_min.
  • Calendario: enlace de Google sin OAuth; para sincronización del proveedor, usa OAuth y la API de Calendar.