Het corporate webplatform van Globalia
Globalia, de Spaanse reisgroep, had haar personeelsgegevens in Microsoft 365 staan en haar publieke website ergens anders. Polargate bouwde één webplatform op één repository: een medewerkersgids die synchroon loopt met Microsoft 365, een digitaal visitekaartje met passen voor Apple Wallet en Google Wallet, en de publieke site van de groep, leesbaar gemaakt voor AI-crawlers zonder die opnieuw te bouwen. Pedro Ciordia werkt bij Globalia, dus dit is omzet van een verbonden partij en geen klant die op de open markt is gewonnen.

- 1
- repository voor het interne platform, de gids en de publieke site
- 11.421
- tekens echte inhoud die een AI-crawler van een nieuwsbericht krijgt
- 707
- gearchiveerde nieuwsartikelen die nu leesbaar zijn voor AI-crawlers
- 39
- tabellen met row-level security en nul fouten in de controle van augustus 2026
Het probleem
Globalia heeft meerdere consumentenmerken, en de personeelsgegevens stonden in Microsoft 365 terwijl de publieke website ergens anders draaide. De groep had een medewerkersgids nodig die gelijke tred houdt met Microsoft 365 op de schaal van tienduizenden mensen, één kaartje en één identiteit per merk, en een publieke site waarvan het nieuwsarchief gelezen en geciteerd kan worden door de assistenten waar mensen nu aan vragen wat ze vroeger intypten.
Wat we bouwden
Polargate bouwde het geheel als één webplatform op één repository, zodat het interne deel en de publieke site dezelfde code, build en deploy delen. De synchronisatie van de gids is herbouwd op Microsoft Graph delta-queries en hervatbaar gemaakt, met een opgeslagen vervolgverwijzing en een tijdsbudget per run, en medewerkers melden zich aan met hun eigen Microsoft 365-account, zodat de accounts in beheer van de groep blijven. De gids kent drie privacylagen en serveert avatars ondertekend en met vervaltijd. Daarbovenop zit het digitale visitekaartje: het wordt vanuit de gids aangemaakt, de medewerker claimt het bij de eerste keer aanmelden via SSO zonder dat de publieke link verandert, de Wallet-passen worden op de server ondertekend en contactgegevens komen alleen vrij tegen een ondertekend toegangstoken. Elk merk van de groep wordt toegewezen op e-maildomein. Op de publieke site injecteert edge middleware echte inhoud, uitsluitend voor crawlers, zonder migratie naar statische generatie en zonder wijziging aan de applicatie.
Het resultaat
De gids bevat nu tienduizenden actieve medewerkers, run na run gelijk met Microsoft 365. Op de publieke site ging één nieuwsbericht van 14 tekens leesbare inhoud voor een crawler naar 11.421, en werden 707 gearchiveerde artikelen leesbaar. In de controle van augustus 2026 telde de database 39 tabellen met row-level security en nul fouten, waren de waarschuwingen van de security advisors verholpen en waren de row-level security-policies samengebracht tot één policy per rol en actie. Voor de deploy: typecheck, 18 tests, de webbuild en de appbuild groen, en 20 routes nagelopen op desktop en mobiel. De eerste negen kaartjes zijn met de hand aangemaakt voor directieleden en werken van begin tot eind.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- Supabase
- PostgreSQL
- Deno
- Microsoft 365
- Microsoft Entra ID
- Vercel
De context
Globalia is een Spaanse reisgroep met meerdere consumentenmerken. De personeelsgegevens stonden in Microsoft 365 en de publieke website ergens anders. Polargate bouwde het corporate webplatform van de groep: een intern webplatform met de medewerkersgids die synchroon loopt met Microsoft 365, een digitaal visitekaartje met passen voor Apple Wallet en Google Wallet, en de publieke site van de groep, alles in één repository. Pedro Ciordia werkt bij Globalia, dus dit project is omzet van een verbonden partij en geen klant die op de open markt is gewonnen.
Die ene repository is geen detail. Het interne platform en de publieke site delen dezelfde code, dezelfde build en dezelfde deploy, dus een merkwijziging gebeurt één keer in plaats van per site. De stack is React, Vite, TypeScript, Tailwind en shadcn/ui aan de voorkant, Supabase aan de achterkant (Postgres met row-level security, Edge Functions op Deno, Storage en Auth), Microsoft Graph voor de gids en het aanmelden, Apple PassKit en de Google Wallet API voor de passen, en Vercel als hosting. Het project begon met steigerwerk uit een visuele bouwtool en staat daar nu volledig los van, met de backend samengebracht in één eigen Supabase.
De gids: delta-queries en een hervatbare synchronisatie
Medewerkers melden zich aan met hun eigen Microsoft 365-account, en de gids leest uit datzelfde Microsoft 365, zodat de accounts onder beheer van de groep blijven en niemands gegevens opnieuw in een tweede systeem worden getypt.
De synchronisatie draait op Microsoft Graph delta-queries, dus elke run haalt alleen op wat is gewijzigd in plaats van de hele gids opnieuw.
De synchronisatie is van opzet hervatbaar: de vervolgverwijzing wordt bewaard, elke run krijgt een tijdsbudget en de volgende run gaat verder waar de vorige stopte in plaats van opnieuw te beginnen. Alleen zo raakt een synchronisatie van deze omvang ooit klaar. Hij bevat nu tienduizenden actieve medewerkers.
Dubbelingen worden opgelost met een omkeerbare samenvoegregel op identiteit, die de aliassen van één persoon samenbrengt en nooit twee verschillende mensen samenvoegt die toevallig dezelfde naam hebben.
Drie privacylagen
Een medewerkersgids is persoonsgegeven, dus het is niet één dataset. Het zijn er drie. De publieke laag bevat professionele informatie. De tweede bevat zakelijke contactgegevens. De derde, de persoonlijke gegevens, zit achter een expliciete toestemming. Avatars worden ondertekend en met vervaltijd geserveerd, zodat de URL van een foto geen permanente deur is.
Het digitale visitekaartje
Elke medewerker heeft een publieke kaartpagina, met een spiegelroute in het Engels, een vCard-download, knoppen voor Apple Wallet en Google Wallet en een QR-code in de huisstijl. Kaartjes worden vanuit de gids aangemaakt en claimen zichzelf zodra de medewerker zich via SSO aanmeldt, waarbij de publieke link niet verandert, dus wat al gedrukt is blijft geldig.
Passen worden op de server ondertekend, nooit in de browser
Apple-passen krijgen een manifest met een hash per bestand en een PKCS#7-handtekening. Google-passen krijgen een JWT die met RS256 is ondertekend. De passen werken met QR, niet met NFC.
Contactgegevens komen alleen vrij tegen een ondertekend toegangstoken, stabiel per kaart zodat gedrukte QR-codes niet verlopen. Het veldcontract werkt met een allowlist, met expliciet verboden velden, het mobiele nummer standaard uit en een opschoonfunctie als extra verdedigingslaag. Kaartjes worden niet geïndexeerd.
De vCard volgt RFC 2426, met de foto in base64 ingesloten omdat iOS geen foto's via een URL importeert, en de pagina wijst visueel aan welke knop het contact echt opslaat.
Meerdere bedrijven, op e-maildomein
Globalia bestaat uit meerdere bedrijven, dus het platform is multi-bedrijf. Elk merk wordt toegewezen op e-maildomein en draagt zijn eigen naam en identiteit op het kaartje. De toegang is rolgebaseerd en geverifieerd, en de minimale rol wordt bij de eerste aanmelding automatisch toegekend door een databasetrigger.
De publieke site, leesbaar voor AI-assistenten
Een moderne webapplicatie wordt in de browser opgebouwd, en vrijwel geen enkele AI-crawler voert JavaScript uit. De lezer en de crawler krijgen dus niet dezelfde pagina, en dat gat sluiten was de opdracht op de publieke site.
Dat hebben we opgelost zonder de site naar statische generatie te migreren. Edge middleware injecteert, uitsluitend voor crawlers, title, description, canonical, hreflang, Open Graph, JSON-LD en een echte body met een kop en alinea's. Mensen krijgen nog steeds de applicatie zoals die was, en noch de build noch de app is veranderd.
De cijfers zijn het punt. Eén nieuwsbericht ging van 14 tekens leesbare inhoud naar 11.421. Over zes routes en hun taalspiegels ging de voor crawlers zichtbare inhoud van ongeveer 14 tot 80 tekens naar 756 op de homepage en 200 tot 260 op de onderliggende pagina's. 707 gearchiveerde artikelen werden leesbaar.
Wat er verder in zit
Meldingen worden niet uitgewaaierd: één melding is één record met een doelgroep, en de feed van elke gebruiker wordt ter plekke berekend, met respect voor de voorkeuren en de verplichte typen. Er is een visueel bord met personeelsvoordelen en aanbiedingen, gepubliceerd door het HR-team en zichtbaar voor iedereen. Het platform is bovendien een installeerbare PWA die de gebruiker waarschuwt bij een update, en gebruikt Supabase Realtime in plaats van periodiek pollen.
Waar het nu staat
Gemeten, niet geprojecteerd. In de controle van augustus 2026: 39 tabellen met row-level security en nul fouten, de waarschuwingen van de security advisors verholpen en de row-level security-policies samengebracht tot één policy per rol en actie, wat leesbaarder is en goedkoper draait. Het opruimen van dode code haalde er 27 componenten en 16 dependencies uit. In diezelfde fase zijn de securityheaders en TLS aan de edge aangescherpt.
Over gewicht: het hercoderen van de 153 frames van de hero op de homepage naar WebP scheelde 38% zonder zichtbaar verschil, één component ging van 739 KB naar 3,6 KB nadat een volledige import van een iconenbibliotheek was vervangen, en een grafiekenbibliotheek van 423 KB is naar lazy loading verplaatst.
Voor de deploy: typecheck, 18 tests, de webbuild en de appbuild groen, en 20 routes nagelopen op desktop en mobiel.
Vragen over dit project
Kunnen we onze medewerkersgids vanuit Microsoft 365 synchroniseren zonder handmatig kopiëren?
Is het veilig om elke medewerker een visitekaartje in Apple Wallet en Google Wallet te geven?
Moeten we onze website eerst als statische HTML herbouwen voordat AI-assistenten die kunnen lezen?
Gerelateerd werk
B2B-dienstverlener, EuropaEen bedrijfswebsite hardenen die door een DNS-filter werd geblokkeerd
Het bedrijfs-DNS-filter van een van zijn eigen afnemers weigerde het domein van onze klant, waardoor die niet meer als leverancier van dat bedrijf kon opereren. De site was niet gehackt en stond niet op een blacklist. Hij was simpelweg niet gehardend. Polargate stelde dat in een week vast, verhuisde het CMS naar hosting die de klant zelf beheert en hardende de site daar, omdat het beheerpaneel de enige beschikbare toegang was.
2026Bekijk de case
Global Dynamic Security GroupMerk en tweetalige site voor Global Dynamic Security Group
Huisstijl, een handboek van 15 pagina's en een tweetalige bedrijfssite (Spaans en Engels) voor Global Dynamic Security Group (GDS), een beveiligingsgroep in de Dominicaanse Republiek, opgeleverd als één project met een vaste prijs.
2026Bekijk de case
NationwideLegalHet CRM van NationwideLegal, op Odoo 18
NationwideLegal draait haar commerciële operatie op een CRM dat Polargate bouwde op Odoo 18 Enterprise en waarvan het nog steeds de technische regie voert: één eigen module, vijf nieuwe modellen, rechten opnieuw opgebouwd rond hoe het team echt verkoopt, en na elke deploy een verificatie tegen productie.
2026Bekijk de case
Start de motor
Vertel ons in een paar korte vragen wat je bouwt. Een senior engineer antwoordt binnen twee werkdagen schriftelijk met een eerste inschatting van scope, planning en prijs.