ZDGNS Počitnikovanje
Un portal de reservas vacacionales para socios, construido para la Asociación Eslovena de Personas Sordas y con Discapacidad Auditiva — columna vertebral en Dynamics 365 CRM, pagos vía PayPal, interfaz multilingüe y reglas de reserva afinadas para 12 categorías distintas de miembros.
Visión general
ZDGNS — Zveza društev gluhih in naglušnih Slovenije (Asociación Eslovena de Personas Sordas y con Discapacidad Auditiva) gestiona un programa vacacional y de rehabilitación sanitaria para sus socios. Antes de este portal, las reservas se gestionaban manualmente. Me incorporé para construir desde cero un sistema de reservas autoservicio que permitiera a los socios iniciar sesión, navegar por las propiedades vacacionales, comprobar la disponibilidad en tiempo real y confirmar reservas — todo integrado de forma estrecha en el Dynamics 365 CRM existente de la organización.
El portal cubre el ciclo de vida completo: registro de socios (con doble vía para titulares de tarjeta existentes y nuevos inscritos), un asistente de reservas en 3 pasos, un flujo de pago con PayPal activado por enlaces de correo generados desde el CRM, y un panel personal que muestra estancias futuras y pasadas. Dado que la base de usuarios incluye personas sordas, con discapacidad auditiva, sordociegas o con implantes cocleares, la interfaz se diseñó priorizando la claridad y la comunicación visual en todo momento.
El sistema ha estado en uso continuo en producción y desarrollo activo desde su lanzamiento — con más de 22 versiones publicadas que cubren nuevas funcionalidades, parches de seguridad y actualizaciones del esquema CRM hasta 2026.
Arquitectura
Lectura del diagrama: El portal de socios en React y el flujo público de PayPal hablan únicamente con la capa proxy PHP — el token de acceso del CRM nunca llega al navegador. El proxy reenvía las consultas OData v9.2 a Dynamics 365, gestiona el estado de sesión y puentea el checkout sin estado de PayPal incrustando el GUID del pedido en el propio campo invoice de PayPal. Las credenciales OAuth de Azure AD permanecen siempre en el servidor.
La verdadera restricción no era React ni PHP — era Dynamics 365 como única fuente de verdad. Cada regla de reserva, nivel de precio y registro de socio vive en el CRM. Diseñar el portal significó aprender a pensar en OData.
Seis cosas entregadas,
tres difíciles resueltas.
Contribuciones clave
- Diseñé la arquitectura full-stack completa — SPA en React delante, capa proxy PHP detrás, Dynamics 365 como fuente autoritativa de datos.
- Construí un asistente de reservas en 3 pasos: búsqueda por rango de fechas → confirmación de disponibilidad → checkout con lista de huéspedes, con reglas de reserva para 12 niveles de membresía.
- Integré PayPal Express Checkout vía un proxy PHP sin estado — sin sesiones; el GUID del pedido va incrustado en el campo invoice de PayPal para sobrevivir a la redirección.
- Conecté el portal de forma bidireccional con Dynamics 365 CRM: lee ubicaciones, unidades, órdenes de venta y registros de socios; escribe de vuelta el estado de pago y los datos de reserva.
- Implementé un registro de doble vía: los socios existentes se registran con su número de tarjeta de socio y validación de fecha de nacimiento; los contactos nuevos se crean vía un endpoint dedicado del CRM.
- Lancé una interfaz bilingüe (esloveno principal, inglés secundario) usando i18next con detección del idioma del navegador.
- Cacheé códigos postales, ubicaciones y listas de unidades en el lado cliente con TTL escalonados (5 min / 30 min / 24 h) para mantenernos dentro de los límites de la API.
Desafíos resueltos
- Dynamics 365 como backend — cada entidad (ubicación, unidad, orden de venta, socio) vive en el CRM; todas las consultas son OData v9.2, lo que requiere una codificación cuidadosa de filtros y ajuste de batch-requests.
- Flujo PayPal sin estado — el CRM envía un enlace de pago por correo; el usuario llega sin autenticar; el GUID debe sobrevivir a la redirección de PayPal sin sesiones de servidor.
- 12 categorías de socios con distintos niveles de precio y ventanas de reserva anticipada — los socios sordos y con discapacidad auditiva tienen 3 meses de prioridad; el resto, 1 mes.
- ModSecurity en el hosting compartido cPanel bloqueaba las cadenas largas de consulta OData — resuelto envolviendo todas las lecturas en cuerpos POST a través de un relay PHP.
Cliente
Llevamos años trabajando con Numen — desde el portal de reservas hasta la aplicación del museo y las herramientas de accesibilidad. Davor entiende de verdad las necesidades de la comunidad sorda y con discapacidad auditiva.
Cliente
(traducido del esloveno) Llevamos años usando el portal de reservas que Numen desarrolló para nuestro programa vacacional. El sistema nos ha facilitado enormemente la gestión de solicitudes y la asignación de huéspedes a nuestros alojamientos. Davor y el equipo saben escuchar nuestras necesidades específicas — tanto técnicas como de accesibilidad — y responden siempre con rapidez a nuestras consultas. Estamos muy satisfechos con su trabajo y los recomendamos encarecidamente.
Qué hay bajo el capó.
¿Listo para arreglar, construir
o escalar?
30 minutos, conmigo personalmente. Leo tu sistema como un archivo de logs y te digo qué haría primero. Sin presentaciones, sin embudo de ventas.
— Davor Majc, fundador, Numen