Plataforma de un foro corporativo, del registro al certificado
Diseñé, construí y operé en solitario la plataforma de un foro del sector energético, con agenda, credencial digital con QR, encuestas, 156 certificados PDF auditados y memorias del evento, todo con inicio de sesión corporativo.
Ficha del proyecto
- Rol
- Desarrollador full-stack y operador único, del diseño a la guardia el día del evento
- Periodo
- jul de 2026 a sept de 2026
- Enlaces públicos
- Sistema interno: el código es privado, y los nombres, datos y diagramas se omitieron o se recrearon.
163
invitados recibieron su QR personal por correo, verificado uno a uno antes del envíoFuente: Registro del envío masivo, agosto de 2026 156
certificados PDF generados y revisados por dos auditores automáticos independientesFuente: Scripts de generación y auditoría de certificados, agosto de 2026 9 días
entre el primer commit y el día del foro, con el sistema operando en vivoFuente: Historial de git, julio y agosto de 2026
El problema
El área de comunicaciones de una generadora organizaba su primer foro corporativo y necesitaba resolver todo el ciclo del evento en una sola herramienta, desde difundir la agenda y los ponentes hasta registrar y acreditar a los invitados, medir la satisfacción y entregar certificados y memorias.
Mi rol
- Diseñé la experiencia a partir de las piezas gráficas oficiales, midiendo colores y medidas directamente de los PDF.
- Construí la SPA, el servidor, la autenticación corporativa y los envíos de correo.
- Desplegué en Linux con nginx y systemd endurecido, y estuve de guardia el día del foro.
- Después del evento generé los certificados, publiqué la galería y agregué un módulo de tarjetas de presentación digitales.
Restricciones
- Nueve días entre el primer commit y el día del foro.
- Cientos de asistentes entrando a la vez desde la misma red corporativa.
- Datos personales mínimos, porque el servidor no debía conocer nombres ni documentos de identidad.
- Una sola persona a cargo del desarrollo, el despliegue y la operación.
Decisiones
- 01
Inicio de sesión corporativo con OIDC y PKCE
Los invitados ya tenían cuenta en el directorio de la empresa. Microsoft Entra ID resolvió identidad y roles sin crear contraseñas nuevas, y Microsoft Graph envió los correos desde el buzón institucional.
Descartado
- Un registro propio con correo y contraseña
- 02
El servidor solo conoce identificadores opacos
Certificados y descargas se sirven con manifiestos de identificador a archivo, generados fuera del servidor. Nadie puede pedir el certificado de otra persona porque la ruta no recibe parámetros.
Descartado
- Guardar nombres y documentos en la base de datos del servidor
- 03
La encuesta se libera con el reloj del servidor
La dirección de la encuesta de satisfacción solo llega al navegador cuando el reloj del servidor pasa la hora de cierre, así nadie la responde antes de que termine el foro.
Descartado
- Ocultarla con un temporizador en el navegador
- 04
Operaciones peligrosas con dos llaves
El envío masivo tiene modo simulacro, tope de destinatarios y reanudación, y abrirlo a todos los invitados exige cambiar dos variables a la vez.
Descartado
- Un script que envía directamente a toda la lista
Arquitectura
Asistentes
- SPA del foroAgenda, credencial con QR, encuestas y certificados
Borde
- nginxTLS y límite de peticiones por zona
Servidor
- Servidor ExpressCSP, CSRF, sesiones y rutas sin parámetros libres
- Compuerta de encuestasDecide con el reloj del servidor
- Tarjetas de presentaciónSQLite
Microsoft 365
- Microsoft Entra IDOIDC con PKCE y roles
- Microsoft GraphCorreos de inscripción y QR
Estación de trabajo
- Generadores en PythonCertificados PDF y memorias, con auditoría
Cómo se mueven los datos
- SPA del forohacianginxHTTPS
- nginxhaciaServidor ExpressNavegaciones y API
- Servidor ExpresshaciaMicrosoft Entra IDInicio de sesión
- Servidor ExpresshaciaMicrosoft GraphCorreo transaccional
- Compuerta de encuestashaciaSPA del foroEncuesta solo después del cierre
- Generadores en PythonhaciaServidor ExpressArtefactos por manifiesto
Resultados
- El sistema operó en vivo el día del foro sin guardar datos personales en el servidor.
- Cada uno de los 163 códigos QR se decodificó antes de enviarlo, y el envío se hizo una sola vez.
- Se publicaron 156 certificados y 77 fotos, con descargas de memorias en streaming (el paquete más grande pesaba 1,33 GB).
- Los incidentes de producción quedaron resueltos y documentados con su causa.
Qué haría distinto
- Ensayaría la carga del día del evento con tráfico simulado desde una sola IP, en lugar de dimensionar solo con cálculos.
- Separaría desde el inicio lo que debía seguir vivo después del evento, como las tarjetas de presentación, de lo que era efímero.
Tecnologías
- React
- TypeScript
- Vite
- Node.js
- Express
- Microsoft Entra ID
- Microsoft Graph
- SQLite
- Python
- Playwright
- nginx
- systemd