pulse.md

Aanleiding
Bijna elke WordPress-site plakt er standaard Google Analytics op. Dat betekent een cookiebanner, een verwerkersovereenkomst met een advertentiebedrijf en bezoekersdata die je server verlaat nog voor je de eerste grafiek ziet. Voor een praktijk als YLVA, waar rust en respect het uitgangspunt zijn, voelt dat verkeerd; en juridisch is het ook nét niet.
Ik wilde weten hoeveel mensen langskomen, waar ze vandaan komen en welke pagina's werken, zonder iemand te volgen. Dat product bestond niet in de vorm die ik zocht, dus bouwde ik het zelf.
Oplossing
Pulse is een analytics-plugin die volledig binnen WordPress draait:
- Cookieloos: geen cookiebanner nodig; er worden geen cookies gezet en geen persoonsgegevens opgeslagen.
- Geen externe trackers: alle data blijft in je eigen database; er gaat niets naar Google of welk platform dan ook.
- Privacy by design: geen device-fingerprinting. Bezoekers worden geanonimiseerd via een gehashte identifier met roterend salt; je onderscheidt wél sessies, maar herleidt niemand.
- Rapportages in het WordPress-admin: bezoekers over tijd, top-pagina's, bronnen en apparaten, page-journeys (Sankey) en button-clicks, met datumfilters en een dashboard-widget.
Voor de bezoeker is het onzichtbaar; voor de eigenaar is het gewoon een tab in het menu.
Onder de motorkap
Pulse is een strak gelaagde plugin (PHP 8.4, PSR-4, ruim 40 testklassen met PHPUnit):
- Een lichte ingestion-endpoint valideert en normaliseert elk event voor het de database in gaat; classificatie van user-agents en herkomst gebeurt server-side.
- De privacy-laag (salt-store, visitor-hasher, exclusion-policy) is bewust een apart, testbaar onderdeel: anonimisering is hier geen bijzaak maar de kern.
- Een set presenters rekent de ruwe events om naar de cijfers achter elke grafiek (bounce, sessieduur, drukste uren, verkeersbronnen, journeys), netjes gescheiden van de weergave.
- Onderhoud draait op WP-cron: een aggregate-roller verdicht oude events en een retention-policy ruimt op, zodat de tabellen niet eindeloos groeien.
Geen dikke JavaScript-bundel op de front-end, alleen een compact meetscript. De zwaarte zit in de back-end, waar het hoort.
Status
In productie bij WordPress-klanten van basdekort.nl en opgezet als herbruikbare plugin. Actief onderhouden (v1.3.0): privacy-vriendelijke statistiek die je gewoon aanzet en daarna vergeet.




legal.json
"bedrijfsnaam": "Bas de Kort",
"rechtsvorm": "eenmanszaak",
"handelsnamen": ["Bas de Kort", "LengthOfRope"],
"vestigingsadres": "Kerkeakker 3, 6674 EM Herveld, NL",
"kvk": "42038027",
"btw_id": "NL004476145B32",
"contact": { "form": "basdekort.nl/contact", "telephone": "+31628456862" },
"documenten": [ "privacy", "algemene voorwaarden", "verwerkersovereenkomst" ]
}