De meeste analytics tools zijn prima voor de basis. Pageviews, sessies, referrers. Je voegt de script tag toe, de cijfers verschijnen in een dashboard, en dat is meestal genoeg.
Maar dan wil je iets specifieker weten. Welke landingspagina converteert daadwerkelijk? Waar haken gebruikers af in het aanmeldproces? Presteert de variant met het kortere formulier beter dan die met de social proof sectie? En ineens zit je op de prijspagina van Mixpanel of Amplitude, waar funnel analysis achter een tier zit die meer kost dan je server.
Ik had BugBarn al draaien voor error tracking, en de ervaring van het bouwen ervan leerde me iets nuttigs: het meeste waar deze SaaS-tools geld voor vragen is de hosting, niet het moeilijke deel. Het moeilijke deel bij analytics is de query layer: het aggregeren van time-series data, het berekenen van funnel conversion rates, het samenvoegen van events tot sessies. Dat is niet triviaal, maar het is ook geen magie. Dus heb ik FunnelBarn gebouwd.
Sessies zonder cookies
De eerste ontwerpbeslissing is de beslissing die al het andere vormt. FunnelBarn gebruikt geen cookies. Het zet niets in de browser en vraagt niet om toestemming. Sessies worden server-side bijgehouden met een anonieme fingerprint op basis van IP-adres en User-Agent. Het user ID wordt gehasht voor opslag en wordt nooit via de API blootgesteld. Vanuit het perspectief van de browser is het gewoon een HTTP request.
Dit is niet perfect. Twee mensen op hetzelfde NAT met dezelfde browser kunnen naar dezelfde sessie hashen. Maar het is goed genoeg voor het soort vragen dat funnel analysis probeert te beantwoorden. En het betekent dat je het kunt deployen zonder cookiebanner, zonder consent management platform, en zonder het gedrag van je gebruikers naar een derde partij te sturen.
Wat er wordt bijgehouden
Elk event heeft een naam, een URL, een referrer, en optionele custom properties. UTM parameters worden automatisch opgevangen. Je kunt alles wat je wilt aan een event hangen als key-value property: plan tier, experiment variant, formulierstap, wat maar logisch is voor je app.
Het dashboard toont time-series grafieken voor events en sessies over 24 uur, 7 dagen en 30 dagen. Top pagina's en referrers. UTM attributie uitgesplitst per source, medium en campagne. Device en browser breakdown. Er is ook een live event feed die events toont zodra ze binnenkomen, wat handig is als je instrumentatie test en wilt controleren of iets daadwerkelijk is afgevuurd.
Funnel analysis
Dit is de voornaamste reden dat ik het heb gebouwd. Je definieert een funnel als een geordende lijst stappen. Elke stap is een event naam plus optionele property filters. FunnelBarn berekent het conversiepercentage tussen elke stap, het uitvalpercentage, en laat je de resultaten segmenteren per browser, device type, UTM source, of elke custom property die je aan de events hebt gehangen.
Als je wilt weten hoeveel mensen die via een Google-advertentie op de homepage zijn beland, doorgegaan zijn naar accountaanmaak en vervolgens hun eerste project hebben gemaakt: dat is een funnel van vier stappen met een UTM source filter op de eerste stap. Het opzetten kost ongeveer dertig seconden.
A/B test analyse
FunnelBarn heeft een lichtgewicht A/B analyse view. Je kiest een conversie-event, definieert de controle en variant met property filters, en het berekent conversiepercentages en steekproefgrootten voor elke groep. Het voert je experimenten niet voor je uit, je moet nog steeds zelf varianten toewijzen en de property aan je events hangen, maar zodra je die data hebt stromen, is het aflezen van de resultaten eenvoudig.
Hoe de ingest werkt
Hetzelfde patroon als BugBarn. Het ingest endpoint schrijft binnenkomende events naar een spool op schijf en returnt meteen. Een achtergrondwerker pakt ze op, verwerkt ze, en schrijft naar SQLite. Ingest blijft snel ongeacht wat de database doet, en er gaat niets verloren als het proces halverwege een batch herstart. Voor de event volumes die een self-hosted analytics tool realistisch gezien zal zien, handelt SQLite de query-kant zonder problemen af.
SDK's
Er zijn SDK's voor JavaScript, Node.js, Python en Go. De browser SDK trackt pageviews automatisch, ondersteunt custom events, en flusht asynchroon zodat het niets blokkeert. De Node.js, Python en Go SDK's dekken server-side tracking, handig als je events wilt vastleggen die buiten de browser plaatsvinden, zoals een achtergrondtaak die voltooid wordt of een betaling die verwerkt wordt.
Alle drie volgen dezelfde interface: initialiseren met je project API key en endpoint, en dan track aanroepen met een event naam en optionele properties. De identify call laat je events koppelen aan een gehasht user ID als je per-user funnel analysis wilt.
Installatie
Op Linux is APT de schoonste optie. Voeg de WebWiebe repository toe en installeer het pakket. Het wordt geleverd met een systemd unit en leest configuratie uit environment variables met een FUNNELBARN_ prefix.
curl -fsSL https://webwiebe.nl/apt/install.sh | sudo bash
sudo apt install funnelbarnOp macOS is er een Homebrew tap. Docker is ook beschikbaar als je de voorkeur geeft aan containers.
brew tap webwiebe/funnelbarn
brew install funnelbarnMulti-project ondersteuning is ingebouwd. Elk project krijgt zijn eigen API key, en het dashboard laat je data per project bekijken of over allemaal tegelijk. Als je BugBarn al op dezelfde server draait, is FunnelBarn gewoon weer een binary op dezelfde machine, geen extra infrastructuur nodig.
De broncode staat op GitHub. Installatiedetails staan op de APT en Homebrew pagina's.