Adrian R.L.M
Todos los proyectos

Para negocios que viven de reservas y citas.

Plataforma de Reservas SaaS

Sistema de reservas online con pagos integrados para profesionales y pequeños negocios de servicios.

Cronología3 Semanas
RolFull Stack Developer
Stack TecnológicoNext.js · Stripe · PostgreSQL
reservation-system-delta.vercel.app/es
01 de 19

El Problema

Muchos profesionales de servicios (clases, consultas, sesiones creativas) gestionan sus reservas de forma manual a través de WhatsApp, email o calendarios no sincronizados, lo que genera errores, pérdidas de tiempo y citas desaprovechadas.

  • Reservas desorganizadas entre múltiples canales.
  • Cancelaciones y no-shows sin control.
  • Falta de pagos anticipados o señalización.
  • Herramientas genéricas poco adaptadas a su flujo real.

La Solución

Diseñé y desarrollé una plataforma SaaS que centraliza la gestión de reservas, clientes y pagos en un único sistema, permitiendo a los profesionales automatizar su agenda y reducir fricción operativa.

  1. 01

    Autenticación y Control de Acceso

    Sistema de autenticación flexible y seguro que soporta múltiples métodos de acceso y separa claramente los roles de administradores, proveedores y clientes.

    • Login con Google OAuth, Email/Password y Magic Links.
    • Verificación OTP en registros por email.
    • RBAC con portales diferenciados (Admin, Provider, Client).
    • Protecciones activas contra abuso: rate limiting, CAPTCHA y honeypots.
  2. 02

    Motor de Reservas Avanzado

    Motor de reservas configurable que permite a los profesionales definir servicios, disponibilidad y reglas complejas sin fricción para el cliente final.

    • Servicios flexibles: duración, precio, capacidad (1-on-1 o grupos).
    • Disponibilidad híbrida con reglas semanales y excepciones por fecha.
    • Buffers automáticos entre citas para evitar solapamientos.
    • Gestión de concurrencia por servicio y límites globales.
  3. 03

    Sincronización con Google Calendar

    Sincronización bidireccional con Google Calendar para evitar dobles reservas y mantener la agenda siempre actualizada.

    • Importación automática de eventos externos.
    • Bloqueo de horarios ocupados en tiempo real.
    • Actualización automática ante cancelaciones o reprogramaciones.
  4. 04

    Pagos y Monetización Integrada

    Sistema de pagos completo con Stripe que permite cobros anticipados, payouts automáticos y un modelo SaaS escalable.

    • Pagos upfront para confirmar reservas.
    • Stripe Connect Express para que cada proveedor cobre directamente.
    • Soporte para comisiones de plataforma por transacción.
    • Planes de suscripción mensual o anual para proveedores.
  5. 05

    Gestión de Reservas Recurrentes

    Soporte nativo para reservas periódicas, ideal para clases, terapias y servicios continuos.

    • Configuración semanal o mensual.
    • Generación automática de sesiones futuras.
    • Gestión centralizada de cancelaciones y cambios.
  6. 06

    Internacionalización (i18n)

    Plataforma preparada para audiencias internacionales con soporte completo multi-idioma.

    • Interfaz totalmente traducida a inglés y español.
    • Detección automática de idioma mediante middleware.
    • Emails y mensajes de error localizados.
  7. 07

    Automatización y Notificaciones

    Sistema de automatización que reduce tareas manuales y mantiene informados a clientes y proveedores.

    • Recordatorios automáticos 24h y 1h antes de la cita.
    • Emails transaccionales para confirmaciones y cancelaciones.
    • Cron jobs ejecutados de forma serverless.
  8. 08

    Analíticas y Panel de Control

    Dashboard interactivo para que los proveedores entiendan el rendimiento de su negocio.

    • Métricas de ingresos y volumen de reservas.
    • Servicios más populares.
    • Visualizaciones claras mediante gráficos interactivos.

Stack Tecnológico

Construido con 12 tecnologías modernas, elegidas para que sea rápido, seguro y fácil de mantener.

Next.jsStripePostgreSQLPrismaTailwindshadcn/ui
Ver todo el detalle técnico

Framework

Next.js 14

Language

TypeScript

Database

PostgreSQL

ORM

Prisma

Auth

Auth.js

Payments

Stripe Connect

Email

Resend

Styling

TailwindCSS

UI

Shadcn/UI

Validation

Zod

Forms

React Hook Form

i18n

next-intl

Retos Técnicos

Handling Webhook Idempotency

Asegurar que los webhooks de Stripe se procesen exactamente una vez. Retries de red podían causar registros duplicados si no se manejaban correctamente.

webhook-handler.tsjavascript
const handleWebhook = async (req, res) => {
  const event = req.body;
  
  // 1. Check Redis for Idempotency Key
  const isProcessed = await redis.get(event.id);
  if (isProcessed) {
    return res.status(200).send("Already processed");
  }

  // 2. Process Business Logic
  try {
    if (event.type === 'invoice.paid') {
      await updateInvoiceStatus(event.data.object);
    }
    
    // 3. Mark as processed for 24h
    await redis.set(event.id, 'processed', 'EX', 86400);
    res.json({ received: true });
  } catch (err) {
    console.error(err);
    res.status(500).send();
  }
};

¿Tienes un problema parecido?

Cuéntame cómo lo resuelves hoy y te digo qué se puede automatizar o mejorar.

Cuéntame qué te frena