Kort antwoord: Klonkt zet geen tracking-cookies, spoort je niet, stuurt niks naar derden, en heeft geen consent-banner nodig. Nul externe calls by default — geen enkele byte gaat naar een domein dat jij niet zelf host. Dit artikel legt uit wat er wél gebeurt en waarom dat binnen AVG/GDPR blijft.

Wat Klonkt NIET doet

Geen Google Analytics. Geen Facebook Pixel. Geen Hotjar, Mixpanel, Segment, of enige andere analytics-dienst. Geen Consent Management Platform. Geen externe fonts van fonts.googleapis.com. Geen CDN voor jQuery/Bootstrap/whatever. Geen Gravatar-calls. Geen OpenGraph-scrapes naar andere sites tenzij jij een URL embedt. Geen error-reporting naar Sentry of iets dergelijks. Geen newsletter-service tracking pixels. Geen "share"-buttons die naar Facebook/Twitter phonen.

Check zelf: open DevTools → Network tab → refresh een pagina. Je ziet alleen requests naar het domein waar je nu bent. Geen enkele third-party domain. Dat is geen toeval — dat is het ontwerp.

Wat Klonkt WEL doet

Session cookie

Als je inlogt, zet Klonkt één cookie: pcms.sid. Dit is een random ID dat jouw browser koppelt aan een server-side sessie (Node/Express). Alleen voor login-status en CSRF-bescherming. Geen tracking-info in deze cookie, geen cross-site bruikbaarheid, HttpOnly en SameSite=Lax by default. Duur: tot je uitlogt of de sessie verloopt.

Voor anonieme bezoekers wordt er geen cookie gezet. Je kunt de hele site browsen zonder ooit een cookie te krijgen. Pas bij daadwerkelijk inloggen komt die pcms.sid.

Localstorage (alleen jouw browser)

Voor gebruikers-comfort bewaart Klonkt in je lokale browser-storage een paar voorkeuren:

  • pcms-theme — light/dark mode
  • pcms-palette — kleurthema
  • pcms-feed-view — tijdlijn- of grid-weergave
  • pcms-grid-cols — aantal kolommen in de grid-weergave

Dit is géén cookie. Het leeft uitsluitend in jouw browser, wordt nooit naar de server gestuurd, en is niet leesbaar voor andere sites. Wis je browser-data en het is weg. AVG/GDPR: localStorage voor puur functionele voorkeuren zonder tracking-doel valt onder "strikt noodzakelijk" en vereist geen consent-banner.

Service worker (PWA)

Voor de installeerbare-app-functionaliteit registreert Klonkt een service worker (/sw.js). Die cachet je site zodat 'ie sneller laadt en offline werkt, maar doet geen calls naar derden, bewaart geen analytics, en tracked geen gebruik. Je kunt 'm bekijken én uitschakelen via DevTools → Application → Service Workers.

Audio: van je eigen server

Audio-bestanden worden gestreamd vanaf jouw eigen domein (/audio/stream/…) — geen externe audio-host, geen DRM-licentieserver, geen telemetrie over wie wat afspeelt. Er zit een lichte same-origin/header-check op die naïef hotlinken ontmoedigt (een directe paste in de adresbalk of een hotlink van een andere site krijgt minder makkelijk de bytes). Wees eerlijk: dat is frictie, geen kopieerbeveiliging — publiek afspeelbare audio is per definitie te downloaden. Het punt hier is privacy: de stream blijft op jouw server en belt niemand.

MediaSession API (lockscreen-bediening)

Deze API toont de huidige track + cover op je telefoon-lockscreen, in de notification-bar, en laat bluetooth-koptelefoon-knoppen werken. Dit is 100% browser-lokaal: metadata wordt door jouw browser aan jouw OS doorgegeven, niet naar een server gestuurd. Geen Google Cast, geen Spotify Connect, geen externe media-registry — pure native browser-API.

Wake Lock API (scherm actief tijdens afspelen)

Tijdens audio-playback stelt de speler het scherm-blanking uit zodat je telefoon niet halverwege een track in slaap valt. Dit gaat via de browser Wake Lock API — een lokale OS-permissie die jij per site kunt geven of weigeren. Geen tracking, geen "wie luistert wanneer"-logging. De lock wordt automatisch losgelaten zodra je pauzeert of de tab sluit.

Server logs

