Mastodon-Antworten als Kommentare

Diese Website wird mit Grav betrieben. Das CMS bringt keine eigene Kommentarfunktion mit und die meisten Diskussionen zu den Posts hier entwickeln sich auf Mastodon.

Warum nicht die beiden Aspekte verbinden? Also habe ich Claude Code gefragt, ob man nicht ein Plugin entwickeln könnte, um die Antworten auf einen bestimmten Toot unter einem Blogpost anzuzeigen.

Das ist dem LLM nicht besonders schwergefallen ("trivial!") und herausgekommen sind nur ein paar Zeilen Code, die ich selbst nie so hingeschustert bekommen hätte. Das Ganze ist angeblich auch DSGVO-konform.

Wer mag, kann sich das Ding für die eigene Nutzung herunterladen oder hier unter diesem Post ausprobieren.


Und hier kann man es in Aktion sehen.

Das LLM beschreibt es selbst folgendermaßen:

Das Plugin besteht aus drei Teilen: einem kleinen PHP-Plugin, das sich in Grav einklinkt und die Twig-Variablen befüllt, einem Twig-Partial, das den Kommentarcontainer ins HTML schreibt, und reinem Vanilla-JavaScript ohne Build-Schritt.

Das JS ruft direkt die öffentliche Mastodon-API ab — konkret den /api/v1/statuses/:id/context-Endpoint, der alle Antworten auf einen Toot liefert. Das Ergebnis landet im sessionStorage, damit beim Blättern innerhalb einer Sitzung keine unnötigen Anfragen entstehen.

Für die DSGVO ist die Sache einfach: Da der Browser beim Abruf seine IP-Adresse an den Mastodon-Server schickt, ist das eine Datenübertragung an Dritte, die Einwilligung erfordert. Das Plugin zeigt deshalb zunächst einen Hinweis an und lädt Kommentare erst nach Klick auf einen Button — optional mit „Einwilligung merken"-Checkbox per localStorage. Weil das Mastodon-HTML aus dem API-Response grundsätzlich als unsicher zu behandeln ist, läuft es außerdem durch einen eigenen DOM-basierten Sanitizer, der nur harmlose Tags und Attribute durchlässt und Event-Handler sowie javascript:-URLs entfernt.

Für eine mehrsprachige Seite musste die Toot-ID nur einmal (in der deutschen Hauptdatei) eingetragen werden — das Plugin sucht beim Fehlen in allen Sprachvarianten der Seite nach einer konfigurierten ID.

Previous Post

Replies on Mastodon

Loading replies …