Plataforma de Reserva de Pádel

Aplicación completa de reservas y gestión de canchas de pádel con panel administrativo.

Mi Rol

Implementación completa: autenticación, lógica de validación de conflictos, panel administrativo y validación backend.

Colaboración

Lo desarrollé junto a mi compañero Jose Jandula. Nos organizamos mediante ramas, commits y control de versiones con Git para mantener el código limpio y los cambios documentados.

Stack Tecnológico

ReactNode.jsPostgreSQLSupabaseJWT

Contexto y Objetivo

Este proyecto nació como una plataforma para digitalizar la gestión de reservas de pistas de pádel. El objetivo era evitar solapamientos de reservas, centralizar la disponibilidad y ofrecer un panel de administración flexible y configurable.

El desafío principal era validar que dos reservas no se superpongan considerando duraciones variables (60, 90 minutos), scoped a una pista específica y fecha. Todo esto requería lógica robusta en el backend y una interfaz clara para usuarios y administradores.

Proceso de Desarrollo

01

Requisitos y Arquitectura

Definimos la estructura: usuarios con roles (user/admin), reservas con duraciones configurables, y validación de conflictos. Decidimos usar PostgreSQL para garantizar integridad de datos.

02

Modelo de Datos

Diseñamos las tablas: users, pistas, reservations, admin_config. Cada reserva guarda pista_id, start_time, duration para validar overlaps de forma eficiente.

03

Autenticación y Roles

Implementamos JWT + middleware. Los usuarios pueden reservar; los admins pueden configurar duraciones permitidas, ver calendario de reservas y resolver conflictos.

04

Validación de Conflictos

Creamos la lógica core: verificar que el rango (start_time, start_time + duration) no se cruce con ninguna reserva existente de la misma pista y día.

05

Panel Administrativo

Desarrollamos interfaces para gestionar pistas, ver calendario completo, configurar reglas de booking y resolver conflictos manuales si es necesario.

06

Frontend y Experiencia

Construimos pantallas responsivas para reservar (mobile-first), ver disponibilidad y confirmar bookings. Todo validado con el backend antes de confirmación.

07

Testing e Iteración

Testeamos casos de conflicto, duraciones edge cases, y permisos de rol. Iteramos basado en feedback.

08

Control de Versiones

Usamos Git con ramas por feature. Jose y yo revisamos cambios antes de merge, manteniendo historico limpio y cambios bien documentados.

Galería del Proyecto

Vistas Desktop

Dashboard Principal

Dashboard Principal

Vista general del sistema con disponibilidad de pistas y reservas próximas.

Panel de Reservas

Panel de Reservas

Interfaz para crear nuevas reservas, seleccionar duración y confirmar booking.

Panel Administrativo

Panel Administrativo

Gestión de pistas, configuración de duraciones permitidas y reglas de booking.

Experiencia Mobile

Home Mobile

Home Mobile

Pantalla de inicio optimizada para mobile con acceso rápido a reservas.

Reservas Mobile

Reservas Mobile

Flow de reserva adaptado a pantalla pequeña con validación en tiempo real.

Arquitectura Técnica

Frontend

  • React para UI components
  • Responsive design (mobile-first)
  • Validación en cliente
  • Estado compartido con Context/Redux
  • Confirmación de reservas

Backend

  • Node.js + Express
  • JWT authentication
  • Role-based middleware
  • Validación de conflictos
  • Endpoints RESTful

Base de Datos

  • PostgreSQL para integridad
  • Tablas: users, pistas, reservations, config
  • Indexes en pista_id + date
  • Constraints para data validation
  • Supabase como proveedor

Seguridad y Validación

  • JWT tokens con expiración
  • RBAC (roles: user, admin)
  • Backend validation obligatoria
  • Ownership checks en endpoints
  • SQL injection prevention

Resultado

La plataforma final permite gestionar reservas de pistas de pádel de forma centralizada, previniendo conflictos automáticamente. Los usuarios pueden reservar desde cualquier dispositivo; los administradores controlan reglas sin tocar código.

Este proyecto me enseñó sobre validación de datos en tiempo real, gestión de roles en aplicaciones fullstack, y cómo colaborar efectivamente mediante Git. La lógica de conflictos fue el desafío más interesante: entender overlaps de rangos horarios y scoped a múltiples dimensiones (court, date).

100%

Validación

Conflictos prevenidos automáticamente

100%

Responsiveness

Mobile, tablet y desktop optimizado

Configurable

Escalabilidad

Admins crean reglas sin deploy

¿Te interesa?

Si te gustaría saber más sobre mis proyectos o cómo abordo problemas técnicos, me encantaría conectar.

Erik Portillo Modrego — Desarrollador de Aplicaciones Web