## Agundur Open Source · Kostenlos auf GitHub Das CMS, das Ihr KI-Assistent sofort versteht. BonsaiPress ist ein schlankes PHP-CMS ganz ohne Datenbank — nur Dateien, Git und eine Shell. Statischer HTML-Export, ein Docker-Befehl zum Start. Wer damit noch schneller bauen will: vier Claude Code Skills — separat, einmalig kostenpflichtig, kein Abo. Kostenlos auf GitHub ansehen Claude Code Skills ansehen git clone --recurse-submodules https://github.com/Agundur-KDE/BonsaiPress2.git && cd BonsaiPress2 && ./bonsai start Warum BonsaiPress Sagen Sie Ihrem KI-Assistenten, was Sie wollen. Er kann es wirklich umsetzen. Nicht nur Text vorschlagen — Seiten anlegen, Design anpassen, deployen. Weil BonsaiPress jeden Schritt über einfache, dokumentierte Befehle statt versteckte Admin-Menüs abbildet, kann eine KI wie Claude Code tatsächlich mitarbeiten. Genau so ist auch diese Seite hier entstanden. Kleine Änderungen ohne Entwickler-Rechnung Text ändern, neue Seite anlegen, Bild austauschen — sagen Sie es Ihrem KI-Assistenten. Für viele Handgriffe brauchen Sie keinen Entwickler mehr. Kaum Angriffsfläche, by Design Keine Datenbank heißt: nichts, das gehackt, überlastet oder bei einem Update kaputt migriert werden kann. Weniger, das schiefgehen kann. In Minuten startklar Ein einziger Befehl richtet alles ein. Keine stundenlange Einrichtung, kein Expertenwissen nötig. Optimal für Google & KI-Suche Schnell für Menschen, zuverlässig lesbar für ChatGPT, Claude & Google — gemessen, nicht behauptet: Der Weg von hier Von kostenlos bis fertig gehostet 01 Kostenlos BonsaiPress holen Open Source auf GitHub, ein Docker-Befehl zum Start. Kein Kauf nötig, um es auszuprobieren. Auf GitHub ansehen → 02 Einmalig kostenpflichtig Mit Claude Code Skills schneller bauen Vier Skills für Claude Code — Workflow, Anti-Slop-Design, Schema.org und CSS-Interaktionen. Separates Angebot, kein Abo. Skills ansehen → 03 Hosting — ab €19/Monat Bei Agundur hosten lassen Domain, DNS, E-Mail und Hosting in Deutschland nach DSGVO, inklusive laufender Updates — wenn Sie Ihre Seite nicht selbst betreiben wollen. Hosting-Angebot ansehen → Claude Code Skills — separates, kostenpflichtiges Angebot BonsaiPress ist kostenlos. Diese vier Skills sind es nicht. Einmaliger Kauf, kein Abo, Updates per E-Mail. Die Skills bauen auf BonsaiPress auf, sind aber ein eigenständiges, bezahlpflichtiges Produkt. Empfohlen Bundle: BonsaiPress + Ambrosia Beide Skills zusammen — BonsaiPress-Workflow und Anti-Slop-Bootstrap-Design. 8% günstiger als einzeln. €89 €98 Kaufen BonsaiPress Skill €49 BonsaiPress-Workflow & Architektur Client/CMS-Trennung, Deploy-Pattern PHP/TDD, GEO/SEO-Pflichtfelder Updates per E-Mail Kaufen Ambrosia Skill €49 Anti-Slop Bootstrap-5-Design Verhindert generische KI-Templates 40+ geblockte Bootstrap-KI-Tells Updates per E-Mail Kaufen Schema.org Skill — einzeln erhältlich €38 JSON-LD für 20+ Schema-Typen Geprüft gegen Googles Rich-Results-Pflichtfelder Läuft direkt in Claude Code Updates per E-Mail Kaufen morphcss Skill — einzeln erhältlich €49 30 fertige CSS-Interaktions-Patterns Modal, Slider, Dropdown, Parallax, Theme-Toggle … Minimal-JS statt JS-Framework Updates per E-Mail Kaufen Alle Details zu den Skills ansehen Nächster Schritt: Hosting Bereit, das alte System hinter sich zu lassen? Viele, die mich kontaktieren, wollen einfach raus — aus einem CMS, das langsam, unübersichtlich oder für KI-Crawler kaum lesbar geworden ist. Ich baue Ihre Seite in BonsaiPress neu auf: SEO- und GEO-tauglich von Anfang an, nicht nachträglich drangeflickt. Domain-Registrierung & -Verwaltung DNS E-Mail-Postfächer Hosting in Deutschland (DSGVO-konform) Laufende Updates Projekt anfragen Kurze Nachricht reicht — dann sehen wir gemeinsam, was sinnvoll ist. ★★★★★ „Die Installation von BonsaiPress2 war wirklich ganz einfach – alles hat reibungslos geklappt! Seitdem hat sich mein SEO deutlich verbessert. Mehr Sichtbarkeit, bessere Rankings und insgesamt eine spürbar bessere Performance. Ein großes Dankeschön an den Entwickler für dieses fantastische CMS!“ Nathalie Häufige Fragen Was ist BonsaiPress und kann ich es nutzen? BonsaiPress ist ein schlankes PHP-CMS ohne Datenbank, mit statischem HTML-Export und FTPS-Deploy. Es ist Open Source, kostenlos auf GitHub verfügbar und wird aktiv weiterentwickelt. Sind die Claude Code Skills auch kostenlos? Nein. BonsaiPress selbst ist kostenlos und quelloffen. Die vier Claude Code Skills (BonsaiPress, Ambrosia, Schema.org und morphcss) sind ein separates, einmalig kostenpflichtiges Angebot ab 38 Euro — kein Abo. BonsaiPress und Ambrosia gibt es zusätzlich im Bundle günstiger. Was gehört zum Hosting-Angebot? Ich baue und hoste BonsaiPress-Seiten komplett: Domain-Registrierung und -Verwaltung, DNS, E-Mail-Postfächer, Hosting in Deutschland nach DSGVO sowie laufende Updates — ab €19/Monat. Melden Sie sich kurz mit Ihrem Vorhaben, dann sehen wir gemeinsam, was sinnvoll ist. Nehmen Sie auch kleinere Projekte an? Ja — vom einzelnen PHP-Script bis zur kompletten Website inklusive Hosting. Kontaktieren Sie mich kurz mit Ihrem Vorhaben, dann sehen wir gemeinsam, was sinnvoll ist. Wie lange dauert eine typische Umsetzung? Das hängt vom Umfang ab. Kleine Automatisierungen oder Schnittstellen: 1–3 Tage. Komplette Websites inklusive Umzug und Hosting-Einrichtung: 3–8 Wochen. Nach einem kurzen Briefing gebe ich eine realistische Einschätzung. Arbeiten Sie remote oder vor Ort? Überwiegend remote — deutschlandweit und international. Vor-Ort-Termine im Raum Mannheim/Rhein-Neckar sind bei Bedarf möglich. Wie kann ich prüfen, ob meine aktuelle Website von ChatGPT & Co. verstanden wird? Mit dem kostenlosen GEO Scanner — URL eingeben, Score in Sekunden, inklusive konkreter Fixes. --- ## Projects Unsere Projekte https://github.com/Agundur-KDE KToot – Mastodon-Benachrichtigungen für KDE Plasma KToot bringt Mastodon-Benachrichtigungen (Erwähnungen, Follows, Favoriten, Boosts) direkt in die Plasma-Taskleiste. Panel-Icon mit Ungelesen-Badge, Popup mit den letzten Meldungen, KWallet-gesichertes Zugriffs-Token – ganz ohne kompiliertes Plugin. Mehr ... KCast – Chromecast-Steuerung für KDE Plasma KCast ist ein modernes KDE-Plasmoid zur Steuerung von Chromecast-Geräten direkt vom Plasma-Desktop aus. Es basiert auf catt und integriert sich nahtlos in das KDE-Ökosystem – inklusive Mediensteuerung, Geräteerkennung. Ideal für Heimkino-Enthusiasten und Präsentationen im Büro. Mehr ... KHoneycomb – Wabenkachel-Programmstarter für KDE Plasma 6 KHoneycomb stellt Programmstarter als leuchtende, neumorphe Wabenkacheln dar – statt eines schlichten Icon-Rasters oder einer Taskleisten-Zeile. 3D-Bevel-Regler, eigenes Hintergrundbild, automatisch anpassendes Waben-Layout. Für einen Desktop, der einen Screenshot wert ist. Mehr ... KClaude – Session-Manager für Claude Code KClaude merkt sich Claude-Code-Sessions mit Name und Verzeichnis und setzt sie per Klick in einem echten Terminal fort. Live-Status-Ampel, Panel-Benachrichtigungen und ein Rate-Limit-Kontingent direkt im Panel machen es zum Cockpit für Claude Code auf dem Desktop. Mehr ... KFritz – Anrufmonitor für FRITZ!Box KFritz zeigt eingehende Anrufe auf dem Desktop an, inklusive Anrufername aus dem FRITZ!Box-Telefonbuch. Entwickelt für KDE Plasma und vollständig lokal datenschutzkonform. Ideal für Homeoffice oder kleine Büros. Mehr ... OSBMonitor – Open Build Service im Blick Dieses Plasmoid visualisiert den aktuellen Status deiner OBS-Projekte in Echtzeit. Unterstützt automatische Statusaktualisierung, Farbcodierung und Build-Übersicht. Ein Muss für Paketentwickler! Mehr ... EZMonitor – Solarpanel-Überwachung EZMonitor zeigt live die aktuelle Leistung einzelner Solarpanels und die Tagesausbeute. Unterstützt Wechselrichter mit Web-Interface und ermöglicht eine einfache Visualisierung auf dem Desktop – für alle, die den Eigenverbrauch optimieren möchten. Mehr ... G213Tray – Beleuchtung für Logitech G213 G213Tray steuert die Hintergrundbeleuchtung der Logitech G213 Prodigy direkt aus dem KDE-System-Tray – frei wählbare RGB-Farben, ganz ohne Logitech-Software. Mehr ... KPictureFrame – Digitaler Bilderrahmen für Plasma 6 Ein eleganter digitaler Bilderrahmen als KDE-Plasmoid: Einzelbild oder Diashow aus einem Ordner, dazu ein Ambient-Glow-Effekt als weicher Lichtschein um das Bild. Drag & Drop, mehrsprachig (DE/EN/ES/FR). Perfekt für Fotowände oder Info-Displays. Mehr ... GitHub Actions Kleine Werkzeuge für die CI/CD-Pipeline, statt für den Desktop. GitHub Action FTP Hash Deploy – Hash-Diff-Deploy per FTPS Eine GitHub Action, die nur geänderte Dateien per FTP/FTPS überträgt – serverseitiger Hash-Vergleich statt State-Dateien oder Rätselraten. Kein CDN, kein Lock-in. Mehr ... GitHub Action Agundur GEO Scan – KI-Sichtbarkeits-Check als CI-Schritt Eine GitHub Action, die eine URL per API auf KI-Sichtbarkeit prüft – llms.txt, Strukturdaten, Antwort-Direktheit und mehr. Score 0-100 direkt als Build-Output. Mehr ... Für OpenSuse sind alle unsere Plasmoids mit zypper installierbar: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo # Automatically import GPG key (required once) sudo zypper --gpg-auto-import-keys ref # Refresh repository metadata sudo zypper ref # Verfügbare Plasmoids suchen sudo zypper search plasmoid --- ## KPictureFrame KPictureFrame Leichtgewichtiges KDE-Plasma-6-Widget, das ein frei wählbares Bild direkt auf Desktop oder Panel anzeigt — Foto, Logo, QR-Code, was auch immer draufgezogen wird. Was es kann Zeigt beliebige lokale Bilder (PNG, JPG, WebP, SVG, animiertes GIF) Slideshow-Modus — auf einen Ordner zeigen, Widget wechselt automatisch durch Drag & Drop — Bild oder Ordner direkt aufs Widget ziehen Live-Reload — Änderung in den Einstellungen wirkt sofort, kein Neustart nötig Reines QML, kein kompiliertes Plugin, keine externen Dienste Voraussetzungen Qt ≥ 6.7 und KDE Frameworks ≥ 6.10 — sonst nichts zur Laufzeit nötig UI übersetzt in Deutsch, Spanisch, Französisch (sonst Englisch) Lizenz: GPL-3.0-or-later Installation Am einfachsten: .plasmoid Über „Neue Miniprogramme holen" in den Systemeinstellungen, oder das .plasmoid aus dem aktuellsten Release herunterladen und: kpackagetool6 --type Plasma/Applet --install kpictureframe-*.plasmoid Funktioniert distro-unabhängig auf jedem Plasma-6-System, kein Paketmanager nötig. Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in kpictureframe Installation für Debian/Ubuntu Direct-Download über die aktuellste Release-Seite: sudo apt install ./kpictureframe_*.deb Aus dem Quellcode git clone https://github.com/Agundur-KDE/KPictureFrame.git kpackagetool6 --type Plasma/Applet --install KPictureFrame/package/ Quellcode & Downloads Open Source (GPL-3.0-or-later) — Quellcode, Issues und Releases auf GitHub, außerdem im KDE Store und als OBS-Paket für openSUSE/Debian/Ubuntu verfügbar. GitHub-Repository KDE Store OBS-Paket --- ## KCast KCast KCast ist ein KDE-Plasmoid das es Ihnen erlaubt Medien-Dateien wie .mp4 oder .mp3, YouTube-Links sowie direkte .m3u8-Streams (HLS) direkt vom Desktop Ihres Rechners auf ein beliebiges Chromecast-Gerät in Ihrem lokalen Netzwerk zu streamen. Funktionen Automatische Suche nach Chromecast-Geräten im Netzwerk Steuerung von Wiedergabe: Play, Pause, Stop, Seek (±10s-Buttons plus Positions-Regler) Playlist mit Suche (Regex), Zufallswiedergabe und Wiederholen (aus/alle/eins) — Ordner oder .m3u/.m3u8-Dateien als Playlist laden Abspielen von lokalen Dateien oder Netzwerk-URLs, Drag & Drop aus Dolphin/Browser Geräteauswahl und Konfiguration über das Plasmoid Reines QML — kein C++-Plugin, keine Kompilierung zur Installation nötig Kompatibel mit KDE Plasma 6 (Qt 6) Umfrage KCast castet aktuell Video-Dateien und YouTube-Links — eine Funktion zum Übertragen des gesamten Desktops gibt es noch nicht. Wir haben zwei mögliche Wege getestet und lassen die Community entscheiden, welcher zuerst umgesetzt wird: einfach & sofort startklar (~6s Verzögerung) oder beste Qualität (unter 1s Verzögerung, mehr Einrichtung). Abstimmen könnt ihr direkt in der GitHub Discussion. Wie sich der latenzarme Weg (Sunshine/Moonlight) in der Praxis anfühlt und einrichten lässt, steht im ausführlichen Artikel dazu →. Video laden — lädt Inhalte von YouTube, siehe Datenschutzerklärung Technische Voraussetzungen KCast basiert auf : - catt - Python 3 - Avahi Daemon – für die lokale Geräte Erkennung (mDNS) (systemctl status avahi-daemon) Installation KCast wird offiziell nur für openSUSE (RPM) und Debian (.deb) gepflegt. COPR (Fedora) und AUR (Arch) bieten wir aktuell nicht an — beides parallel war neben den zwei unterstützten Wegen nicht mehr wartbar. Wer das übernehmen möchte, darf sich gerne im Repository melden. Schnellinstallation ohne Paketmanager KCast ist reines QML — kein Compiler nötig. Die .plasmoid-Datei von der aktuellsten Release-Seite herunterladen und installieren: kpackagetool6 --type Plasma/Applet --install kcast-*.plasmoid Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in kcast catt wird dabei automatisch als RPM-Abhängigkeit aus demselben Repository mitinstalliert — kein extra Schritt nötig. Firewall-Freigabe für openSUSE Über firewalld: sudo firewall-cmd --permanent --add-service=mdns sudo firewall-cmd --permanent --add-port=8009/tcp sudo firewall-cmd --permanent --add-port=45000-47000/tcp sudo firewall-cmd --reload Installation für Debian 13 „Trixie“ Direct-Download über die aktuellste Release-Seite sudo apt update sudo apt install -y pipx pipx ensurepath # add ~/.local/bin to PATH (log out/in if prompted) pipx install catt catt --version sudo apt install ./kcast_*.deb In unserem GitHub-Repository finden Sie mehr Informationen. Getestet mit folgender Hardware 🛒JMGO N1S Pro 4K Triple Laser Projector bei Amazon. 🛒Samsung HW-Q935GD 9.1.4-Kanal Q-Soundbar bei Amazon Quellcode & Mitwirken Der vollständige Quelltext ist unter der GPLv3 veröffentlicht. Fehlerberichte, Feature-Wünsche oder Pull Requests sind jederzeit willkommen. Zum GitHub-Repository --- ## Sunshine/Moonlight unter Linux Sunshine/Moonlight unter Linux: KDE-Desktop mit niedriger Latenz auf den Fernseher streamen Read this article in English Sunshine und Moonlight sind aktuell die zuverlässigste Lösung, um einen KDE-Desktop unter Linux latenzarm auf einen Fernseher zu streamen: Beide sind Open Source, bauen auf demselben Prinzip wie Nvidias GameStream auf, und bleiben beim Streaming spürbar unter einer Sekunde Verzögerung. Ich hab davor ein paar Stunden gebraucht, um meinen KDE-Desktop überhaupt vernünftig auf den Fernseher im Wohnzimmer zu bekommen. Die naheliegende erste Idee — Streaming über den Chromecast Default Media Receiver, so als wär es eine Videodatei — kam nie unter ein paar Sekunden Verzögerung, egal wie sehr ich an Bitrate und Auflösung geschraubt habe. Irgendwann war klar: Am Tuning lag es nicht. Googles Cast Default Media Receiver ist für gepuffertes Video gebaut, nicht fürs Mirroring, und da gibt es eine harte Grenze, an der kein Tuning mehr hilft. Sunshine und Moonlight lösen das grundlegend anders: Statt Frames über ein Medienplayer-Protokoll zu schieben, hostet Sunshine eine echte Streaming-Session, die Moonlight auf der Empfängerseite in Echtzeit dekodiert. Ich will das nicht als wissenschaftliche Benchmark verkaufen, aber beim Streamen auf einen Android-TV-Projektor im Wohnzimmer fühlte sich der Desktop responsiv genug an, um ihn wirklich zu benutzen und nicht nur zuzuschauen. Gefühlt deutlich unter einer Sekunde. Alles Folgende hab ich auf openSUSE Tumbleweed, KDE Plasma 6, Wayland, mit einer AMD RX 6650 XT getestet, gestreamt auf einen JMGO N1S Pro (Android-TV-Projektor). Bei einer anderen Distro oder GPU bleibt das Konzept gleich, aber manche Befehle passen dann nicht 1:1. Casten ist nicht gleich Casten Wenn Leute vom Bildschirm-Casten reden, meinen sie damit oft zwei verschiedene Technologien. Miracast spiegelt einen Bildschirm über Wi-Fi Direct. Wo es sauber unterstützt wird, braucht es keine zusätzliche Software auf dem PC — aber die Linux-Treiberunterstützung ist durchwachsen, und in der Praxis sind Bildrate und Latenz je nach Treiber und Empfänger oft weniger gut für Spiele oder interaktive Arbeit geeignet. Sunshine und Moonlight funktionieren anders. Sunshine läuft auf dem PC und hostet eine Streaming-Session — kodiert Video, Audio und Eingaben und schickt sie über ein eigenes Protokoll, statt über den normalen Mirroring-Pfad des Desktops. Moonlight dekodiert das auf der Empfängerseite. Darum geht es in diesem Artikel: Diese Technik ist dafür gedacht, einen entfernten Desktop tatsächlich zu benutzen, statt nur zuzuschauen. Miracast oder Sunshine/Moonlight? Miracast Sunshine/Moonlight LatenzMirroring-Niveau, hardwareabhängigGefühlt unter einer Sekunde in meinem Test Für Gaming geeignetEher nichtJa EmpfängerMiracast/WFD-fähiges GerätAndroid/Google TV mit App-Support Aufwand beim EinrichtenGering, wo es funktioniertInstallation und Pairing nötig Am besten fürSchnelles Mirroring, PräsentationenGaming, Video, echtes Arbeiten am Remote-Desktop Willst du nur kurz etwas auf den Fernseher werfen, und sowohl PC als auch Fernseher unterstützen Miracast sauber über Wi-Fi Direct, nimm Miracast. Willst du einen Desktop, den du vom Sofa aus bedienen kannst, lies weiter. Wie das zusammenspielt KDE-Desktop (Sunshine-Host) │ normales LAN, kein Wi-Fi Direct nötig ▼ Moonlight-Client (TV / Android-TV-Box) Für diese Anleitung sollten beide Geräte im selben lokalen Netzwerk sein — dann findet Moonlight den Host automatisch, und du musst nichts an Routing oder VPN einrichten. Auf KDE/Wayland erfasst Sunshine den Desktop über xdg-desktop-portal und PipeWire — das ist der Weg, der bei mir funktioniert hat, weil KWin wlr-export-dmabuf nicht unterstützt, das Protokoll, das manche andere Compositoren für einen direkteren Weg nutzen. Ob direktes KMS-Capture bei einem nativen Paket-Build auch ohne den Portal-Umweg funktioniert, hab ich nicht getestet — behandle capture = portal also als die Einstellung, von der ich weiß, dass sie funktioniert, nicht zwangsläufig als die einzig mögliche. Bevor du anfängst KDE Plasma 6 unter Wayland. Auf X11 oder älterem Plasma hab ich es nicht probiert. Eine Distro mit Sunshine-Paket, oder Flathub, falls deine keins hat. Ein Android/Google-TV-Gerät mit Moonlight aus dem jeweiligen App Store. Ein „Chromecast built-in"-Fernseher ohne App-Unterstützung reicht nicht. Beide Geräte im selben LAN. Gäste-Netzwerke und WLANs mit aktivierter Client-Isolation blockieren die Erkennung. Hardware-Video-Encoding hilft enorm. Software-Encoding funktioniert, aber man merkt den Unterschied. Sunshine lauscht standardmäßig im lokalen Netzwerk. Leite die Ports nicht ins Internet weiter, außer du willst das bewusst und weißt, was das offenlegt. Einrichtung 1. Sunshine installieren Auf openSUSE Tumbleweed: sudo zypper addrepo https://download.opensuse.org/repositories/games:/tools/openSUSE_Tumbleweed/games:tools.repo sudo zypper install sunshine sunshine-firewalld Beim nativen Paket musst du dich nicht mit den Besonderheiten einer Flatpak-Sandbox oder eines AppImages herumschlagen. Andere Distros: erst im eigenen Repo nachsehen, Sunshine gibt es auch auf Flathub als dev.lizardbyte.app.Sunshine, falls nichts Natives da ist. sunshine-firewalld öffnet die nötigen Ports automatisch. 2. Erster Start Sunshine über das App-Menü starten oder sunshine im Terminal ausführen, dann https://localhost:47990 im Browser öffnen. Der Browser meckert wegen des Zertifikats — das ist erwartet, Sunshine nutzt ein selbstsigniertes Zertifikat, einfach akzeptieren. Beim ersten Mal legst du einen Benutzernamen und ein Passwort fürs Web-UI an. Notier sie dir. 3. Capture-Backend einstellen Im Web-UI im Tab "Configuration" die Capture-Methode auf portal setzen. Steht auch in ~/.config/sunshine/sunshine.conf als capture = portal, falls du lieber die Datei direkt bearbeitest. Speichern, Sunshine bei Bedarf neu starten. 4. Moonlight installieren Auf dem TV/der Box: aus dem App Store installieren. Für einen Desktop-Client gibt es Builds auf moonlight-stream.org. 5. Koppeln — die PIN kommt von der ungewohnten Seite Moonlight auf dem Client öffnen und den PC hinzufügen. Er sollte automatisch im LAN gefunden werden, sonst per IP hinzufügen. Moonlight fragt dann nach einer PIN — diese PIN erscheint auf dem Client, eingegeben wird sie im Sunshine-Web-UI, auf der PIN-Seite in der Navigationsleiste, zusammen mit einem Namen für das Gerät. Das ist genau andersrum, als man erstmal denkt. 6. Erster Stream Wenn du den Stream zum ersten Mal startest, zeigt KDEs Portal einen Berechtigungsdialog, welcher Bildschirm geteilt werden soll — das ist die Zustimmung zur Bildschirmfreigabe, getrennt von Eingabeberechtigungen, die kommen erst später. Bestätigen. Bei mehreren Monitoren wählst du hier auch, welcher erfasst wird. 7. Prüfen, ob es wirklich läuft — nicht nur startet Bild und Ton sollten nach ein paar Sekunden da sein. In Sunshines Logs nachsehen, welcher Encoder aktiv ist — da sollte der Name deines GPU-Hardware-Encoders stehen, nicht ein Software-Fallback, denn das ist der Unterschied zwischen "responsiv" und "warum ruckelt das". Tastatur, Maus und Controller vom Client aus sollten den Host-Desktop steuern. Reagiert ein Controller nicht: Die Bildschirmfreigabe deckt den Zugriff auf /dev/uinput nicht mit ab, das läuft über eine separate Geräteberechtigung — bei mir hat's beim ersten Mal auch nicht auf Anhieb geklappt. Eine Lücke, die ich noch nicht geschlossen hab: Das läuft aktuell als manuell gestarteter Prozess, kein systemd-Benutzerdienst, übersteht also keinen Reboot von selbst. Eine systemd-User-Unit würde das lösen. Hab ich bisher nur noch nicht eingerichtet. Wie es sich tatsächlich angefühlt hat Beim Streamen auf den JMGO N1S Pro über ein normales Heimnetzwerk fühlte sich der Desktop responsiv genug an, um ihn zu bedienen, nicht nur zuzuschauen, und Ton und Bild blieben synchron. Das ist ein echter Eindruck aus echter Nutzung, keine Zahl aus einer reproduzierbaren Benchmark — ich hab weder Auflösung noch Bitrate noch eine gemessene Round-Trip-Zeit protokolliert. Wenn du für was Latenzkritisches harte Zahlen brauchst, miss dein eigenes Setup. Wo Hermes einen Blick wert sein könnte Wenn du mit normalem Sunshine bei deinem speziellen Linux/Wayland/AMD-Setup nicht weiterkommst — sei es der Portal-Capture-Schritt oder ein VAAPI-Treiberpfad-Mismatch — gibt es Hermes: einen Fork von Apollo, das selbst wiederum ein Fork von Sunshine ist. Es setzt unter anderem auf ein eigenes Kernelmodul für direktes Capture statt über das Desktop-Portal und kann bei bestimmten AMD-/Wayland-Konfigurationen eine Alternative sein. Das Projekt wird aktiv gepflegt, auch wenn die geerbte Fork-Historie auf GitHub auf den ersten Blick einen anderen Eindruck erwecken kann. Die eigene Doku ist allerdings für Arch und CachyOS geschrieben, auf openSUSE heißt das also: Build aus dem Quellcode statt Paketinstallation — ein echter Schritt mehr Aufwand als die normale Sunshine-Installation oben. Und hier kommt der Teil, wegen dem ich es wieder ins "nur für Fortgeschrittene"-Regal gestellt hab: Das Kernelmodul muss signiert werden, und das Zertifikat dazu muss über Secure Boots MOK-Manager (Machine Owner Key) registriert werden — ein einmaliger Schritt, der physischen Tastatur-/Monitor-Zugriff beim Booten braucht. Bei mir hat's nicht ohne diesen Schritt geklappt: Ich hab das Modul selbst gebaut, aber laden ließ es sich erst, nachdem ich den Schlüssel über den physischen MOK-Manager-Bildschirm eingetragen hatte. Auf vielen vorinstallierten oder entsprechend eingerichteten Systemen ist Secure Boot aktiv — das ist also kein seltener Sonderfall, auch wenn sich Secure Boot grundsätzlich abschalten lässt. Erst normales Sunshine probieren. Hermes nur ansehen, wenn du auf ein Problem stößt, das es nachweislich löst. Fehlerbehebung Kein Berechtigungsdialog beim Streaming-Start: prüfen, ob xdg-desktop-portal und das KDE-Portal-Backend tatsächlich laufen, und ob capture = portal in der Konfiguration wirklich gesetzt ist. Schwarzes Bild, Ton geht: häufig liegt es am Capture-Backend — nachsehen, ob die Einstellung im Tab "Configuration" wirklich übernommen wurde und Sunshine danach neu gestartet wurde. Kann aber auch an Codec-, Treiber- oder Decoder-Problemen liegen. Kein Ton beim Client: Sunshines Audiogeräte-Auswahl im Web-UI prüfen; das Standard-Audiogerät des Systems kann sich nach einem Reboot ändern. Controller reagiert nicht: separate Geräteberechtigung nötig, uinput-Zugriff prüfen. Ruckelnde Wiedergabe: erst Auflösung/Bitrate senken, um Netzwerk- von Encoding-Problemen zu unterscheiden. Hohe Latenz trotz gutem Netzwerk: aktiven Encoder in den Logs prüfen — sicherstellen, dass er nicht stillschweigend auf Software umgeschaltet hat. Host wird nicht gefunden: prüfen, ob beide Geräte im selben LAN sind, nicht in einem Gäste-Netzwerk oder isolierten WLAN, notfalls per IP direkt hinzufügen. Also, was soll ich nehmen? Musst du kurz was spiegeln und deine Hardware kann Miracast sauber? Nimm Miracast. Willst du einen Desktop auf dem Fernseher, den du wirklich bedienen kannst, für Gaming oder alles Interaktive? Sunshine und Moonlight, nach der Anleitung oben. Kommst du bei normalem Sunshine an eine Grenze und bist mit Secure-Boot-Key-Enrollment vertraut? Schau dir Hermes an — aber nicht als ersten Schritt. Bist du hier gelandet, weil dich Chromecast im Stich gelassen hat: Das hier ist kein Workaround dafür. Es ist ein anderer, responsiverer Weg, das Ganze zu machen — dafür musst du allerdings einmal etwas Zeit in die Einrichtung stecken. ← Zurück zu KCast --- ## Sunshine/Moonlight on Linux Sunshine/Moonlight on Linux: Stream Your KDE Desktop to a TV with Low Latency Diesen Artikel auf Deutsch lesen Sunshine and Moonlight are currently the most reliable way to stream a KDE desktop on Linux to a TV with low latency: both are open source, built on the same idea as Nvidia's GameStream, and keep the delay well under a second. Before finding them, I spent a few hours trying to get my KDE desktop onto the living room TV at all. The obvious first idea, streaming through the Chromecast Default Media Receiver like a video file, never got below a few seconds of delay no matter how much I tuned bitrate and resolution. Turns out that's not a tuning problem. Google's Cast Default Media Receiver is built for buffered video, not for mirroring, and there's a hard floor you can't tune your way past. Sunshine and Moonlight solve this differently at the root: instead of pushing frames through a media-player protocol, Sunshine hosts a real streaming session that Moonlight decodes in real time on the receiving end. I'm not going to pretend this is a scientific benchmark, but streaming to an Android TV projector in my living room, the desktop felt responsive enough to actually use, not just watch. Well under a second, by feel. Everything below is tested on openSUSE Tumbleweed, KDE Plasma 6, Wayland, an AMD RX 6650 XT, streaming to a JMGO N1S Pro. If you're on a different distro or GPU, the concepts hold but some commands won't. Casting isn't one thing People say "cast my screen" and mean two different technologies. Miracast mirrors a display over Wi-Fi Direct. Where it's supported cleanly it needs no extra software on your PC, but Linux driver support is spotty, and it was never built for high frame rates or tight audio sync. Sunshine and Moonlight work differently. Sunshine runs on your PC and hosts a streaming session — encoding video, audio, and input and sending it over a dedicated protocol instead of through your desktop's mirroring path. Moonlight decodes it on the receiving end. That's the technology this guide is about, because it's the one built for actually using a remote desktop, not just watching it. Miracast or Sunshine/Moonlight? Miracast Sunshine/Moonlight LatencyMirroring-grade, hardware-dependentSub-second by feel in my test Good for gamingNot reallyYes ClientMiracast/WFD receiverAndroid/Google TV with app support Setup effortLow, where it worksA real install and pairing process Best forQuick mirroring, presentationsGaming, video, actually driving a remote desktop If you just need to throw something on screen for five minutes and Miracast works on your hardware, use it. If you want a desktop you can operate from the couch, keep reading. How it fits together KDE desktop (Sunshine host) │ regular LAN, no WiFi Direct needed ▼ Moonlight client (TV / Android TV box) Both devices need to be on the same network. On KDE/Wayland, Sunshine captures the desktop through xdg-desktop-portal and PipeWire — that's the path I got working, because KWin doesn't support wlr-export-dmabuf, the protocol some other compositors use for a more direct route. I didn't test whether direct KMS capture works on a native package build without going through the portal, so treat capture = portal as the setting I know works, not necessarily the only one that could. Before you start KDE Plasma 6 on Wayland. I haven't tried this on X11 or older Plasma. A distro with Sunshine packaged, or Flathub if yours doesn't have it. An Android/Google TV device with Moonlight installed from its app store. A "Chromecast built-in" TV without app support won't cut it. Both devices on the same LAN. Guest networks and AP-isolated Wi-Fi will block discovery. Hardware video encoding helps a lot. Software encoding works but you'll feel the difference. Sunshine listens on your local network by default. Don't forward its ports to the internet unless you actually mean to and know what that exposes. Setting it up 1. Install Sunshine On openSUSE Tumbleweed: sudo zypper addrepo https://download.opensuse.org/repositories/games:/tools/openSUSE_Tumbleweed/games:tools.repo sudo zypper install sunshine sunshine-firewalld No AppImage or Flatpak sandboxing needed for the native package. Other distros: check your own repos first, and Sunshine is on Flathub as dev.lizardbyte.app.Sunshine if there's nothing native. sunshine-firewalld opens the ports you'll need automatically. 2. First run Start Sunshine from your app menu or run sunshine in a terminal, then open https://localhost:47990. Your browser will complain about the certificate — it's self-signed, that's expected, accept it. First time in, you'll create a username and password for the web UI. Write them down. 3. Set the capture backend In the web UI's Configuration tab, set capture to portal. It lives in ~/.config/sunshine/sunshine.conf too, as capture = portal, if you'd rather edit the file. Save and restart Sunshine if it asks. 4. Install Moonlight On the TV/box: install from the app store. For a desktop client, moonlight-stream.org has builds. 5. Pair them — the direction trips people up Open Moonlight on the client and add your PC. It should find it automatically on the LAN; if not, add it by IP. Moonlight will then ask you for a PIN — that PIN shows up on the client, and you type it into Sunshine's web UI, under the PIN page in the nav bar. It's backwards from what you'd guess. 6. First stream KDE's portal will pop up a permission dialog asking which screen to share. That's the screen-capture consent step, separate from input permissions, which come later. Approve it. If you've got multiple monitors, this is where you pick one. 7. Check it's actually working, not just running Video and audio should show up within a couple seconds. Check Sunshine's logs for which encoder is active — you want your GPU's hardware encoder name there, not a software fallback, because that's the difference between "responsive" and "why is this laggy." Keyboard, mouse, and controller from the client should control the host. If a controller doesn't respond, that's a separate permission path (usually uinput device access) — don't assume the screen-capture prompt covered it, because it didn't for me either the first time. One gap I haven't closed yet: this runs as a manually started process, not a systemd service, so it doesn't survive a reboot. A user systemd unit would fix that. I just haven't set it up. What it actually felt like Streaming to the JMGO N1S Pro over a normal home network, the desktop felt responsive enough to operate, not just watch, and audio stayed in sync. That's a real impression from real use, not a number from a repeatable benchmark — I didn't log resolution, bitrate, or a measured round-trip time. If you need hard numbers for something latency-critical, measure your own setup. Where Hermes might be worth a look If vanilla Sunshine hits a specific wall on your Linux/Wayland/AMD setup, whether that's the portal capture step or a VAAPI driver-path mismatch, there's Hermes: a fork of Apollo, which is itself a fork of Sunshine. It solves both problems at a lower level, with its own kernel module for direct capture instead of going through the desktop portal. It's actively maintained, not the dead side project it might look like from a glance at GitHub's inherited fork history. Its docs are written for Arch and CachyOS, though, so on openSUSE you're building from source, not installing a package — a real step up in effort from the vanilla Sunshine install above. Here's the part that made me put it back on the "advanced only" shelf: that kernel module has to be manually trusted through Secure Boot's Machine Owner Key enrollment, a one-time step that needs physical keyboard and monitor access at boot. I built and loaded it myself, and it flatly refused to load until I enrolled the key through the physical MOK Manager screen — no way around it, even with proper distro packaging. Most desktop distros ship Secure Boot on by default, so this isn't some rare edge case you'll dodge. Try vanilla Sunshine first. Only look at Hermes if you hit a wall it's specifically known to fix. Troubleshooting No permission dialog when you start streaming: check xdg-desktop-portal and the KDE portal backend are actually running, and that capture = portal took effect in the config. Black screen, audio's fine: almost always a capture backend mismatch — confirm the Configuration tab setting stuck and Sunshine restarted after you changed it. No audio on the client: check Sunshine's audio device selection; your system's default sink can shift after a reboot. Controller doesn't respond: separate permission path from screen capture, check uinput device access. Choppy playback: drop resolution/bitrate first to figure out if it's network or encoding. High latency on a decent network: check the active encoder in the logs — make sure it's not silently falling back to software. Host not showing up: confirm both devices share a LAN, not a guest network or isolated Wi-Fi, and try adding it by IP directly. So which one Need to mirror something quickly and your hardware does Miracast cleanly? Use Miracast. Want a desktop on your TV you can actually drive, for gaming or anything interactive? Sunshine and Moonlight, following the walkthrough above. Hit a specific wall with vanilla Sunshine and you're comfortable enrolling Secure Boot keys? Look at Hermes, not as your first move. If you landed here after Chromecast let you down, this isn't a workaround for that. It's a different, more responsive way to do the whole thing, and it costs you one real setup session to get there. ← Back to KCast --- ## KFritz KFritz KFritz ist ein KDE-Plasmoid das eingehende Anrufe auf der Fritz!Box erkennt und den Namen des Anrufers am Computer einblendet. Funktionen Anzeige eingehender Anrufe in Echtzeit, inkl. Sound-Benachrichtigung Auflösung der Telefonnummern anhand mehrerer FRITZ!Box-Telefonbücher Blockliste: Nummern aus zugewiesenen Telefonbüchern werden komplett lautlos abgewiesen — auch mit Wildcard-Einträgen (z. B. aus großen Spam-Listen) Ein Klick auf einen unbekannten Anrufer legt ihn direkt als Kontakt oder in der Blockliste an Verpasste Anrufe werden beim Start nachgeladen, inkl. Zähler-Badge für ungesehene Anrufe Telefonbücher lassen sich automatisch täglich oder wöchentlich synchron halten Statusanzeige für die Verbindung zur FRITZ!Box Technische Voraussetzungen Die FRITZ!Box stellt über Port 1012 einen CallMonitor zur Verfügung, der einmalig über die Kurzwahl #96*5* aktiviert werden muss. Die Verbindung erfolgt über TCP, wobei ein minimaler Daemon im Hintergrund die Kommunikation abwickelt. Zur Namensauflösung nutzt KFritz das interne Telefonbuch der FRITZ!Box, das einmalig heruntergeladen werden muss. Dafür muss auf der Fritz!Box ein Benutzer angelegt werden der die Rechte "FRITZ!App Fon und Anrufliste" besitzt. TR-064 muss aktiviert sein. Entwickelt mit QML, Qt6, C++ und vollständig integriert in das KDE-Plasma-Ökosystem. Installation KFritz wird offiziell nur für openSUSE (RPM) und Debian (.deb) gepflegt. COPR (Fedora) bieten wir nicht mehr an — nicht mehr wartbar neben den zwei unterstützten Wegen. Wer das übernehmen möchte, darf sich gerne im Repository melden. Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in kfritz Installation für Debian 13 "Trixie" Das .deb von der aktuellsten Release-Seite herunterladen sudo apt install ./kfritz_*.deb In unserem GitHub-Repository finden Sie mehr Informationen. Getestet mit folgender Hardware 🛒FRITZ!Box 6690 Cable bei Amazon 🛒FRITZ!Box 6660 Cable bei Amazon Unter FritzOS 7.57 und 8.03 Quellcode & Mitwirken Der vollständige Quelltext ist unter der GPLv3 veröffentlicht. Fehlerberichte, Feature-Wünsche oder Pull Requests sind jederzeit willkommen. Zum GitHub-Repository --- ## KToot KToot KToot bringt Mastodon-Benachrichtigungen in die Plasma-Taskleiste: Icon mit Ungelesen-Badge und ein Popup mit den letzten Erwähnungen, Follows, Favoriten und Boosts. Funktionen Panel-Icon mit Ungelesen-Badge – ein Klick markiert alles als gelesen Popup zeigt Account-Handle, Follower-Zahl und die letzten 3 Benachrichtigungen Desktop-Benachrichtigungen über KNotify: einzeln bei wenigen, gesammelt als Übersicht bei vielen Erwähnungen, Follows, Favoriten und Boosts einzeln ein-/ausschaltbar Vollständig in QML/JS – kein kompiliertes Plugin, KWallet-Zugriff läuft über D-Bus statt eines C++-Helfers Mehrsprachig: Deutsch, Englisch, Spanisch, Französisch Zugangs-Token statt Passwort KToot braucht keinen Account-Login, sondern ein persönliches Zugriffs-Token deiner eigenen Instanz (Einstellungen → Entwicklung → Neue Anwendung, Scopes read und write). Das Token wird ausschließlich in KWallet gespeichert, verknüpft mit der Instanz-URL – nie im Konfigurationsfile des Plasmoids. Läuft ab KDE Plasma 6.2 (nutzt das QML-Modul org.kde.plasma.workspace.dbus für den KWallet-Zugriff) mit laufendem kwalletd6. Installation KToot ist reines QML/JS – ein reiner Plasmoid-Install ohne Build-Schritt reicht für den Alltag. Für Icon-Registrierung im System (hicolor-Theme) und KNotify-Integration steht zusätzlich RPM/.deb bereit. Schnellinstallation (kein Build nötig) git clone https://github.com/Agundur-KDE/KToot.git cd KToot kpackagetool6 --type Plasma/Applet --install package/ Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in ktoot Installation für Debian 13 "Trixie" Das .deb von der aktuellsten Release-Seite herunterladen sudo apt install ./ktoot_*.deb In unserem GitHub-Repository finden Sie mehr Informationen. Quellcode & Mitwirken Der vollständige Quelltext ist unter der GPLv2/GPLv3 veröffentlicht. Fehlerberichte, Feature-Wünsche oder Pull Requests sind jederzeit willkommen. Zum GitHub-Repository --- ## KClaude KClaude KClaude ist ein KDE-Plasma-6-Panel-Widget für Claude Code: Sessions mit Name, Verzeichnis und Session-ID merken, per Klick in einem echten Terminal fortsetzen, auf einen Blick sehen welche Session gerade auf Sie wartet. Funktionen Sessions speichern und per Klick in konsole fortsetzen — automatisch im richtigen Verzeichnis Live-Status-Ampel pro Session: läuft oder wartet auf Eingabe Panel-Benachrichtigung (+ optionaler Warnton), wenn Claude auf eine Entscheidung wartet Bildschirmausschnitt per Klick direkt in die Zwischenablage — praktisch zum Einfügen in eine Claude-Code-Session Rate-Limit-Kontingent (5h/7-Tage-Fenster + Reset-Zeit) für Claude.ai Pro/Max, direkt im Panel Zeigt, wie lange Claude Code eine Session noch lokal aufbewahrt (cleanupPeriodDays), und blendet gespeicherte Sessions abgeblasst ein, deren Verlauf bereits automatisch gelöscht wurde — bevor ein --resume ins Leere läuft 🍪 Cookie-Button: schickt ein Dankeschön als echten Tastatur-Input in die aktive Session (per tmux send-keys, optional) KRunner-Plugin (optional, separat installierbar): kc in KRunner (Alt+Leertaste) tippen, um eine gespeicherte Session ohne Panel-Umweg zu fokussieren oder fortzusetzen Kompatibel mit KDE Plasma 6 (Qt 6) Technische Voraussetzungen KClaude basiert auf: - Qt ≥ 6.7 - KDE Frameworks ≥ 6.10 - Claude Code CLI - konsole, gdbus, paplay, jq — für Session-Start und Notification-Hooks Installation KClaude ist reines QML, kein Kompilieren nötig. Am einfachsten über "Neue Widgets holen" in den Systemeinstellungen, oder das .plasmoid aus dem letzten Release laden und: kpackagetool6 --type Plasma/Applet --install kclaude-*.plasmoid Wer lieber zypper/apt die Updates verwalten lässt, gibt es auch als richtiges Paket. openSUSE Tumbleweed über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper in kclaude Für Debian/Ubuntu das .deb aus dem letzten Release laden. In unserem GitHub-Repository finden Sie die vollständige Anleitung, inklusive der Claude-Code-Hook-Konfiguration für Benachrichtigungen und das Rate-Limit-Kontingent. Das optionale KRunner-Plugin (kc ) gibt es ebenfalls fertig verpackt im KDE Store (Archiv entpacken, install.sh ausführen, kein sudo nötig) — oder manuell aus dem GitHub-Repository (krunner/-Ordner). Quellcode & Mitwirken Der vollständige Quelltext ist unter GPLv2/GPLv3 veröffentlicht. Fehlerberichte, Feature-Wünsche oder Pull Requests sind jederzeit willkommen. Zum GitHub-Repository --- ## KHoneycomb KHoneycomb KHoneycomb ist ein KDE-Plasma-6-Widget, das Ihre Programmstarter als leuchtende Wabenkacheln darstellt — statt eines schlichten Icon-Rasters oder einer Taskleisten-Zeile. Für einen Desktop, der einen Screenshot wert ist. Funktionen Echter Blickfang statt reinem Icon-Raster — ein 3D-Bevel-Regler bewegt jede Wabenkachel stufenlos von tief versenkt über flach bis erhaben, kein reiner An/Aus-Effekt Eigenes Hintergrundbild hinter dem Grid, mit Abdunkeln-Regler, damit Icons auch vor unruhigem Wallpaper lesbar bleiben Automatisch anpassendes Waben-Layout — flach- oder spitz-oben Hexagons, Spaltenzahl passt sich beim Skalieren des Widgets an Kachel per Drag neu anordnen, Rechtsklick öffnet einen schnellen Icon-/Befehl-Editor ohne den vollen Konfigurationsdialog Pro Kachel einstellbar: Icon-Bild, Startbefehl, Zoom (um Icons mit viel transparentem Rand passend zuzuschneiden), eigene Kachelfarbe Grid-Abstand und Hover-Tooltips runden die Optik ab Hintergrundbild via Pixabay Hintergrundbild „KDE Plasma Abstract 345" von charlie-henson (KDE Store) Installation Schnellinstallation ohne Paketmanager git clone https://github.com/Agundur-KDE/KHoneycomb.git kpackagetool6 --type Plasma/Applet --install KHoneycomb/package/ Danach auf dem Desktop per Rechtsklick → „Bearbeitungsmodus starten“ → „Miniprogramme hinzufügen oder verwalten…“ (im Panel direkt als Menüpunkt, ohne Bearbeitungsmodus), „KHoneycomb“ suchen und platzieren. Rechtsklick auf eine Wabenkachel → Konfigurieren, um Slots (Icon-Bild + Startbefehl) hinzuzufügen. Der volle Konfigurationsdialog regelt Hintergrundbild, Bevel-Stärke und Grid-Abstand. Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in khoneycomb Installation für Debian / Ubuntu Direct-Download über die aktuellste Release-Seite sudo apt install ./khoneycomb_*.deb Systemweit über CMake cmake -B build && cmake --build build && sudo cmake --install build In unserem GitHub-Repository finden Sie mehr Informationen. Zeig uns dein Rice KHoneycomb bei Ihnen eingerichtet? Screenshot her damit — Hintergrundbild, Bevel-Einstellung, Waben-Layout, was auch immer dabei rausgekommen ist: Show and tell auf GitHub. Mach dein KDE-Setup komplett – mit einer ständig wachsenden Wallpaper-Sammlung. Quellcode & Mitwirken Kurzvideo Warum KHoneycomb entstanden ist Video laden — lädt Inhalte von YouTube, siehe Datenschutzerklärung Der vollständige Quelltext ist unter der LGPLv3 veröffentlicht. Fehlerberichte, Feature-Wünsche oder Pull Requests sind jederzeit willkommen.. Zum GitHub-Repository --- ## FTP Hash Deploy FTP Hash Deploy Action GitHub Action, die beim Deployment nur geänderte Dateien hochlädt — durch serverseitige Hashes im Git-Blob-Format. Keine State-Datei, kein Rätselraten: der Server sagt selbst, was er hat. Wie es funktioniert hashme.php wird auf den Server hochgeladen Der Server berechnet Git-Blob-Hashes aller vorhandenen Dateien hashme.php wird sofort wieder gelöscht Dieselben Hashes werden lokal berechnet Nur Dateien mit abweichendem Hash werden hochgeladen — fehlende werden gelöscht Hash-Algorithmus: SHA1("blob \0") — identisch mit Gits eigenem Blob-Hashing. Vorteile gegenüber State-Dateien Kein Drift: Server ist immer die einzige Wahrheit Funktioniert auch nach manuellen Änderungen auf dem Server Dry-run-Modus zeigt Diff ohne Upload FTPS (explicit TLS) per Standard — plain FTP optional Web-Root frei konfigurierbar (server-dir) Lizenz: MIT Verwendung - name: Deploy uses: Agundur-KDE/ftp-hash-deploy-action@v1 with: ftp-host: $} ftp-user: $} ftp-password: $} site-url: https://example.com local-dir: ./dist/ server-dir: /public_html/ # Web-Root — nicht das FTP-Account-Root Typische Web-Root-Pfade Hosterserver-dir All-Inkl, Strato, Ionos/web/ cPanel-Hoster/public_html/ Plesk-Hoster/httpdocs/ Voraussetzungen PHP auf dem Server (für hashme.php) FTP oder FTPS-Zugang Öffentlich erreichbare HTTP-URL während des Deployments Quellcode & GitHub Marketplace Die Action ist Open Source (MIT) und im GitHub Marketplace verfügbar. GitHub-Repository GitHub Marketplace --- ## GEO Scan Action Agundur GEO Scan Action GitHub Action, die eine URL per API auf KI-Sichtbarkeit prüft — llms.txt, strukturierte Daten, Antwort-Direktheit, E-E-A-T-Signale und mehr. Score 0-100 direkt als Build-Output, ohne dass die Scan-Logik selbst offengelegt wird. Wie es funktioniert Die Action ruft die freie GEO-Scanner-API von agundur.de auf (geo-scan-api.php) Der Scan läuft serverseitig — dieselbe Logik wie das Web-Tool Score + vollständiger JSON-Report kommen als Action-Output zurück Optional: Build schlägt fehl, wenn der Score unter einer Schwelle liegt Was wird geprüft HTTPS, robots.txt-Regeln für KI-Crawler, Indexierbarkeit llms.txt, Schema.org-Strukturdaten, Canonical, Open Graph Aktualität, FAQ-Markup, Überschriftenstruktur Antwort-Direktheit — beantwortet der erste Absatz die Kernfrage der Seite? Alt-Texte, E-E-A-T-Signale Lizenz: MIT Verwendung - name: GEO Scan uses: Agundur-KDE/geo-scan-action@v1 with: url: https://example.com fail-under: '70' # optional: Build bricht unter diesem Score ab Ohne CI ausprobieren Keine YAML nötig, um eine URL sofort zu prüfen: der kostenlose GEO Scanner auf agundur.de macht dieselben Checks direkt im Browser. Quellcode & GitHub Marketplace Die Action ist Open Source (MIT) und im GitHub Marketplace verfügbar. Die eigentliche Scoring-Logik läuft serverseitig bei agundur.de und ist nicht Teil dieses Repos. GitHub-Repository GitHub Marketplace --- ## EZMonitor EZMonitor – APsystems EZ1-M EZMonitor ist ein KDE-Plasmoid zur Visualisierung der aktuellen Leistung Ihrer Solaranlage – direkt auf dem Desktop. Entwickelt für Nutzer, die ihre Photovoltaik-Daten in Echtzeit überwachen und dabei auf Effizienz, Transparenz und Datenschutz setzen. Funktionen im Überblick Live-Datenabruf von kompatiblen Wechselrichtern Anzeige der aktuellen Leistung pro Solarpanel Darstellung der Tagesausbeute (in Wh oder kWh) Konfigurierbare Abfrageintervalle Desktop-Integration unter KDE Plasma 6 Kompatibilität & Integration EZMonitor funktioniert mit Wechselrichtern, die über ein Webinterface erreichbar sind. Die IP-Adresse und das entsprechende Panel-Mapping können direkt im Plasmoid konfiguriert werden. Das Widget ist vollständig offlinefähig und greift nur lokal auf das Netz zu. 🛒APSystems EZ1-M Micro Inverter bei Amazon Installation EZMonitor ist über den KDE Store verfügbar oder kann direkt aus dem GitHub-Repository installiert werden. Für den Betrieb wird KDE Plasma 6 sowie Qt 6 benötigt. Am einfachsten: .plasmoid Über „Neue Widgets holen" in den Systemeinstellungen, oder das .plasmoid aus dem aktuellsten Release herunterladen und: kpackagetool6 --type Plasma/Applet --install ezmonitor-*.plasmoid Funktioniert distro-unabhängig auf jedem Plasma-6-System, kein Paketmanager nötig. Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in ezmonitor Installation für Debian/Ubuntu Direct-Download über die aktuellste Release-Seite: sudo apt install ./ezmonitor_*.deb Quellcode & Mitwirkung Der Quellcode ist unter der GPLv3 veröffentlicht und kann auf GitHub eingesehen werden. Feedback, Bugreports und Pull Requests sind willkommen. Zum GitHub-Repository --- ## OSBMonitor OSBMonitor OSBMonitor ist ein KDE-Plasmoid zur Anzeige des aktuellen Build-Status von Projekten auf dem Open Build Service (OBS). Es richtet sich an Paketbetreuer, Maintainer und Distributionsentwickler, die ihre Build-Projekte direkt im Plasma-Panel im Blick behalten wollen. Funktionen Regelmäßige Abfrage des OBS-Projektstatus via Farbliche Darstellung des Status (Grün, Gelb, Rot, Grau) Unterstützt Open Build Service Instanzen wie build.opensuse.org Anzeige von Build-Fehlern und Repositories Konfiguration direkt im Plasmoid (Projektname & URL) Live-Status im openSUSE Build Service Repository home:Agundur. Installation Am einfachsten: .plasmoid Über „Neue Widgets holen" in den Systemeinstellungen, oder das .plasmoid aus dem aktuellsten Release herunterladen und: kpackagetool6 --type Plasma/Applet --install osbmonitor-*.plasmoid Funktioniert distro-unabhängig auf jedem Plasma-6-System, kein Paketmanager nötig. Installation unter openSUSE Tumbleweed Erfolgt über den Open Build Service: sudo zypper ar -f https://download.opensuse.org/repositories/home:/Agundur/openSUSE_Tumbleweed/home:Agundur.repo sudo zypper --gpg-auto-import-keys ref sudo zypper ref sudo zypper in osbmonitor Installation für Debian/Ubuntu Direct-Download über die aktuellste Release-Seite: sudo apt install ./osbmonitor_*.deb Quellcode & Mitwirken Der vollständige Quelltext ist unter der GPLv3 veröffentlicht. Fehlerberichte, Feature-Wünsche oder Pull Requests sind jederzeit willkommen. Zum GitHub-Repository --- ## G213Tray G213Tray KDE-System-Tray-Applet zur Steuerung der Hintergrundbeleuchtung der Logitech G213 Prodigy — ohne Logitech-Software, ohne Cloud, ohne Root-Rechte im Alltag. Farbe wählen, Licht an — fertig. Funktionen Beleuchtung per Linksklick auf das Tray-Icon ein-/ausschalten 7 Farbvoreinstellungen: Weiß, Rot, Grün, Blau, Lila, Orange, Cyan Freie Farbwahl per RGB-Farbpicker Letzte Farbe und Zustand werden sitzungsübergreifend gespeichert Autostart über KDEs Standard-Mechanismus Kein Logitech-Treiber nötig — direkte USB-HID-Kommunikation Kompatibilität Entwickelt und getestet mit der Logitech G213 Prodigy (Vendor 046d, Product c336). Andere Logitech G-Tastaturen mit gleichem HID-Protokoll können durch Anpassen der Produkt-ID in g213tray.py eingebunden werden. Nicht unterstützt von libratbag/piper — G213Tray kommuniziert direkt per USB HID und funktioniert genau dort, wo andere Tools scheitern. Voraussetzungen Python 3.8+ PyQt5 pyusb KDE Plasma 6 Einmalige udev-Regel (danach kein Root mehr nötig) Installation Abhängigkeiten installieren: # openSUSE Tumbleweed sudo zypper install python3-PyQt5 python3-pyusb # Fedora sudo dnf install python3-pyqt5 python3-pyusb # Ubuntu / Debian sudo apt install python3-pyqt5 python3-usb Repository klonen und starten: git clone https://github.com/Agundur-KDE/G213Tray.git cd G213Tray python3 g213tray.py Quellcode & Mitwirkung Der Quellcode ist unter der GPL-3.0 veröffentlicht. Feedback, Bugreports und Pull Requests sind willkommen. Zum GitHub-Repository --- ## Google-Sichtbarkeit mit Claude Google-Sichtbarkeit mit Claude automatisiert im Blick behalten Read this article in English Ein Google-Service-Account ist der sauberere Weg, um eigene Skripte oder Claude Code an die Google-Search-Console-API anzubinden, statt einen Drittanbieter-MCP-Server mit interaktivem OAuth-Consent dazwischenzuschalten: kein Consent-Screen, keine fremde Software zwischen dir und deinen eigenen Daten, und der Zugriff lässt sich jederzeit in der Search Console selbst wieder entziehen.Ich hab dafür ein paar Stunden gebraucht, weil die meisten Tutorials im Netz auf genau diese Drittanbieter-Wrapper setzen und den offiziellen Service-Account-Weg gar nicht erst erwähnen.Der Ablauf selbst ist, einmal eingerichtet, unspektakulär: Google-Cloud-Projekt anlegen, Search-Console-API aktivieren, einen Service Account erstellen, dessen JSON-Key sicher ablegen und den Service Account als eingeschränkten „Nur-Lese-Nutzer" in der Search Console eintragen.Danach kann jedes Python-Skript oder jeder Claude-Code-Lauf ganz normal Performance-Daten abfragen, ohne dass irgendwo ein Browser-Consent-Fenster aufpoppt — genau die Grundlage, die es braucht, damit eine KI die Zahlen nicht nur abruft, sondern auch interpretiert. Als Bonus zeig ich, wie ein systemd-User-Timer statt eines klassischen Cron-Jobs verpasste Läufe automatisch nachholt, wenn der Rechner mal aus war. Den kompletten, getesteten Code gibt's auch als eigenständiges Repo: Pythia. Service Account vs. OAuth-Consent-MCP Warum überhaupt der Umweg über einen eigenen Service Account, wenn es fertige MCP-Server für die Search-Console-API gibt? Technisch nutzen beide Wege OAuth 2.0 — der eigentliche Unterschied ist, ob dafür einmalig ein Mensch im Browser zustimmen muss und ob fremder Server-Code dazwischenhängt. OAuth-Consent-MCP (Drittanbieter) Service Account Setup-AufwandGering, einmal durchklickenEtwas mehr (GCP-Projekt, Service Account, Key) Läuft über gehosteten Drittanbieter-ServerMeistens jaNein Braucht einmalig interaktiven Consent im BrowserJa, beim ersten LoginNie Geeignet für unbeaufsichtigte Automatisierung (Cron/Timer)Mit sicher gespeichertem Refresh-Token möglichJa, ganz ohne Consent-Schritt Zugriff granular widerrufbarÜber Drittanbieter-EinstellungenDirekt in der Search Console Für eine einmalige, interaktive Abfrage reicht ein OAuth-Consent-MCP locker — auch für wiederkehrende Läufe geht das grundsätzlich, wenn man sich um einen sicher gespeicherten Refresh-Token kümmert. Der Service Account nimmt einem genau diese Fürsorge ab: kein Token-Handling, kein fremder Server, kein Consent-Schritt, der im Weg stehen könnte. Bevor du anfängst Ein Google-Cloud-Konto (kostenlos) Eine Property in der Google Search Console, auf die du Zugriff hast Python 3 mit venv 15-20 Minuten für die einmalige Einrichtung Einrichtung 1. Google-Cloud-Projekt anlegen und Search Console API aktivieren In der Google Cloud Console ein neues Projekt anlegen (z. B. -search-console), dann unter "APIs & Services" → "Library" nach "Google Search Console API" suchen und aktivieren. Stolperstein: Google Cloud merkt sich das zuletzt aktive Projekt. Es ist leicht, versehentlich im falschen (z. B. einem älteren) Projekt zu landen — vor dem Aktivieren immer oben in der Projekt-Auswahl kontrollieren, in welchem Projekt du gerade bist. 2. Service Account anlegen Im linken Menü der Google Cloud Console auf "IAM and admin" klicken — das öffnet ein Untermenü, dort "Service Accounts" auswählen. Dann "Create Service Account", Name vergeben, fertig — die optionalen Schritte "Grant this service account access to project" und "Grant users access to this service account" bewusst überspringen, die brauchen wir für unseren Zweck nicht. Stolperstein: Browser-Zurück-Taste während dieses Assistenten erzeugt gerne doppelte Service Accounts. Lieber neu von "Create Service Account" starten, statt mit Zurück zu navigieren. 3. JSON-Key erzeugen und sicher ablegen Im angelegten Service Account → Tab "Keys" → "Add Key" → "Create new key" → JSON. Google warnt an dieser Stelle selbst davor, dass Service-Account-Keys ein Sicherheitsrisiko sind — und das Expiry-Datum oben zeigt auch warum: JSON-Keys laufen standardmäßig nie ab. Ohne eine explizite Google-Cloud-Organisationsrichtlinie, die eine Ablaufzeit erzwingt, bleibt so ein Key auf unbestimmte Zeit gültig. Wer den Weg aus diesem Artikel nutzt, sollte sich das als wiederkehrende Aufgabe vormerken: nicht mehr gebrauchte Keys im "Keys"-Tab aktiv löschen, statt sie einfach liegen zu lassen. Die heruntergeladene Datei niemals in ein Git-Repo legen. Stattdessen z. B.: mkdir -p ~/.config/ mv ~/Downloads/-xxxxx.json ~/.config//service-account.json chmod 600 ~/.config//service-account.json Falls der Key mal in der Nähe eines Git-Repos landen soll (z. B. weil ein Skript ihn im selben Ordner erwartet): lieber dorthin symlinken statt kopieren. Ein .gitignore-Eintrag schützt einen Symlink genauso wie eine echte Datei — aber selbst im Worst Case eines erzwungenen git add -f speichert Git bei einem Symlink nur den Ziel-Pfad als Text, nie den tatsächlichen Dateiinhalt. Ein versehentlicher Force-Add würde dann höchstens einen lokalen Pfad verraten, nicht den Key selbst. Genau so ist es im Pythia-Repo gelöst. 4. Service Account in der Search Console eintragen In der Search Console der gewünschten Property → "Einstellungen" → "Nutzer und Berechtigungen" → "Nutzer hinzufügen". Die E-Mail-Adresse des Service Accounts (endet auf @.iam.gserviceaccount.com) eintragen, Berechtigung "Eingeschränkt" (read-only) reicht für Auswertungen völlig aus. Stolperstein: Domain-Property vs. URL-Präfix-Property. Eine Domain-Property (sc-domain:example.com) aggregiert automatisch alle Subdomains — wenn du z. B. ein separates Hobby-/Nebenprojekt auf einer Subdomain hast, landen dessen Daten ungewollt mit im selben Bericht. Für saubere Auswertungen lieber eine eigene URL-Präfix-Property für genau die Property anlegen, die du auswerten willst. Erste Abfrage Python-Umgebung einrichten: python3 -m venv ~/.config//venv ~/.config//venv/bin/pip install google-auth google-api-python-client Das Skript erwartet service-account.json im selben Ordner wie sich selbst — leg beides also zusammen in ~/.config// ab. Den vollständigen, getesteten Code gibt's hier statt zum Abtippen (Einrückung geht bei Copy-Paste aus einer Webseite erfahrungsgemäß gern kaputt): query.py auf GitHub ansehen Er prüft Eingaben (ungültige Tage/Limits/Dimensionen) und fängt die häufigsten Fehlerfälle mit einer klaren Meldung statt eines rohen Python-Tracebacks ab: fehlende Abhängigkeiten, fehlender Key, 403 bei falscher Property-Berechtigung oder nicht existenter Property, 400 bei ungültiger Property-Syntax. Aufruf (aus dem ~/.config//-Ordner heraus, oder mit vollem Pfad zu query.py): ~/.config//venv/bin/python ~/.config//query.py "https://www.example.com/" --days 7 --dimensions page --limit 25 Kein Browser-Fenster, kein Consent-Dialog — die Authentifizierung läuft komplett über den Service-Account-Key. Warum nicht einfach in der Search Console nachschauen? Berechtigte Frage an dieser Stelle: Die Zahlen stehen doch alle schon im Browser, wozu der ganze API-Aufwand? Wenn es nur ums Anschauen ginge — zu Recht keiner. Der Punkt ist, was hinter der API passiert, sobald man sie an Claude Code statt an ein Dashboard hängt. 2026 ist es nicht mehr nötig, sich selbst jede Woche durch dieselben Tabellen zu klicken und im Kopf mit der Vorwoche zu vergleichen — das kann ein LLM übernehmen, und zwar nicht nur als Zahlenfilter, sondern als Analysewerkzeug, das die Zahlen tatsächlich einordnet: Was hat sich seit letzter Woche verändert, welche Seite verliert trotz guter Position plötzlich Klicks, wo lohnt sich ein Blick auf Title und Meta Description, weil die Suchbegriffe nicht mehr zum Text passen. Das Ergebnis ist kein Datenexport, sondern ein fertig eingeordneter Bericht mit konkreten Handlungsvorschlägen — genau das übernimmt der Prompt im verlinkten weekly-report.sh. Wiederkehrender Check: systemd-User-Timer statt Cron Für einen wöchentlichen Report ist ein systemd-User-Timer einem klassischen Cron-Job vorzuziehen, weil er verpasste Läufe automatisch nachholt (Persistent=true) — praktisch, wenn der Rechner am geplanten Zeitpunkt mal aus oder im Standby war, was bei einem normalen Desktop/Laptop öfter vorkommt als bei einem Server. Skript und beide Unit-Dateien, fertig zum Klonen und mit Kommentaren, wo genau SITE_URL und der Pfad zu weekly-report.sh reinmüssen: weekly-report.sh search-console-weekly.service search-console-weekly.timer Nach ~/.config/systemd/user/ kopieren und aktivieren: systemctl --user daemon-reload systemctl --user enable --now search-console-weekly.timer Mit systemctl --user list-timers prüfen, wann der nächste Lauf ansteht. Stolperstein, den ich beim Zusammenbauen für den öffentlichen Code selbst gemacht habe: Das erste Skript hat den Pfad zu sich selbst und zum venv fest verdrahtet (~/.config/google-search-console/...). Funktioniert lokal, bricht aber sofort, sobald jemand anderes das Repo an eine andere Stelle klont. Die robustere Lösung: Das Skript ermittelt sein eigenes Verzeichnis zur Laufzeit (dirname "$(readlink -f "$0")") und baut alle Pfade relativ dazu auf. Kein Problem, wenn man von Anfang an nur für sich selbst schreibt — wird aber sofort zum Bug, sobald der Code weitergegeben werden soll. Genau das ist in den drei Dateien oben schon eingebaut. Fehlerbehebung PERMISSION_DENIED bei der Abfrage: Service Account wurde nicht (oder mit falscher E-Mail-Adresse) als Nutzer in der Search-Console-Property eingetragen — Schritt 4 prüfen. Falsche/leere Daten: Property-Typ prüfen — Domain-Property aggregiert Subdomains mit rein, URL-Präfix-Property nicht. Ggf. die falsche Property abgefragt. API nicht aktiviert: Fehlermeldung nennt meist direkt den Google-Cloud-Projektnamen — prüfen, ob das wirklich das Projekt ist, in dem die Search Console API aktiviert wurde (siehe Stolperstein oben). Timer läuft nicht: systemctl --user status search-console-weekly.timer und journalctl --user -u search-console-weekly.service prüfen. Bei manchen Distros muss "linger" aktiviert sein (loginctl enable-linger $USER), damit User-Timer auch ohne aktive Anmeldesitzung laufen. Fazit Für eine einmalige, interaktive Abfrage ist ein fertiger OAuth-Consent-MCP-Server die schnellere Wahl. Sobald ein Skript aber regelmäßig und unbeaufsichtigt laufen soll — täglich, wöchentlich, per Timer statt manuell angestoßen — ist der Service-Account-Weg der robustere: kein Consent-Dialog, der plötzlich mitten in einem automatisierten Lauf auftaucht, und der Zugriff bleibt jederzeit direkt in der Search Console kontrollierbar. Die API liefert nur die Daten; den praktischen Wert schafft der automatisierte Bericht, der Veränderungen einordnet und daraus konkrete nächste Schritte ableitet. Den kompletten Code aus diesem Artikel — query.py mit Fehlerbehandlung, weekly-report.sh, beide systemd-Units, README für Einsteiger — gibt's fertig zum Klonen unter github.com/Agundur-KDE/Pythia. ← Zurück zu Projekte --- ## Google Visibility with Claude Google Visibility on Autopilot with Claude Diesen Artikel auf Deutsch lesen A Google service account is the cleaner way to connect your own scripts or Claude Code to the Google Search Console API, instead of routing through a third-party MCP server with interactive OAuth consent: no consent screen, no third-party software sitting between you and your own data, and access can be revoked at any time directly in Search Console.It took me a few hours to figure this out, because most tutorials online default to exactly those third-party wrappers and never mention the official service-account route at all.The setup itself is, once done, unremarkable: create a Google Cloud project, enable the Search Console API, create a service account, store its JSON key safely, and add the service account as a restricted, read-only user in Search Console.After that, any Python script or Claude Code run can query performance data normally, with no browser consent window ever popping up — exactly the foundation an AI needs to not just pull the numbers, but actually interpret them. As a bonus, I'll show how a systemd user timer, instead of a classic cron job, automatically catches up on missed runs if the machine was off. The complete, tested code is also available as a standalone repo: Pythia. Service Account vs. OAuth-Consent MCP Why bother with your own service account when ready-made MCP servers exist for the Search Console API? Technically, both approaches use OAuth 2.0 — the real difference is whether a human has to approve access in a browser once, and whether third-party server code sits in between. OAuth-Consent MCP (third-party) Service Account Setup effortLow, a few clicksA bit more (GCP project, service account, key) Runs through a hosted third-party serverUsually yesNo Requires one-time interactive browser consentYes, on first loginNever Suitable for unattended automation (cron/timer)Possible with a securely stored refresh tokenYes, no consent step at all Access revocable at a granular levelVia third-party settingsDirectly in Search Console For a one-off, interactive query, an OAuth-consent MCP is plenty — recurring runs work too, in principle, if you take care of a securely stored refresh token. A service account takes exactly that burden off your hands: no token handling, no third-party server, no consent step that could get in the way. Before you start A Google Cloud account (free) A property in Google Search Console you have access to Python 3 with venv 15-20 minutes for the one-time setup Setup 1. Create a Google Cloud project and enable the Search Console API In the Google Cloud Console, create a new project (e.g. -search-console), then under "APIs & Services" → "Library" search for "Google Search Console API" and enable it. Gotcha: Google Cloud remembers the last active project. It's easy to accidentally end up in the wrong (e.g. an older) project — always check the project selector at the top before enabling anything. 2. Create a service account In the Google Cloud Console's left menu, click "IAM and admin" — this opens a submenu, select "Service Accounts" there. Then "Create Service Account", give it a name, done — deliberately skip the optional "Grant this service account access to project" and "Grant users access to this service account" steps, we don't need them for our purpose. Gotcha: The browser back button during this wizard tends to create duplicate service accounts. Better to start fresh from "Create Service Account" than navigate back. 3. Create a JSON key and store it securely In the service account you created → "Keys" tab → "Add Key" → "Create new key" → JSON. Google itself warns right here that service account keys are a security risk — and the expiry date above shows why: JSON keys don't expire by default. Without an explicit Google Cloud organization policy enforcing an expiry, a key like this stays valid indefinitely. If you use the approach in this article, make a recurring habit of it: actively delete keys you no longer use in the "Keys" tab instead of leaving them lying around. Never put the downloaded file into a Git repo. Instead, e.g.: mkdir -p ~/.config/ mv ~/Downloads/-xxxxx.json ~/.config//service-account.json chmod 600 ~/.config//service-account.json If the key ever needs to live near a Git repo (e.g. because a script expects it in the same folder): symlink it in rather than copying it. A .gitignore entry protects a symlink the same way it protects a real file — but even in the worst case of a forced git add -f, Git stores a symlink as just the target path as text, never the actual file content. An accidental force-add would at most leak a local path, not the key itself. That's exactly how it's handled in the Pythia repo. 4. Add the service account in Search Console In Search Console for the property you want → "Settings" → "Users and permissions" → "Add user". Enter the service account's email address (ends in @.iam.gserviceaccount.com); "Restricted" (read-only) permission is plenty for analysis. Gotcha: Domain property vs. URL-prefix property. A Domain property (sc-domain:example.com) automatically aggregates all subdomains — if you have, say, a separate hobby/side project on a subdomain, its data ends up mixed into the same report. For clean reporting, create a dedicated URL-prefix property for exactly the property you want to analyze. First query Set up the Python environment: python3 -m venv ~/.config//venv ~/.config//venv/bin/pip install google-auth google-api-python-client The script expects service-account.json in the same folder as itself — so put both together in ~/.config//. Here's the full, tested code as a link rather than something to retype (indentation reliably breaks when copy-pasting from a web page): View query.py on GitHub It validates input (invalid days/limits/dimensions) and catches the most common failure cases with a clear message instead of a raw Python traceback: missing dependencies, a missing key, 403 for a wrong or non-existent property permission, 400 for invalid property syntax. Run it (from inside the ~/.config// folder, or with the full path to query.py): ~/.config//venv/bin/python ~/.config//query.py "https://www.example.com/" --days 7 --dimensions page --limit 25 No browser window, no consent dialog — authentication runs entirely through the service account key. Why not just look in Search Console? Fair question at this point: the numbers are already sitting right there in the browser, so why the whole API effort? If it were only about looking at the numbers — fair enough, no reason at all. The point is what happens behind the API once you hook it up to Claude Code instead of a dashboard. In 2026, you no longer need to click through the same tables every week yourself and compare them to last week in your head — an LLM can take that over, and not just as a number filter, but as an analysis tool that actually makes sense of the numbers: what changed since last week, which page is suddenly losing clicks despite a good position, where a look at the title and meta description is worthwhile because the search terms no longer match the text. The result isn't a data export, it's a ready-made, contextualized report with concrete action items — exactly what the prompt in the linked weekly-report.sh does. Recurring check: systemd user timer instead of cron For a weekly report, a systemd user timer beats a classic cron job because it automatically catches up on missed runs (Persistent=true) — handy for when the machine happened to be off or asleep at the scheduled time, which is more common on a regular desktop/laptop than on a server. The script and both unit files, ready to clone and commented on exactly where SITE_URL and the path to weekly-report.sh need to go: weekly-report.sh search-console-weekly.service search-console-weekly.timer Copy to ~/.config/systemd/user/ and enable: systemctl --user daemon-reload systemctl --user enable --now search-console-weekly.timer Check with systemctl --user list-timers when the next run is due. A gotcha I ran into myself while putting the public code together: the first version of the script hardcoded the path to itself and to the venv (~/.config/google-search-console/...). Works fine locally, but breaks immediately the moment someone else clones the repo somewhere else. The more robust fix: the script determines its own directory at runtime (dirname "$(readlink -f "$0")") and builds all paths relative to that. No problem if you're only ever writing for yourself — becomes an instant bug the moment the code is meant to be shared. That's exactly what's already built into the three files above. Troubleshooting PERMISSION_DENIED on query: the service account wasn't added (or was added with the wrong email) as a user on the Search Console property — check step 4. Wrong/empty data: check the property type — a Domain property aggregates subdomains, a URL-prefix property doesn't. You may be querying the wrong property. API not enabled: the error message usually names the Google Cloud project directly — check whether that's actually the project where you enabled the Search Console API (see the gotcha above). Timer not running: check systemctl --user status search-console-weekly.timer and journalctl --user -u search-console-weekly.service. On some distros, "lingering" needs to be enabled (loginctl enable-linger $USER) for user timers to run without an active login session. Conclusion For a one-off, interactive query, a ready-made OAuth-consent MCP server is the faster choice. But once a script needs to run regularly and unattended — daily, weekly, on a timer instead of triggered by hand — the service-account route is the more robust one: no consent dialog that could suddenly show up mid-run, and access stays directly controllable in Search Console at all times. The API only delivers the data; the practical value comes from the automated report that makes sense of the changes and turns them into concrete next steps. The complete code from this article — query.py with error handling, weekly-report.sh, both systemd units, a beginner-friendly README — is ready to clone at github.com/Agundur-KDE/Pythia. ← Back to Projects --- ## BonsaiPress BonsaiPress Das CMS das Dein KI-Assistent wirklich versteht. BonsaiPress ist ein kostenloses, quelloffenes PHP-CMS ohne Datenbank: Inhalte liegen als XML- und HTML-Dateien vor, verwaltet über Git und eine Shell-CLI statt über ein Admin-Backend. Jede Seite wird als statisches HTML exportiert und per FTPS deployed — kein PHP läuft zur Laufzeit auf dem Server, was Ladezeit und KI-Crawler-Lesbarkeit maximiert. Weil der gesamte Zustand in Klartext-Dateien steckt, kann ein KI-Assistent wie Claude Code den kompletten Inhalt direkt lesen und schreiben, ohne verstecktes Datenbank-Wissen oder Klicks durch ein UI. BonsaiPress selbst ist unter GPL-3.0 lizenziert und für jeden frei nutzbar, veränderbar und selbst hostbar. Wer die Einarbeitung überspringen will, kann optional einmalig eine Claude-Code-Skill kaufen, die dem Assistenten die CMS-spezifischen Fallstricke direkt mitgibt. Wer sich um Domain, DNS, E-Mail und Betrieb nicht selbst kümmern will, kann bei Agundur zusätzlich betreutes Hosting in Deutschland ab 19 Euro im Monat dazubuchen — beides unabhängig vom kostenlosen CMS. Live-Demo So entsteht eine Seite mit BonsaiPress Video laden — lädt Inhalte von YouTube, siehe Datenschutzerklärung Warum KI-Assistenten BonsaiPress lieben Shell-native — jede Operation läuft über die bonsai-CLI. Kein Klicken durch Menüs, die der KI unsichtbar sind. Flat files — Inhalt ist XML + HTML. Der KI-Assistent liest, schreibt und versteht alles direkt — kein versteckter State. Kein Admin-UI — kein WordPress-Backend das Claude nicht sehen kann. Statischer Output — reines HTML, maximale Sichtbarkeit für KI-Crawler (GEO-optimiert by design). Claude Code Skill — strukturierte Anleitung die Claude sofort proficient macht. Built for the shell. Built for AI. Google PageSpeed Insights (Mobile) für diese Seite — statisches HTML ohne Laufzeit-PHP lädt schnell und lässt sich zuverlässig von KI-Agenten auslesen. Installation — ein Befehl Nur Docker nötig. Kein git clone, kein Build-Step. # compose.yml herunterladen curl -O https://raw.githubusercontent.com/Agundur-KDE/BonsaiPress2/main/compose.yml curl -O https://raw.githubusercontent.com/Agundur-KDE/BonsaiPress2/main/bonsai chmod +x bonsai ./bonsai install # macht 'bonsai' systemweit verfügbar bonsai start # Docker-Images werden automatisch gezogen — Demo auf :8080 Produktiv-Betrieb — welcher Ordner muss persistent sein? Ein einziges Docker-Volume reicht: current/. Dort liegt nach bonsai switch der komplette Projektstand — Inhalte, site_structure.xml, Templates, SASS. Dieser Ordner sollte bei jedem produktiven Setup als Volume gemountet werden. Workflow bonsai new meinprojekt # neues Projekt bonsai static # HTML generieren bonsai deploy # nur geänderte Dateien per FTPS bonsai switch andere # Projekt wechseln Funktionen Kein PHP zur Laufzeit — statisches HTML auf dem Server Multi-Client — ein CMS, beliebig viele Projekte Hash-Diff-Deploy — nur geänderte Dateien werden übertragen Server-Auto-Init — web/ und include/ werden beim ersten Deploy angelegt SASS + Live-Reload über integrierten Watcher PHP 8.4, Symfony Console, PHPUnit Versionierung & Deploy-Technik Versionierung über GitHub Releases — v1.0.0, v2.0.0, taggt und dokumentiert direkt im Repo, kein separates Versionsschema. Hash-Diff statt State-Datei — bonsai deploy lädt kurzzeitig ein hashme.php auf den Server, holt darüber die Git-Blob-Hashes aller Remote-Dateien per HTTP, vergleicht sie mit dem lokalen Stand und überträgt nur das Delta per FTPS. Der Server bleibt die einzige Quelle der Wahrheit, kein Drift durch eine lokal mitgeführte State-Datei. Dieselbe Technik als eigenständige GitHub Action — FTP Hash Deploy Action extrahiert genau diesen Hash-Diff-Mechanismus für jede CI/CD-Pipeline, die statische Seiten per FTP ausliefert — auch außerhalb von BonsaiPress. Post-Deploy: automatischer IndexNow-Ping — nur die im Diff tatsächlich geänderten Seiten werden nach dem Deploy per IndexNow-Protokoll an Bing, Yandex, Naver, Seznam und Yep gemeldet. Google unterstützt IndexNow nicht und wird separat über die Sitemap erreicht. Was kostet was? Drei getrennte Ebenen — kein Abo-Zwang, keine Kopplung aneinander. BonsaiPress — das CMS Kostenlos Frei nutzbar, selbst hosten Open Source (GPL-3.0) Kein Abo, keine Kopplung Zum GitHub-Repository Claude Code Skills — optional ab €38 Kennt die CMS-Fallstricke schon Einmalig, kein Abo Updates per E-Mail Skills ansehen → Managed Hosting — optional ab €19/Monat Domain, DNS, E-Mail Hosting in Deutschland nach DSGVO Laufende Updates & Support Hosting-Angebot ansehen → Credits Basierend auf einer Idee von sebastiany.net. --- ## GEO Scanner GEO Score Checker GEO Score Checker KI-Sichtbarkeits-Checker AI Visibility Checker Wie sichtbar ist Deine Website für ChatGPT, Claude & Co.?URL eingeben — Score in Sekunden. How visible is your website to ChatGPT, Claude & Perplexity?Enter a URL — get your GEO score in seconds. URL EN DE Scan Analyse läuft… Analyzing… Als App installieren Install as app Erfahre von Website-Problemen, bevor deine Kunden es tun. Know about website issues before your clients do. Was ist ein KI-Sichtbarkeits-Checker (GEO Score Checker)? What is an AI visibility checker (GEO score checker)? Ein KI-Sichtbarkeits-Checker — auch GEO Score Checker genannt, kurz für Generative Engine Optimization — prüft, wie gut eine Website darauf vorbereitet ist, von KI-Suchsystemen zitiert zu werden. Statt nur zehn blaue Links zu ranken, entscheiden ChatGPT, Claude, Perplexity und Google AI Overviews heute direkt, welche Website sie als Quelle zitieren oder in einer generierten Antwort nennen — und welche sie schlicht ignorieren, unabhängig davon, wie gut der Inhalt eigentlich ist. Der GEO Scanner von Agundur prüft genau das für jede beliebige URL: in Sekunden, kostenlos, ohne Anmeldung und ohne API-Key. Die Analyse funktioniert für deutsch- und englischsprachige Websites gleichermaßen. Am Ende steht ein Score von 0 bis 100 — nicht als bloße Zahl, sondern mit einer konkreten Fix-Anleitung zu jedem einzelnen Check, damit klar ist, was genau fehlt und wie es behoben wird. An AI visibility checker — also called a GEO score checker, short for Generative Engine Optimization — grades how well a web page is set up to be cited by AI search systems — ChatGPT, Claude, Perplexity, and Google AI Overviews — on a 0-100 scale. Instead of just ranking ten blue links, these systems now decide directly which sites they cite as a source or mention in a generated answer, and which they simply skip, regardless of how good the content actually is. The Agundur GEO Scanner checks exactly that for any URL: in seconds, free, no signup, no API key required. The analysis works equally well for German- and English-language sites. The result is a 0-100 score — not just a number, but a concrete fix for every single check, so it's clear exactly what's missing and how to fix it. Der Unterschied zu klassischem SEO: Suchmaschinen-Crawler folgen Links und werten Backlinks aus. KI-Systeme lesen und verstehen den Seiteninhalt direkt — sie brauchen strukturierte, eindeutige Signale statt Ranking-Tricks. Fehlt zum Beispiel sauberes Schema.org-Markup, ein aktuelles Änderungsdatum oder eine früh im Text stehende, klar zitierfähige Antwort, wird die Seite bei der Zitat-Auswahl oft schlicht übersprungen — unabhängig davon, wie gut der Inhalt eigentlich ist. The difference from classic SEO: search engine crawlers follow links and weigh backlinks. AI systems read and understand page content directly — they need structured, unambiguous signals instead of ranking tricks. If clean Schema.org markup, a current modification date, or an early, clearly citable answer is missing, the page is often simply skipped during citation selection — regardless of how good the content actually is. Der GEO Scanner prüft genau diese Signale automatisiert: robots.txt-Freigaben für KI-Crawler, strukturierte Daten, Content-Aktualität, Antwort-Direktheit, Lesbarkeit ohne JavaScript und mehr — und liefert zu jedem Punkt eine konkrete Fix-Anleitung statt nur eine Zahl. llms.txt wird ebenfalls geprüft, aber nur gering gewichtet: Google hat dessen Wirkung auf KI-Suche offiziell nicht bestätigt — hilfreich bleibt es vor allem für KI-Coding-Agenten bei Entwickler-Dokumentation. The GEO Scanner checks exactly these signals automatically: robots.txt access for AI crawlers, structured data, content freshness, answer directness, readability without JavaScript, and more — with a concrete fix for every single point instead of just a number. llms.txt is checked too, but weighted low: Google has not officially confirmed its effect on AI search — it remains mainly useful for AI coding agents reading developer docs. KDE-Nutzer: GEO Runner für KRunner KDE users: GEO Runner for KRunner Für KDE Plasma 6 gibt's ein eigenes KRunner-Plugin: geo in KRunner (Alt+Leertaste) tippen, den Score direkt sehen, Klick öffnet den vollen Report hier auf der Seite. Reines Python, kein Kompilieren, kein root nötig — im KDE Store oder als Download auf GitHub. There's a dedicated KRunner plugin for KDE Plasma 6: type geo into KRunner (Alt+Space), see the score right there, click to open the full report on this page. Pure Python, no compiling, no root needed — on the KDE Store or as a download on GitHub. Entwickler: GEO Scan als GitHub Action Developers: GEO scan as a GitHub Action Der GEO Scanner läuft auch direkt in der CI/CD-Pipeline: die Agundur GEO Scan Action prüft bei jedem Pull Request automatisch, ob eine URL KI-sichtbar ist — 0-100 Score plus Einzelchecks direkt im Workflow-Log, kein API-Key nötig. Quellcode und Doku im geo-scan-action-Repo. The GEO Scanner also runs directly in your CI/CD pipeline: the Agundur GEO Scan Action automatically checks on every pull request whether a URL is AI-visible — 0-100 score plus individual checks right in the workflow log, no API key needed. Source and docs in the geo-scan-action repo. MCP-Server: GEO Scanner direkt in Claude & Co. MCP server: GEO Scanner right inside Claude & co. Der GEO Scanner läuft auch als Remote-MCP-Server — kein Install, kein API-Key: einfach https://www.agundur.de/mcp.php als Server eintragen (Streamable HTTP), gelistet in der offiziellen MCP-Registry als de.agundur/geo-scanner. Zwei Tools: der volle GEO-Score-Check und ein dedizierter LocalBusiness-Schema-Validator. Doku im geo-scanner-mcp-Repo. The GEO Scanner also runs as a remote MCP server — no install, no API key: just add https://www.agundur.de/mcp.php as a server (Streamable HTTP), listed in the official MCP Registry as de.agundur/geo-scanner. Two tools: the full GEO score check and a dedicated LocalBusiness schema validator. Docs in the geo-scanner-mcp repo. Häufige Fragen Frequently Asked Questions Was ist der Unterschied zwischen GEO und SEO? SEO optimiert für klassische Suchergebnislisten und Klicks. GEO optimiert dafür, von KI-Systemen als Quelle zitiert oder direkt in einer generierten Antwort genannt zu werden. Beide Disziplinen überschneiden sich (Struktur, Ladezeit, Inhalt), aber GEO braucht zusätzliche Signale wie sauberes Schema.org-Markup und früh im Text platzierte, klar zitierfähige Antworten. llms.txt gehört ebenfalls dazu, ist von Google aber nicht bestätigt wirksam. What's the difference between GEO and SEO? SEO optimizes for classic search result listings and clicks. GEO optimizes for being cited as a source by AI systems, or mentioned directly in a generated answer. Both disciplines overlap (structure, load time, content), but GEO needs additional signals like clean Schema.org markup and clearly citable answers placed early in the text. llms.txt is part of it too, though Google has not confirmed its effectiveness. Wie oft sollte ich meine Seite scannen? Nach jeder größeren Content- oder Struktur-Änderung, sonst reicht eine Prüfung alle paar Wochen — GEO-Signale ändern sich nicht täglich, aber Google, OpenAI und Anthropic passen ihre Crawler-Regeln gelegentlich an. How often should I scan my page? After every major content or structure change; otherwise a check every few weeks is enough — GEO signals don't change daily, but Google, OpenAI, and Anthropic occasionally adjust their crawler rules. Was bedeutet mein GEO Score konkret? Der Score (0-100) fasst mehrere Einzelchecks zusammen — u.a. HTTPS, Indexierbarkeit, llms.txt, Schema.org, Content-Aktualität und Lesbarkeit ohne JavaScript. Jeder Check zeigt einzeln an, ob er besteht, und liefert bei Lücken eine konkrete Handlungsempfehlung. What does my GEO score actually mean? The score (0-100) combines several individual checks — including HTTPS, indexability, llms.txt, Schema.org, content freshness, and readability without JavaScript. Each check shows individually whether it passes, and gives a concrete recommendation for any gap. Kostet der GEO Scanner etwas? Nein, der Scan ist kostenlos und ohne Registrierung nutzbar. Does the GEO score checker cost anything? No, the scan is free and requires no registration. --- ## Schema.org Checker Schema.org Checker Findet Google Dein LocalBusiness-Markup vollständig?URL eingeben — Lücken in Sekunden sehen. Does Google find your local business schema complete?Enter a URL — see the gaps in seconds. URL EN DE Check Analyse läuft… Analyzing… Erfahre von Website-Problemen, bevor deine Kunden es tun. Know about website issues before your clients do. Was ist Local Business Schema? What is local business schema? Local Business Schema (offiziell der Schema.org-Typ LocalBusiness) ist ein strukturiertes Datenformat — meist als JSON-LD geschrieben — das Suchmaschinen und KI-Systemen die wichtigsten Fakten zu einem Unternehmen mitteilt: Name, Adresse, Telefonnummer, Öffnungszeiten, Preisklasse und Kundenbewertungen. Anders als reiner Seitentext, den Suchmaschinen erst interpretieren müssen, legt das Schema-Markup diese Fakten explizit fest — in einem Format, das Maschinen ohne Rätselraten auslesen können. Google nutzt das für Rich Results (Sternebewertung, Öffnungszeiten, Adresse direkt im Suchergebnis), und KI-Systeme wie ChatGPT, Claude und Perplexity greifen bei Fragen zu lokalen Unternehmen auf dieselben strukturierten Fakten zurück. Ohne dieses Markup können Name, Öffnungszeiten oder Adresse zwar trotzdem im Suchergebnis auftauchen, aber nur als unstrukturierter Text — ohne Garantie, dass Suchmaschinen oder KI ihn richtig zuordnen, und ohne Chance auf die erweiterte Rich-Result-Darstellung. Der Schema.org Checker weiter oben prüft, ob das Local-Business-Schema einer Website vollständig genug ist, um dafür überhaupt in Frage zu kommen. Local business schema (formally the schema.org LocalBusiness type) is a structured data format — usually written as JSON-LD — that tells search engines and AI systems the essential facts about a business: its name, address, phone number, opening hours, price range, and customer ratings. Unlike the text on a page, which search engines have to interpret, schema markup states these facts explicitly, in a format machines can parse without guessing. Google uses it to power rich results (star ratings, hours, and address shown directly in search), and AI systems like ChatGPT, Claude, and Perplexity use the same structured facts when answering questions about local businesses. Without it, a business's name, hours, or address might still appear in search results, but only as unstructured text — with no guarantee search engines or AI parse it correctly, and no chance of the enhanced rich-result display. The Schema.org Checker above tests whether a site's local business schema is complete enough to actually qualify for those results. Warum LocalBusiness-Markup? Why local business schema markup matters Google zeigt Rich-Results (Sternebewertung, Öffnungszeiten, Adresse direkt im Suchergebnis) nur, wenn das strukturierte Daten-Markup (LocalBusiness als JSON-LD) vollständig und korrekt ist. Fehlt ein Pflichtfeld oder steckt der falsche Typ in einer verschachtelten Property (z.B. eine Person statt einer PostalAddress im address-Feld), wird das Rich Result einfach nicht angezeigt — ohne Fehlermeldung, ohne Hinweis. Google only shows rich results (star ratings, opening hours, address directly in the search result) when the structured data markup (LocalBusiness as JSON-LD — also called local business schema) is complete and correct. If a required field is missing, or the wrong type is nested inside a property (e.g. a Person instead of a PostalAddress in the address field), the rich result simply doesn't show up — no error message, no warning. Der Schema Checker prüft genau das: Pflichtfelder für Google Rich Results (Name, Bild, Adresse), empfohlene Felder (Telefon, Öffnungszeiten, Preisklasse, Geo-Koordinaten, Bewertungen) und die Typ-Korrektheit verschachtelter Properties — bewusst spezialisiert auf LocalBusiness statt das komplette Schema.org-Vokabular abzudecken. The Schema Checker checks exactly that: required fields for Google rich results (name, image, address), recommended fields (phone, opening hours, price range, geo coordinates, reviews), and correct nesting of properties — deliberately focused on local business schema instead of covering the entire Schema.org vocabulary. Missing local schema markup is the single most common reason a local business never shows up in rich results at all. Wie vollständiges Markup aussieht What complete markup looks like Ein Minimalbeispiel mit genau den Feldern, die der Checker oben prüft: A minimal example with exactly the fields the checker above validates: Dieser Checker prüft nur LocalBusiness. Für alle anderen Schema-Typen — direkt beim Schreiben, nicht erst nachträglich geprüft: This checker only covers LocalBusiness. For every other schema type — checked while you write, not just afterwards: Schema.org Skill — Claude Code Skill €38 Generiert Schema.org JSON-LD für alle 20+ Typen — nicht nur LocalBusiness: Product, Article, FAQPage, Event, HowTo, u.v.m. Geprüft gegen Googles Rich-Results-Pflichtfelder Läuft direkt in Claude Code — als /schema-org Skill installiert, kein separates Tool nötig Updates per E-Mail Generates Schema.org JSON-LD for all 20+ types — not just LocalBusiness: Product, Article, FAQPage, Event, HowTo, and more Validated against Google's Rich Results required fields Runs directly inside Claude Code — installed as the /schema-org skill, no separate tool needed Updates via email KaufenBuy now Alle Claude-Code-Skills ansehen See all Claude Code Skills Häufige Fragen Frequently Asked Questions Für welche Unternehmensarten funktioniert das? LocalBusiness und gängige Unterarten: Restaurant, Store, ProfessionalService, MedicalBusiness, LegalService, LodgingBusiness, RealEstateAgent und weitere. Which business types does this work for? LocalBusiness and its common subtypes: Restaurant, Store, ProfessionalService, MedicalBusiness, LegalService, LodgingBusiness, RealEstateAgent, and more. Was passiert, wenn gar kein LocalBusiness-Markup gefunden wird? Der Score ist dann 0 — das ist die häufigste und wichtigste Erkenntnis: ganz ohne Markup gibt es gar keine Chance auf ein Rich Result, unabhängig von Inhalt oder Bewertungen. What happens if no LocalBusiness markup is found at all? The score is 0 — this is the most common and most important finding: without any markup at all, there is no chance of a rich result, regardless of content or reviews. Kostet der Check etwas? Nein, kostenlos und ohne Registrierung. Does the check cost anything? No, it's free and requires no registration. --- ## CSS Patterns CSS Patterns — Zero JavaScript Needed 30 working interaction/motion patterns — sliders, modals, scroll effects, form feedback — built with plain CSS instead of a JS framework or Bootstrap's JS bundle. Every demo below is the real code, live in an iframe, not a recording or a screenshot. Buy now — €49 In the video series Sidebar that slides in zero JS @starting-style + a CSS transition on transform. Click "Open menu" — the whole animation is CSS, not addEventListener. Pure CSS picture slider Three radio inputs, one :checked ~ selector per slide. No JavaScript, no framework, no slider library. Dark mode toggle zero JS One checkbox, one :checked ~ selector flipping CSS custom properties. The 8 lines of JS below it are only there to remember your choice after reload. Dropdown menu zero JS :hover and :focus-within revealing a submenu — keyboard-accessible, no addEventListener anywhere. Parallax scroll effect Background layer moves slower than the foreground on scroll — pure CSS transform trick, no scroll-event JS. 3D flip card Hover flips the card on its Y-axis via transform: rotateY() and backface-visibility — no JS class-toggling. Scroll-snap gallery scroll-snap-type locks each swipe to the next slide — no carousel library, no JS. Modal window zero JS The :target selector opens a modal from a URL fragment — a link, an anchor, no addEventListener. Cross-page View Transitions The View Transitions API animates a shared element across two real page loads — click through, watch the headline morph between pages. More CSS-only patterns Anchor-positioned tooltip CSS Anchor Positioning pins a popover tooltip directly to its trigger button — zero JS position math. Checkbox accordion A checkbox-driven accordion using grid-template-rows: 0fr → 1fr — animates to the real content height, never a guessed fixed value. Native exclusive accordion Native
— same name on multiple panels makes the browser close the others automatically, no JS, no checkbox hack at all. Custom-styled native select A native