La plataforma web corporativa de Globalia
Globalia, el grupo turístico español, tenía los datos de su gente en Microsoft 365 y su web pública por otro lado. Polargate construyó una sola plataforma web sobre un único repositorio: el directorio de empleados sincronizado desde Microsoft 365, una tarjeta de visita digital con pases de Apple Wallet y Google Wallet, y la web pública del grupo, hecha legible para los rastreadores de IA sin rehacerla. Pedro Ciordia trabaja en Globalia, así que esto es facturación con una parte vinculada y no un cliente ganado en el mercado abierto.

- 1
- repositorio para la plataforma interna, el directorio y la web pública
- 11.421
- caracteres de contenido real que un rastreador de IA recibe de una noticia
- 707
- artículos del histórico de noticias ya legibles por los rastreadores de IA
- 39
- tablas con RLS activa y cero errores en el diagnóstico de agosto de 2026
El problema
Globalia tiene varias marcas de consumo, y los datos de su gente vivían en Microsoft 365 mientras la web pública vivía por otro lado. El grupo necesitaba un directorio de empleados que siguiera el ritmo de Microsoft 365 a escala de decenas de miles de personas, una tarjeta y una identidad por marca, y una web pública cuyo histórico de noticias pudieran leer y citar los asistentes a los que hoy se pregunta en lugar de a un buscador.
Qué construimos
Polargate lo construyó todo como una sola plataforma web sobre un único repositorio, así que la parte interna y la web pública comparten código, compilación y despliegue. La sincronización del directorio se rehízo sobre consultas delta de Microsoft Graph y se hizo reanudable, con el enlace de continuación guardado y presupuesto de tiempo por ejecución, y los empleados entran con su propia cuenta de Microsoft 365, así que las cuentas siguen bajo el control del grupo. El directorio aplica privacidad en tres capas y sirve los avatares firmados y con caducidad. Encima va la tarjeta de visita digital: se auto-provisiona desde el directorio, la reclama el empleado al entrar por SSO sin que cambie su enlace público, con los pases de Wallet firmados en servidor y los datos de contacto servidos solo contra un token de acceso firmado. Cada marca del grupo se asigna por dominio de correo. En la web pública, un middleware de borde inyecta contenido real solo para los rastreadores, sin migrar a generación estática y sin tocar la aplicación.
El resultado
El directorio tiene hoy decenas de miles de empleados activos, al día con Microsoft 365 ejecución tras ejecución. En la web pública, una noticia pasó de 14 caracteres de contenido legible por un rastreador a 11.421, y 707 artículos del histórico quedaron legibles. En el diagnóstico de agosto de 2026 la base de datos mostraba 39 tablas con RLS activa y cero errores, los avisos de los advisors de seguridad resueltos y las políticas RLS consolidadas en una por rol y acción. Antes del despliegue: typecheck, 18 tests, la compilación web y la de la app en verde, y 20 rutas revisadas en escritorio y móvil. Las nueve primeras tarjetas se dieron de alta a mano para directivos y funcionan de punta a punta.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- Supabase
- PostgreSQL
- Deno
- Microsoft 365
- Microsoft Entra ID
- Vercel
El contexto
Globalia es un grupo turístico español con varias marcas de consumo. Los datos de su gente estaban en Microsoft 365 y su web pública, por otro lado. Polargate construyó la plataforma web corporativa del grupo: una plataforma web interna con el directorio de empleados sincronizado desde Microsoft 365, una tarjeta de visita digital con pases de Apple Wallet y Google Wallet, y la web pública del grupo, todo sobre un mismo repositorio. Pedro Ciordia trabaja en Globalia, así que este proyecto es ingreso vinculado y no un cliente ganado en el mercado abierto.
Un solo repositorio no es un detalle. La parte interna y la web pública comparten el mismo código, la misma compilación y el mismo despliegue, así que un cambio de marca se hace una vez y no una por sitio. El stack es React, Vite, TypeScript, Tailwind y shadcn/ui en el frontend, Supabase en el backend (Postgres con RLS, Edge Functions en Deno, Storage y Auth), Microsoft Graph para el directorio y el inicio de sesión, Apple PassKit y la API de Google Wallet para los pases, y Vercel como hosting. El proyecto nació con andamiaje de una herramienta de scaffolding visual y hoy está completamente fuera de ella, con el backend consolidado en un único Supabase propio.
El directorio: consultas delta y una sincronización reanudable
Los empleados entran con su propia cuenta de Microsoft 365, y el directorio lee de ese mismo Microsoft 365, así que las cuentas siguen bajo el control del grupo y ningún dato de una persona se vuelve a teclear en un segundo sistema.
La sincronización usa consultas delta de Microsoft Graph, así que cada ejecución trae solo lo que ha cambiado en lugar de arrastrar el directorio entero otra vez.
La sincronización es reanudable por diseño: el enlace de continuación se guarda, cada ejecución tiene su presupuesto de tiempo y la siguiente sigue donde lo dejó la anterior en lugar de empezar de cero. Eso es lo que permite que una sincronización de este tamaño termine. Hoy tiene decenas de miles de empleados activos.
Los duplicados se resuelven con una regla de fusión por identidad, reversible, que une los alias de una misma persona y nunca fusiona a dos personas distintas que coincidan de nombre.
Tres capas de privacidad
Un directorio de empleados es dato personal, así que no es un solo conjunto de datos. Son tres. La capa pública lleva la información profesional. La segunda, el contacto corporativo. La tercera, los datos personales, está detrás de un permiso explícito. Los avatares se sirven firmados y con caducidad, para que la URL de una foto no sea una puerta permanente.
La tarjeta de visita digital
Cada empleado tiene su página pública de tarjeta, con ruta espejo en inglés, descarga de vCard, botones de Apple Wallet y Google Wallet y un código QR de marca. Las tarjetas se auto-provisionan desde el directorio y se reclaman solas cuando el empleado entra por SSO, sin que cambie su enlace público, así que lo que ya esté impreso sigue valiendo.
Los pases se firman en el servidor, nunca en el navegador
Los de Apple, con manifiesto con hash por fichero y firma PKCS#7. Los de Google, con un JWT firmado con RS256. Los pases usan QR, no NFC.
Los datos de contacto solo se sirven con un token de acceso firmado, estable por tarjeta para que los QR impresos no caduquen. El contrato de campos funciona por lista blanca, con campos prohibidos explícitos, el móvil desactivado por defecto y una función de saneado como defensa en profundidad. Las tarjetas no se indexan.
La vCard se genera conforme a RFC 2426, con la foto incrustada en base64 porque iOS no importa fotos por URL, y con una ayuda visual que enseña al usuario cuál es el botón que de verdad guarda el contacto.
Multiempresa por dominio de correo
Globalia es un grupo de varias empresas, así que la plataforma es multiempresa. Cada marca se asigna por dominio de correo y lleva su propio nombre e identidad en la tarjeta. El control de acceso es por roles y está verificado, y el rol mínimo se asigna solo en el primer inicio de sesión mediante un disparador de base de datos.
La web pública, legible para los asistentes de IA
Una aplicación web moderna se pinta en el navegador, y casi ningún rastreador de IA ejecuta JavaScript. El lector y el rastreador no reciben la misma página, y cerrar esa distancia era el trabajo en la web pública.
Lo arreglamos sin migrar la web a generación estática. El middleware de borde inyecta, solo para los rastreadores, título, descripción, canonical, hreflang, Open Graph, JSON-LD y un cuerpo real con encabezado y párrafos. Los humanos siguen recibiendo la aplicación intacta, y ni el build ni la app cambian.
Lo que importa son las cifras. Una noticia pasó de 14 caracteres de contenido legible a 11.421. En seis rutas y sus espejos de idioma, el contenido visible para un rastreador pasó de unos 14 a 80 caracteres a 756 en portada y de 200 a 260 en interiores. 707 artículos del histórico quedaron legibles.
Qué más lleva dentro
Las notificaciones no hacen fan-out: una notificación es una única fila con audiencia, y el feed de cada usuario se calcula al vuelo respetando sus preferencias y los tipos obligatorios. Hay un tablón visual de beneficios y ofertas, publicado por el equipo de personas y visible para toda la plantilla. La plataforma es además una PWA instalable que avisa al usuario cuando hay actualización, y usa Supabase Realtime en lugar de sondeo periódico.
Dónde está hoy
Medido, no proyectado. En el diagnóstico de agosto de 2026: 39 tablas con RLS activa y cero errores, los avisos de los advisors de seguridad resueltos y las políticas RLS consolidadas en una por rol y acción, que se lee mejor y cuesta menos de ejecutar. La limpieza de código muerto se llevó 27 componentes y 16 dependencias. En esa misma fase se endurecieron las cabeceras de seguridad y el TLS en el borde.
De peso: recodificar los 153 fotogramas del hero de portada a WebP lo bajó un 38% sin cambio visual, un componente pasó de 739 KB a 3,6 KB al sustituir un import completo de una librería de iconos, y una librería de gráficos de 423 KB se movió a carga diferida.
Antes del despliegue: typecheck, 18 tests, la compilación web y la de la app en verde, y 20 rutas revisadas en escritorio y móvil.
Preguntas sobre este proyecto
¿Podemos sincronizar el directorio de empleados desde Microsoft 365 sin copiarlo a mano?
¿Es seguro dar a cada empleado una tarjeta de visita en Apple Wallet y Google Wallet?
¿Hay que rehacer la web en HTML estático para que los asistentes de IA la lean?
Proyectos relacionados
Empresa de servicios B2B, EuropaEndurecer una web corporativa que un filtro DNS bloqueaba
El filtro DNS corporativo de uno de sus clientes rechazaba el dominio de nuestro cliente, y eso le impedía operar como proveedor de esa empresa. La web no estaba comprometida ni en listas negras: estaba sin endurecer. Polargate la diagnosticó en una semana, migró el gestor de contenidos a un hosting bajo control del cliente y la endureció allí, porque el panel de administración era el único acceso disponible.
2026Ver el caso
Global Dynamic Security GroupMarca y web bilingüe para Global Dynamic Security Group
Identidad de marca, manual de identidad de 15 páginas y web corporativa bilingüe (español e inglés) para Global Dynamic Security Group (GDS), un grupo de seguridad privada en República Dominicana, entregado como proyecto cerrado a precio fijo.
2026Ver el caso
NationwideLegalEl CRM de NationwideLegal, sobre Odoo 18
NationwideLegal lleva su operación comercial en un CRM que Polargate construyó sobre Odoo 18 Enterprise y del que sigue llevando la dirección técnica: un único módulo propio, cinco modelos nuevos, los permisos rehechos alrededor de cómo vende el equipo de verdad y una verificación contra producción después de cada despliegue.
2026Ver el caso
Arranca el motor
Cuéntanos qué estás construyendo en unas pocas preguntas cortas. Un ingeniero senior responde por escrito en 48 horas laborables con una primera lectura de alcance, plazos y precio.