Das Cirlo-Widget ist ein einzelnes Script-Tag. Es rendert einen Feedback-Button unten in deiner App, kapselt sein Styling im Shadow DOM und meldet sich beim ersten Laden automatisch.
Vor dem schliessenden </body> einfügen:
<script src="https://cirlo.dev/widget.js" data-key="DEIN_WIDGET_KEY" data-accent="#e64bc8" data-position="bottom-right" data-lang="de" defer></script>
Dann blockiert dein Browser das Widget stillschweigend: der Knopf erscheint nicht, und in der Konsole steht eine CSP-Meldung. Trag https://cirlo.dev an zwei Stellen deiner Policy ein:
script-src ... https://cirlo.dev; damit das Widget geladen werden darf connect-src ... https://cirlo.dev; damit es Meldungen senden darf
Beides ist noetig. Fehlt nur connect-src, laedt das Widget und der Knopf erscheint, aber jede abgeschickte Meldung verschwindet. Keine CSP im Einsatz? Dann ist hier nichts zu tun.
6,7 KB über die Leitung (gzip), 17,1 KB unkomprimierter Quelltext. Kein Framework, keine weiteren Requests, kein Session-Replay. Die Zahl kannst du selbst nachrechnen: node scripts/widget-size.mjs im Cirlo-Repo. Zum Vergleich: Werkzeuge mit Session-Replay laden ein Vielfaches davon, weil sie die Seite dauerhaft mitschneiden. Cirlo schneidet nichts dauerhaft mit.
Bei einem Bug-Report (nie bei Idee oder Lob) schickt das Widget ein Repro-Paket mit: die letzten 40 Ereignisse vor der Meldung, ausschliesslich im Arbeitsspeicher gehalten.
Nie erfasst: Tastatureingaben, Feldinhalte, Inhalte von Requests oder Antworten, Header, Cookies, Screenshots, Video. Secret-verdächtige Zeichenketten werden serverseitig entfernt, das Paket ist auf 8 KB begrenzt. In den Projekt-Einstellungen abschaltbar.
window.cirlo.identify({
email: "user@example.com",
name: "Alex",
paying: true, // optional
plan: "Pro", // optional, max. 40 Zeichen
});paying und plan sind freiwillig. Sind sie gesetzt, zeigen Fallliste und Tagesüberblick zusätzlich, wie viele zahlende Kunden ein Fehler getroffen hat. Fehlen sie, steht dort nichts: Cirlo leitet daraus nie ab, dass jemand nicht zahlt. Beides sind Angaben über deine Nutzer und fallen unter dieselbe Auftragsverarbeitung wie die Adresse eines Melders.
Maschinenlesbare Kurzfassung: https://cirlo.dev/llms.txt