Rails-App
Wachturm
Web-Analytics ohne Cookies, ohne Banner und ohne personenbezogene Daten. Selbst gehostet, eine SQLite-Datei, läuft auf allen meinen Seiten.
Ansehen- Status
- Im Einsatz auf meinen eigenen Seiten, nicht öffentlich
- Erster Commit
- 6. Februar 2026
- initial project plan, tasks, and ralph loop setup
- Technik
- Rails 8, SQLite, Chart.js, MaxMind GeoIP, Kamal
Warum ich das gebaut habe
Es war die Anfangszeit, in der man mit Agenten plötzlich einfach Software nachbauen konnte. Ich wollte meine eigene Analytics. Warum? Weil warum nicht.
Vorher liefen bei mir zwei selbst gehostete Tools parallel, GoatCounter und Bearlytics. Beide taten ungefähr, was ich wollte, keins genau. Bearlytics hat mir gefallen, also habe ich die Idee genommen und sie nach meinen Regeln neu gebaut: Rails, so nah an den Defaults wie möglich, eine SQLite-Datei, fast keine Abhängigkeiten.
Was es macht
- Ein Skript von etwa 15 Zeilen auf deiner Seite schickt Pfad und Referrer an Wachturm und bekommt ein 1x1-Pixel zurück.
- Gezählt werden Seitenaufrufe, Besucher pro Tag, Referrer, Länder, Geräte, Browser und Sprache.
- Keine Cookies, kein Local Storage, keine IP-Adressen in der Datenbank.
- Ein Dashboard pro Seite, eigene IPs lassen sich ausblenden.
Technische Entscheidungen
Besucher zählen, ohne sie wiederzuerkennen. Aus IP, User-Agent, Datum und einem geheimen Salt wird ein Hash gebildet, die IP selbst wird nie gespeichert. Weil das Datum im Hash steckt, ändert er sich jeden Tag. Du siehst, wie viele verschiedene Besucher heute da waren. Wer gestern da war, kannst du nicht nachverfolgen. Das ist kein Mangel, das ist der Sinn.
Ein zusätzliches Gem. Außer Rails gibt es genau eine Abhängigkeit, die GeoIP-Bibliothek für die Länder. Rate Limiting kommt aus Rails 8 selbst. Weniger Abhängigkeiten heißt weniger, was in zwei Jahren kaputtgehen kann.
Langweilig deployen. Wachturm läuft in meinem Homelab. Im September 2026 habe ich es auf ein bewusst einfaches Kamal-Setup umgestellt, das ich jetzt für alle meine Rails-Apps nutze.
Aus den Sessions
Gebaut habe ich Wachturm am 6. Februar 2026, in ungefähr 90 Minuten. Von “lass uns das mal anschauen” bis live, mit 152 Tests ohne Fehler und echtem Traffic auf meinem Blog und der Workshop-Seite.
Die App selbst war dabei nur die Hälfte. In derselben Session habe ich jede Datei reviewt, GoatCounter und Bearlytics komplett abgebaut, samt DNS-Einträgen und Backup-Skripten, Wachturm ins nächtliche Backup aufgenommen und automatische Deployments für das ganze Homelab eingerichtet. Ein Jahr vorher wäre das eine Woche Arbeit gewesen. Hier war es eine lange Mittagspause, weil für jeden Schritt schon ein Skill existierte.
Im September dann die Gegenprobe: Auf AskTNT kamen keine Seitenaufrufe an. Ich hatte meine eigene IP ausgeblendet und konnte es nicht selbst testen. Die Ursache war die eigene Content Security Policy der Seite, die das Tracking-Pixel blockiert hat. Eine Zeile Freigabe, ein Test, der diese Regel festhält, und der Check nach 24 Stunden war sauber.