Je reverse proxy (Caddy/nginx) logt standaard wat requests, inclusief IP-adres. Klonkt zelf doet géén IP-logging in applicatie-data. Voor rate-limiting (login-pogingen e.d.) wordt het IP-adres gehashed verwerkt — niet rauw bewaard. Wat je hoster met server-logs doet valt buiten Klonkt; goede hosters (TransIP, Hetzner, OVH) volgen AVG/GDPR en bewaren logs maximaal een paar weken. Check hun privacyverklaring.

Statistieken (cookievrij)

De ingebouwde statistieken tellen pageviews en unieke bezoekers zonder cookie en zonder toestemming: een unieke bezoeker wordt geteld via een dagelijks roterende, gesaltede hash van IP+useragent die nooit wordt bewaard — dus geen persistente identifier, geen profiel, niets te volgen. Alles blijft op jouw server.

Cirkels (federatie — alleen als je het aanzet)

Wil je dat je site de publieke posts van andere Klonkt-sites toont (Cirkels), dan haalt jouw server die bij die andere sites op — rechtstreeks, via hun eigen domein. Geen centrale sync-server, geen "Klonkt-cloud", geen Anthropic/Google/AWS in de keten. Jij bepaalt wie er in jouw cirkel zit; het is asymmetrisch en volledig decentraal.

Het verkeer is Ed25519-gesigneerd: elke site publiceert een actor + outbox met een handtekening, en de ontvanger verifieert die. Zo kan niemand zich voordoen als een andere site. Staat Cirkels uit (de standaard), dan gebeurt er helemaal niks externs.

Externe embeds (als je ze gebruikt)

Als je in een post een YouTube-video, SoundCloud-track of Spotify-embed zet, wordt die vanaf hún servers geladen. Op die embed gelden hun cookies/tracking. Klonkt gebruikt voor YouTube standaard youtube-nocookie.com — de privacy-vriendelijke modus die pas tracking-cookies zet na interactie.

Vermijd je embeds, dan heb je nul externe calls. Gebruik je ze, dan bepaal jij dat per post, en de bezoeker ziet zelf waar ze vandaan komen (zichtbaar in DevTools).

Optionele koppelingen (jouw keuze)

Een paar functies zijn opt-in en raken pas een derde partij als jij ze inschakelt:

  • Google-login voor luisteraars — met je eigen Google Cloud-client, alleen om te reageren. Zet je 'm niet aan, dan is er geen Google in beeld.
  • E-mail (wachtwoord-reset, nieuwsbrief) — via een SMTP-server die jij configureert. Geen Mailchimp, geen SendGrid; de adressen staan in jouw database, nooit bij een derde.
  • Premium via Patreon — alleen als je premium aanzet; de koppeling loopt via de Klonkt-license-service en ontgrendelt enkel functies. Laat je 't uit, dan is er niets.

AVG/GDPR: geen consent-banner nodig

De Europese AVG vereist een consent-banner voor niet-essentiële cookies en tracking. Omdat Klonkt geen niet-essentiële cookies zet en niet trackt, is er niets om toestemming voor te vragen. De enige cookie (pcms.sid na login) valt onder "strikt noodzakelijk voor de aangevraagde dienst" — vrijgesteld van consent-plicht.

Voeg je zelf externe embeds, Google Analytics of nieuwsbrief-tracking van derden toe, dan zul je weer een consent-banner moeten bouwen. Maar dat is jouw keuze, niet iets wat Klonkt oplegt.

SQLite onder de motorkap

Klonkt bewaart alles in één SQLite-bestand op jouw server — posts, gebruikers, instellingen, rate-limit (met gehashde IPs). Geen externe database-dienst. Je back-up is simpelweg een kopie van dat bestand (plus je storage/-map met media). De data blijft van begin tot eind op jouw server.

Bewijs: audit het zelf

Open grep -rE "google-analytics|facebook|fbq|gtag|hotjar|segment|mixpanel" src/ in de Klonkt-broncode. Resultaat: geen runtime-calls naar trackers. De enige "google" die je vindt zit in de optionele login-functie (jouw eigen client) of in docs/comments.

Voor forensische zekerheid: draai Klonkt achter een firewall die uitgaande connecties logt (tcpdump of de logs van je router). Surf door je eigen site. Het enige uitgaande verkeer is dan hooguit naar embed-URLs die je zelf plaatste of een Cirkel die je zelf toevoegde — en allebei kun je weglaten.

Dat is Klonkt's belofte, en het is controleerbaar. Geen marketing, gewoon geen externe calls.