Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Comment Tracker

Ein persönliches Tool, um zu verfolgen, wo du in Blogs Kommentare hinterlassen hast – und automatisch benachrichtigt zu werden, wenn dort neue Kommentare (z. B. Antworten) auftauchen. Erkennt WordPress-Kommentar-Feeds automatisch und pollt sie rollierend für 7 Tage nach der letzten Aktivität.

Funktionsweise

  1. Du hinterlässt irgendwo einen Blog-Kommentar und klickst auf das Bookmarklet.
  2. Titel und URL der aktuellen Seite werden per GET-Request an add.php gesendet und gespeichert.
  3. Im Hintergrund prüft add.php sofort, ob die Seite einen WordPress-Kommentar-Feed hat (z. B. https://example.com/blog/mein-post/feed/).
  4. Falls ja: Ein stündlich laufendes Cron-Skript prüft den Feed alle 6 Stunden per Hash-Vergleich auf Änderungen – für 7 Tage ab der letzten erkannten Änderung (rollierendes Fenster).
  5. Findet das Skript eine Änderung, springt der Eintrag als "ungelesen" an die Spitze deiner ToDo-Liste – auch wenn du ihn zuvor bereits archiviert hattest.
  6. Erledigte Einträge landest du im Archiv (chronologisch), kannst sie aber jederzeit reaktivieren.

Voraussetzungen

  • PHP 8.1 oder neuer mit den Extensions pdo_mysql und curl
  • MySQL 5.7+ oder MariaDB 10.3+
  • Apache mit .htaccess-Unterstützung (mod_headers empfohlen)
  • Echter Crontab-Zugriff (z. B. über das Plesk-/cPanel-/IONOS-Kontrollpanel oder SSH)
  • Eine öffentlich per HTTPS erreichbare Domain/Subdomain

Installation

Empfohlen: Document Root auf public/ setzen

Richte im Hosting-Panel (Plesk/cPanel/IONOS: "Hosting-Einstellungen" → "Dokumenten-Stammverzeichnis") die Domain/Subdomain so ein, dass sie auf den public/-Ordner dieses Projekts zeigt. Damit sind src/, cron/, install/ und config.php automatisch nicht öffentlich erreichbar.

Falls sich der Document Root bei deinem Hoster nicht ändern lässt, liegt in src/, cron/, install/ und logs/ jeweils eine .htaccess mit Deny from all als zusätzliche Absicherung – der Web-Installer bleibt trotzdem über public/install.php erreichbar.

Variante A: Web-Installer (kein SSH nötig)

  1. Projektdateien auf den Server hochladen.
  2. Leere MySQL-Datenbank + Benutzer in der Hosting-Verwaltung anlegen (oder Zugangsdaten eines Benutzers mit CREATE DATABASE-Recht bereithalten).
  3. https://deine-domain.tld/install.php im Browser öffnen und das Formular ausfüllen (DB-Zugang, Basis-URL, Admin-E-Mail/Passwort).
  4. Nach erfolgreicher Installation wird einmalig der Bookmarklet-Code und die passende Crontab-Zeile angezeigt – beides sofort sichern.
  5. Crontab-Eintrag im Hosting-Panel eintragen (siehe unten).
  6. Unter /login.php einloggen, unter /bookmarklet.php bei Bedarf den Bookmarklet-Code erneut abrufen (nur direkt nach Erzeugen/Neugenerieren des Tokens sichtbar).

Variante B: CLI-Installer (mit SSH-Zugang)

php install/install.php

Das Skript fragt interaktiv DB-Zugang, Basis-URL, Zeitzone und Admin-Zugangsdaten ab und gibt am Ende Bookmarklet-Code und Crontab-Zeile aus.

Crontab einrichten

Im Hosting-Panel (z. B. Plesk: "Geplante Aufgaben") oder per crontab -e:

0 * * * * /usr/bin/php /pfad/zum/projekt/cron/check_feeds.php >> /pfad/zum/projekt/logs/cron.log 2>&1
  • Läuft stündlich; das Skript selbst entscheidet anhand von check_interval_hours (Standard 6h) und watch_until, welche Einträge tatsächlich fällig sind.
  • Der PHP-CLI-Pfad (/usr/bin/php) variiert je nach Hoster – in Plesk unter "PHP-Einstellungen" nachsehen, ggf. php8.2, php8.3 o. ä. verwenden.
  • Ein flock()-Lock verhindert überlappende Läufe, falls ein Durchlauf einmal länger dauert.
  • Logs landen in logs/cron.log (Verzeichnis muss beschreibbar sein).

Bookmarklet einrichten

Nach der Installation bzw. unter Einstellungen → Token neu generieren wird der Bookmarklet-Code einmalig im Klartext angezeigt. Den Link 📌 Kommentar tracken per Drag & Drop in die Lesezeichenleiste ziehen, oder den angezeigten javascript:...-Code manuell als neues Lesezeichen anlegen.

Sicherheitshinweis: Der Bookmarklet-Link enthält einen geheimen Token. Er landet dadurch in deiner Browser-Historie/Lesezeichen-Synchronisierung. Bei Verdacht auf Kompromittierung unter Einstellungen einen neuen Token erzeugen – der alte Link funktioniert danach nicht mehr.

Update (bei neuen Versionen)

Neue Dateien hochladen, dann Migrationen ausführen:

php install/update.php

oder eingeloggt über https://deine-domain.tld/update.php. Beide Wege führen alle noch nicht angewendeten .sql-Dateien aus install/migrations/ in numerischer Reihenfolge transaktional aus und tragen sie in schema_migrations ein. Neue Migrationen werden als install/migrations/00X_beschreibung.sql abgelegt.

Architektur

public/    Document Root – Router-lose Einzeldateien (login.php, todo.php, add.php, ...)
src/       PHP-Klassen (Auth, Bookmark, FeedWatcher, Http, Installer, ...), nicht öffentlich erreichbar
cron/      check_feeds.php – stündlicher CLI-Runner
install/   Web-/CLI-Installer, Schema, Migrationen
config.php Datenbankzugang & Einstellungen (aus config.example.php generiert, nicht versioniert)

Kein Framework, kein Composer – bewusst schlank gehalten für einfaches Hosting auf Shared-Hosting-Umgebungen.

Sicherheit

  • SSRF-Schutz: Bevor der Server eine vom Bookmarklet oder Cron übergebene URL abruft, wird der aufgelöste Host gegen private/loopback/link-local-IP-Bereiche geprüft (auch bei Redirects, Hop für Hop).
  • CSRF-Schutz: Alle Formulare in der eingeloggten Oberfläche verwenden ein Session-CSRF-Token. Der Bookmarklet-Endpunkt (add.php) ist bewusst tokenbasiert statt sessionbasiert, da er von außerhalb der App aufgerufen wird.
  • Passwörter: password_hash()/password_verify(), keine Klartextspeicherung.
  • Response-Limits: Feed-/Seitenabrufe sind auf ~2 MB und wenige Sekunden Timeout begrenzt, um Ressourcenverbrauch durch böswillige/kaputte Ziel-URLs zu begrenzen.

Troubleshooting

"Kein Feed erkannt", obwohl es eine WordPress-Seite ist

  • Manche Sicherheits-/SEO-Plugins (z. B. bestimmte Yoast-Einstellungen) deaktivieren WordPress-Feeds komplett.
  • Manche Themes/Plugins nutzen externe Kommentarsysteme (Disqus, Jetpack Comments) statt der nativen WP-Kommentare – dafür gibt es keinen klassischen Kommentar-Feed.
  • Cache-Plugins können den /feed/-Aufruf verzögert aktualisieren.

Cron läuft, aber nichts passiert

  • logs/cron.log prüfen.
  • Sicherstellen, dass der PHP-CLI-Pfad im Crontab-Eintrag stimmt (php -v per SSH testen).
  • Prüfen, ob watch_until für den Eintrag bereits abgelaufen ist – dann in der App unter Archiv/ToDo "Reaktivieren" klicken.

Nach 5 Fehlversuchen wird ein Feed nicht mehr geprüft

  • Das ist beabsichtigt (max_consecutive_failures in config.php), um dauerhaft kaputte/entfernte Feeds nicht endlos abzufragen. Über "Reaktivieren" im Archiv bzw. erneutes Bookmarken lässt sich die Beobachtung zurücksetzen.

Out of Scope (bewusst nicht umgesetzt)

E-Mail-Benachrichtigungen, Mehrbenutzer-Betrieb, automatisierte Tests, Unterstützung für Nicht-WordPress-Kommentar-Feeds, Browser-Extension als Alternative zum Bookmarklet.

About

Ein als ToDo-Liste gedachter "Blog Kommentar Tracker" | Claude Code Sonnet 5 Vibecoded

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages