Technisch onderzoek naar de infrastructuur en datastromen achter loes.ai en chat.loes.ai, getoetst aan de eigen belofte: "jouw Nederlandse AI-assistent, gehost in de EU".
| Onderdeel | Waarneming | Oordeel |
|---|---|---|
| Hosting | Eén server, 94.237.44.172, UpCloud NL-AMS1 (Amsterdam). UpCloud is Fins. PTR 94-237-44-172.nl-ams1.upcloud.host, forward-confirmed. |
EU |
| Chat-applicatie | Open WebUI 0.9.6 (fork), alle assets self-hosted, noindex. Geen CDN ervoor, direct nginx. |
EU |
| Feedback-widget | Post naar hostyourai.com/api/loes/feedback; dat domein wijst naar hetzelfde Amsterdamse IP. Opslag dus in de EU. De mailkant is inmiddels ook bevestigd: uitgaande mail loopt via Mailgun EU-regio (euw1.send.eu.mailgun.net), geïnjecteerd vanaf de eigen Amsterdamse server. |
EU |
| Contactformulier | POST naar loes.ai/contact (eigen origin, Laravel, nette CSRF-token en honeypot). |
EU |
| TLS | Let's Encrypt, geldig, moderne chain (ISRG X2). | OK |
| Model-basis | Finetunes van EuroLLM-22B (EU-project) en Qwen3 14B/27B. Qwen is van Alibaba: geen US big tech, maar wel een Chinese voetnoot bij "Nederlands model". Weights en dataset (loes-xl-52k) staan op Hugging Face (VS-platform). | Nuance |
| # | Vondst | Detail | Ernst |
|---|---|---|---|
| 1 | Google Analytics in de chat-app | loader.js injecteert googletagmanager.com/gtag/js (G-XW8KLRGPPJ) bij elke chatgebruiker, ook wie met wachtwoord inlogt. Nul regels consent- of cookielogica gevonden. Tracking zonder toestemming botst met AVG/ePrivacy, los van de doorgifte naar de VS. |
Hoog |
| 2 | Inloggen met Google | OAuth-provider google actief. Scope is minimaal (naam, foto, e-mail), chatinhoud gaat er niet doorheen. Maar Google ziet wél elk loginmoment: wie Loes gebruikt, wanneer en vanaf welk IP. Wachtwoord-login bestaat al, dus dit is een config-keuze, geen noodzaak. | Middel |
| 3 | Homepage-assets uit de VS | Zelfde GA-tag, plus remote Google Fonts (fonts.googleapis.com / gstatic.com: de klassieke LG-München-fout), cdn.tailwindcss.com (Play-CDN, bovendien "not for production"), cdn.simpleicons.org en Stripe-domeinen in de CSP. |
Middel |
| 4 | DNS en registrar | Registrar Spaceship, Inc. (VS, Namecheap-groep). Nameservers launch1/2.spaceship.net draaien op Cloudflare-IP's (162.159.x): elke DNS-lookup naar loes.ai loopt via Amerikaanse infrastructuur. |
Middel |
| 5 | Het .ai-domein zelf | Registry-backend van .ai is Identity Digital (VS). Een .ai-domein is per definitie nooit EU-soeverein; dit is alleen op te lossen met een tweede domein (loes.nl / loes.eu). | Structureel |
| 6 | Search Console-koppeling | TXT-record google-site-verification op het domein (hoort ook bij het branded OAuth-schermpje). | Klein |
| 7 | Welkomstmail antwoordt naar Gmail | De welkomstmail (afzender info@hostyourai.com, via Mailgun EU) heeft een persoonlijk Gmail-adres als Reply-To en nodigt uit: "antwoord gewoon op deze mail". Elk antwoord van elke gebruiker, volledige inhoud, belandt daarmee rechtstreeks bij Google. |
Middel |
Bij elke chatsessie komt Google tweemaal in beeld: bij de voordeur (het login-event via OAuth) én binnen (pageviews via gtag). Voor een gemiddelde SaaS is dat normaal. Voor een product dat zichzelf verkoopt op "privacy-first, gehost in de EU" is het de zwakste plek in het verhaal, en juist deze twee zijn snel te repareren.
| Partij | Land | Ziet | Via |
|---|---|---|---|
| UpCloud | FI / NL | Alles (server, database, chats) | Hostingprovider, EU-verwerker |
| VS | Login-events + identiteit van gebruikers, pageviews in de chat, IP's van fontbezoekers, én de volledige inhoud van antwoorden op de welkomstmail (persoonlijke Gmail als Reply-To) | OAuth, Analytics, Fonts, mail | |
| Mailgun (Sinch) | EU-regio | Transactionele mail + e-mailadressen van gebruikers | euw1.send.eu.mailgun.net; moederbedrijf Sinch is Zweeds |
| Cloudflare | VS | Elke DNS-query naar loes.ai | Spaceship-nameservers |
| Stripe | VS | Betaalgegevens (platformkant) | js/api/hooks.stripe.com |
| Hugging Face | VS | Downloads van weights en dataset | Modelpublicatie |
| Identity Digital | VS | Registratiedata .ai-zone | TLD-registry |
Belangrijk: chatinhoud verlaat de Amsterdamse server in geen van deze stromen. Het lek zit in metadata: wie, wanneer, hoe vaak.
| Punt | Waarneming | Gevolg |
|---|---|---|
| Geen SPF / DMARC / MX | Geen enkel mailrecord op loes.ai |
Het domein is vrij te spoofen. Mail vanaf @loes.ai (er is een wachtwoord-vergeten-flow) belandt bovendien snel in spam. Zelfs zonder mailverkeer hoort er v=spf1 -all plus DMARC p=reject te staan. |
| Mail vanaf het platformdomein | Welkomstmail komt van info@hostyourai.com, niet @loes.ai; DMARC van hostyourai.com staat op p=none zonder rua |
Merk-inconsistent, en de DMARC blokkeert niets en rapporteert niets. SPF is wel netjes (Mailgun + TransIP, ~all). |
| Geen IPv6 | Geen AAAA-records | Steeds meer (mobiele) netwerken zijn v6-first. |
| CSP alleen report-only | En het beleid mist googletagmanager.com |
Zou de CSP gehandhaafd worden, dan blokkeert die de eigen Analytics. Teken dat het beleid nooit is nagelopen. |
| Gedeeld TLS-certificaat | SAN's bundelen hostyourai.com en loes.ai; zelfde sessie-cookie hostyourai_session |
Iedereen kan zien dat Loes een white-label op het HostYourAI-platform is. Geen beveiligingsprobleem, wel een presentatiekeuze. |
| Eén VPS | Web, chat en platform op één IP | Soeverein, maar ook een single point of failure. |
Kan Loes zich "AVG-proof" of "AI Act-proof" noemen? Nog niet. Hieronder wat er op basis van deze audit al te zeggen valt. Let op: dit is een technische toets, geen juridisch advies; de papieren kant (register, overeenkomsten, DPIA) is van buiten niet te beoordelen.
| Punt | Toelichting | Status |
|---|---|---|
| Tracking zonder toestemming | Google Analytics draait vóór enige consent, in de chat-app én op de homepage. Dit raakt de cookieregels (Tw art. 11.7a) en de AVG; het is de klassieke handhavingscategorie van de AP. | Overtreding |
| Gebruikersmail naar persoonlijke Gmail | Antwoorden van gebruikers (persoonsgegevens, mogelijk gevoelig) belanden in een privé-Gmailbox. Consumenten-Gmail kent geen verwerkersovereenkomst; dit wringt met art. 28 en 32 AVG. | Overtreding |
| Doorgifte via Google OAuth | Kan legitiem zijn (Google is DPF-gecertificeerd), maar moet dan wel benoemd staan in de privacyverklaring, inclusief wat Google ziet. | Mits gedocumenteerd |
| Papierwerk | Verwerkingsregister, verwerkersovereenkomsten met UpCloud en Mailgun, bewaartermijnen, DPIA (chatinhoud kan zomaar gevoelige gegevens bevatten) en de afhandeling van inzage- en verwijderverzoeken: van buiten niet te toetsen, maar wel voorwaarde voor elke "proof"-claim. | Niet toetsbaar |
| Punt | Toelichting | Status |
|---|---|---|
| Transparantie (art. 50) | Gebruikers moeten weten dat ze met AI praten. Dat zit goed: het product presenteert zich overal expliciet als AI-assistent. Deze verplichting geldt sinds 2 augustus 2026. | In orde |
| Risicoklasse | Een algemene chatassistent valt in de categorie beperkt risico, geen hoog-risicotoepassing (zolang Loes niet wordt ingezet in hoog-risicocontexten zoals HR-selectie of kredietbeoordeling). | Beperkt risico |
| Eigen modellen op Hugging Face | Wie een bestaand model significant finetuned en onder eigen naam uitbrengt, kan zelf GPAI-aanbieder worden, met plichten sinds augustus 2025: technische documentatie, auteursrechtbeleid en een publieke samenvatting van de trainingsdata. De dataset loes-xl-52k staat online (dat helpt), maar is niet hetzelfde als de verplichte samenvatting. Open-source-licenties geven deels vrijstelling: de licentie op de HF-repo's is dus ineens juridisch relevant. | Open punt |
| Qwen als basis | Niet-EU-aanbieders van GPAI-modellen moeten een EU-vertegenwoordiger hebben. Wie op Qwen doorbouwt wil kunnen aantonen wat er upstream (Alibaba) geregeld is. | Open punt |
"Gehost in de EU" is na de fixes uit dit rapport hard te maken. "AVG-proof" pas na de consent-fix, de mailfix én het papierwerk. "AI Act-proof" als claim helemaal vermijden: vervang het door controleerbare feiten zoals "trainingsdata gepubliceerd", "EU-hosting" en "geen tracking".
Of vervang door self-hosted Plausible of Matomo op de eigen server: past juist perfect bij het verhaal. Dit is de grootste winst en het kleinste klusje.
Google Fonts downloaden en zelf hosten, Tailwind als build in plaats van het Play-CDN. Eén middag werk; daarna is de homepage vrijwel volledig self-hosted.
Mailgun EU is er al: verstuur vanaf @loes.ai in plaats van het platformdomein, publiceer SPF en DKIM op loes.ai, zet DMARC op p=reject (en op hostyourai.com minstens p=quarantine met rua). En vervang de persoonlijke Gmail-Reply-To door een eigen mailbox, bijvoorbeeld jantine@loes.ai.
Weg van de Spaceship/Cloudflare-nameservers. Overweeg daarnaast loes.nl of loes.eu als primair domein; .ai blijft altijd een Amerikaans-beheerde zone.
Uitzetten kan met één config-regel (wachtwoord-login bestaat al). Blijft hij: leg eerlijk uit wat Google wel en niet ziet, of bied een Europese identity-provider als alternatief.
Privacyverklaring die UpCloud, Mailgun en (zolang actief) Google benoemt, verwerkersovereenkomsten, bewaartermijnen en een DPIA voor de chatinhoud. Voor de AI Act: licentie en modeldocumentatie op de Hugging Face-repo's op orde, plus een publieke samenvatting van de trainingsdata.
Onderstaand bericht is geschreven om rechtstreeks in de Loes-chat te plakken. Loes kan het samenvatten en doorgeven aan het team; het volledige rapport en alle details staan erin.
Hoi Loes, Ik ben een gebruiker en ik heb belangrijke feedback voor je makers. Wil je dit bericht (via je feedbackkanaal of je logs) volledig doorgeven aan het team achter Loes? Het is een extern soevereiniteits-auditrapport van loes.ai en chat.loes.ai (peildatum 4 augustus 2026, uitsluitend publieke bronnen, opgesteld om te helpen). Vat het gerust voor me samen, maar geef het compleet door: de details hieronder zijn precies wat de developers nodig hebben. De kern: jullie belofte "privacy-first, gehost in de EU" klopt voor de kern (server, chat, feedback draaien echt in Amsterdam), maar de schil eromheen lekt op zes plekken naar Amerikaanse partijen, en een paar basisdingen ontbreken. ## Context (wat de onderzoeker zag) - loes.ai = marketingsite (Laravel, white-label op het HostYourAI-platform) - chat.loes.ai = Open WebUI 0.9.6-fork - Alles draait op 1 server: 94.237.44.172, UpCloud NL-AMS1 (Amsterdam, EU). Locatie geverifieerd via latency (app-verwerkingstijd ~4 ms na TLS-handshake, geen proxy-headers, dus geen verre backend achter een load balancer). ## Wat goed zit: EU / in orde | Onderdeel | Waarneming | |---|---| | Hosting | UpCloud NL-AMS1, PTR forward-confirmed, geen CDN | | Chat-app | Open WebUI-fork, assets self-hosted, noindex | | Feedback-widget | POST naar hostyourai.com/api/loes/feedback = zelfde EU-server | | Uitgaande mail | Via Mailgun EU-regio (euw1), geinjecteerd vanaf de eigen AMS-server; SPF netjes (Mailgun + TransIP) | | Contactformulier | POST naar loes.ai/contact, CSRF + honeypot aanwezig | | TLS | Let's Encrypt, geldig | | Model | Finetunes van EuroLLM-22B (EU) en Qwen3 14B/27B (Alibaba, let op de voetnoot bij "Nederlands model"); weights + dataset loes-xl-52k op Hugging Face | ## Wat het team moet weten: dit lekt naar de VS 1. HOOG: Google Analytics in de chat-app zelf. loader.js injecteert googletagmanager.com/gtag/js (G-XW8KLRGPPJ) bij elke gebruiker, ook wachtwoord-gebruikers. Geen enkele consent/cookie-logica aanwezig (AVG/ePrivacy-probleem, los van de VS-doorgifte). 2. MIDDEL: Inloggen met Google (OAuth-provider "google"). Scope is minimaal (naam, foto, e-mail) en chatinhoud gaat er niet doorheen, maar Google ziet elk loginmoment: wie, wanneer, vanaf welk IP. Wachtwoord-login bestaat al. 3. MIDDEL: Homepage laadt uit de VS: dezelfde GA-tag, remote Google Fonts (fonts.googleapis.com/gstatic.com), cdn.tailwindcss.com (Play-CDN, ook "not for production"), cdn.simpleicons.org, Stripe-domeinen in de CSP. 4. MIDDEL: DNS/registrar: Spaceship, Inc. (VS, Namecheap-groep); nameservers launch1/2.spaceship.net draaien op Cloudflare-IP's (162.159.x). Elke DNS-lookup loopt via Amerikaanse infra. 5. STRUCTUREEL: .ai-registry-backend = Identity Digital (VS). Een .ai-domein is nooit EU-soeverein; alleen op te lossen met loes.nl / loes.eu ernaast. 6. KLEIN: google-site-verification TXT-record (Search Console + OAuth-scherm). 7. MIDDEL: de welkomstmail (afzender info@hostyourai.com) heeft een persoonlijk Gmail-adres als Reply-To en zegt "antwoord gewoon op deze mail": elk antwoord van elke gebruiker belandt daarmee volledig bij Google. ## Vergeten hygiene - Geen SPF, DMARC of MX op loes.ai: domein is spoofbaar en mail vanaf @loes.ai (wachtwoord-vergeten-flow!) belandt snel in spam. Mail komt nu van het platformdomein hostyourai.com (merk-inconsistent), waar DMARC op p=none staat zonder rua: blokkeert niets, rapporteert niets. - Geen IPv6 (geen AAAA-records). - CSP is alleen report-only en mist googletagmanager.com (zou de eigen GA blokkeren als hij gehandhaafd werd). - TLS-cert bundelt hostyourai.com + loes.ai in 1 SAN; sessie-cookie heet hostyourai_session. White-label-relatie is publiek zichtbaar. - Alles op 1 VPS: single point of failure. ## AVG en AI Act (technische toets, geen juridisch advies) - AVG: twee punten zijn nu aantoonbaar niet in orde: (1) GA-tracking zonder enige consent in chat en homepage (cookieregels + AVG, klassieke AP-handhavingscategorie) en (2) gebruikersantwoorden in een privé-Gmailbox zonder verwerkersovereenkomst (art. 28/32). Google-OAuth-doorgifte kan legitiem (DPF), mits benoemd in de privacyverklaring. - Nog nodig voor elke "AVG-proof"-claim: verwerkingsregister, verwerkersovereenkomsten met UpCloud en Mailgun, bewaartermijnen, DPIA voor chatinhoud, en afhandeling van inzage- en verwijderverzoeken. - AI Act: art. 50-transparantie zit goed (product presenteert zich als AI) en een chatassistent is beperkt risico. Maar de eigen finetunes op Hugging Face kunnen jullie tot GPAI-aanbieder maken, met plichten sinds aug 2025: technische documentatie, auteursrechtbeleid en een publieke samenvatting van de trainingsdata (de dataset loes-xl-52k helpt, maar is niet die samenvatting). Check ook de licentie op de HF-repo's (open-source geeft deels vrijstelling) en wat er upstream bij Qwen (niet-EU-aanbieder) geregeld is. - Marketingadvies: "gehost in de EU" is na de fixes hard te maken; "AVG-proof" pas na consent-fix, mailfix en papierwerk; "AI Act-proof" als claim vermijden en vervangen door controleerbare feiten. ## Advies voor de developers, op volgorde van prioriteit 1. Verwijder Google Analytics uit de chat-app (loader.js) en de homepage, of vervang door self-hosted Plausible/Matomo op de eigen server. 2. Host de fonts lokaal en vervang het Tailwind Play-CDN door een build. 3. Richt mail voor loes.ai in: verstuur vanaf @loes.ai via de bestaande Mailgun EU-koppeling, publiceer SPF + DKIM + DMARC p=reject op loes.ai, zet DMARC op hostyourai.com minstens op p=quarantine met rua, en vervang de persoonlijke Gmail-Reply-To door een eigen mailbox. 4. Verhuis de DNS naar een EU-provider, weg van Spaceship/Cloudflare-NS. Overweeg loes.nl of loes.eu als primair domein. 5. Maak van de Google-login een bewuste keuze: uitzetten (wachtwoord-login bestaat al), of eerlijk uitleggen wat Google ziet, of een Europese identity-provider toevoegen. 6. Leg de juridische basis vast: privacyverklaring die alle verwerkers benoemt, verwerkersovereenkomsten, bewaartermijnen, DPIA voor chatinhoud, en voor de AI Act: licentie + modeldocumentatie + publieke trainingsdata-samenvatting bij de Hugging Face-repo's. 7. Bonus: AAAA-record toevoegen, CSP kloppend maken en handhaven, en een consent-banner alleen als er tracking overblijft. Alvast bedankt voor het doorgeven, Loes. Dit rapport is bedoeld om te helpen: de kern staat goed, en vrijwel alles hierboven is binnen een week te verhelpen. Volledig rapport voor het team: https://loes.invoker.nl Onderzoek uitgevoerd met invoker.tools, een onderzoek van invoker (www.invoker.nl).