Diese Woche, mitten in einem Call, fängt Claude an zu hängen. Ich wechsle reflexhaft auf status.claude.com, dann auf status.openai.com, weil ich wissen will, ob es nur einer ist oder gleich mehrere. Bei OpenAI stand tatsächlich „Partial System Degradation“. Drei Tabs, zwei Minuten, eine genervte Erkenntnis: diese Info gehört nicht auf fünf fremde Seiten verteilt, sondern auf mein eigenes Dashboard.
Also hab ich mir heute früh ein kleines Widget gebaut, das mir den Live-Status der großen KI-Dienste mit einem grünen, gelben oder roten Punkt zeigt. Klingt simpel, ist es im Kern auch. Spannend wird es an zwei Stellen, an denen so ein Ding normalerweise scheitert: Caching und CORS. Und an einer Entscheidung, die nichts mit Technik zu tun hat: warum Grok bewusst draußen bleibt.
Warum überhaupt ein eigenes Status-Widget?
Ausfälle passieren. Am 23. Juni 2026 war Claude für viele eine Weile weg, kurz davor hatte OpenAI seine Degradation. Das ist kein Drama, sondern Normalbetrieb bei Diensten, die Millionen Requests fahren. Das Problem ist nicht der Ausfall, das Problem ist die Orientierung im Ausfall.
Wenn du wie ich mehrere Modelle parallel im Einsatz hast, Claude und Gemini als Hauptwerkzeuge, Perplexity für Recherche, dann willst du im Störungsfall genau eine Sache schnell wissen: liegt es an mir, an meinem Code, oder am Anbieter? Diese eine Antwort spart dir die halbe Fehlersuche. Und du willst sie nicht erst zusammensuchen, während die Kundin am anderen Ende wartet.
Ein Status-Widget für KI-Dienste gehört auf das eigene Dashboard, nicht auf fünf fremde Statusseiten, erklärt Alex Januschewsky, KI-Berater und Betreiber von digitalhandwerk.rocks. Ich hab das Ding bewusst so gebaut, dass es in meinen bestehenden Stack passt, auf eine WordPress-Seite mit Elementor, ohne dass ich für eine Statusampel ein zweites System aufmache.
Was das Ding eigentlich macht
Vier Anbieter, vier Zeilen, je ein Punkt. Grün heißt betriebsbereit, gelb heißt eingeschränkt, rot heißt Störung, grau heißt unbekannt. Die Anzeige aktualisiert sich automatisch in einem Intervall, das ich frei einstellen kann. Dazu zwei Darstellungen: eine kompakte Listenkarte oder eine horizontale Pill-Leiste, je nachdem, ob das Widget in einer Sidebar steht oder als schmaler Streifen im Header.
Die Daten kommen von den offiziellen Statusseiten der Anbieter. Anthropic und OpenAI fahren beide auf Atlassian Statuspage, die liefern ein sauberes Indikator-Feld, das ich direkt auf meine Ampel mappe. Google ist ein eigenes Tier, dazu gleich mehr. Perplexity läuft über Instatus und gibt mir einen klaren Gesamtstatus zurück.
Das war der einfache Teil. Jetzt kommt der Teil, der die meisten überrascht.
An welchen zwei Stolpersteinen so ein Widget normalerweise scheitert?
Mein erster Reflex war: ein bisschen JavaScript, das im Browser die Statusseiten abfragt und die Punkte färbt. Fertig. Funktioniert nur leider nicht, und zwar aus zwei Gründen.
CORS. Browser dürfen aus Sicherheitsgründen nicht einfach jede fremde Seite per JavaScript auslesen. Der fremde Server muss das per Header explizit erlauben. Anthropic, OpenAI und Perplexity tun das, Google teilweise auch. Aber sobald nur ein Anbieter dichtmacht, hängt dein Widget. Ich hab das im Test durchprobiert, und genau dort wäre es mir zerbröselt.
Caching. Ich fahre auf meinen Seiten WP Rocket. Ein Cache-Plugin friert die HTML-Seite ein und liefert sie als statische Datei aus, das ist der ganze Sinn der Sache. Wenn ich die farbigen Punkte serverseitig ins HTML rendere, dann frieren sie mit ein. Dein Widget zeigt dann tagelang denselben Status, weil die Seite aus dem Cache kommt.
Die Lösung für beides ist dieselbe, und sie ist eleganter, als es zuerst aussieht: ein kleiner Proxy in WordPress.
Was das konkret bedeutet: Das Plugin meldet einen eigenen REST-Endpoint an, etwas wie /wp-json/dhw-llm-status/v1/status. Dieser Endpoint fragt serverseitig alle Anbieter ab, normalisiert die Antworten auf grün, gelb, rot, grau und legt das Ergebnis in einem Transient für rund zwei Minuten ab. Das JavaScript im Widget redet dann nur noch mit diesem einen Endpoint auf der eigenen Domain.
Damit löse ich CORS, weil die Abfrage serverseitig läuft und der Browser nur die eigene Seite anspricht. Ich löse das Caching, weil WP Rocket die REST-API nicht als HTML mitcacht, die Punkte also live nachgeladen werden, während die statische Hülle bedenkenlos im Cache liegen darf. Und ich schone die Anbieter, weil nicht jeder einzelne Besucher die Statusseiten anpingt, sondern mein Server einmal alle zwei Minuten für die ganze Website.
Kurz zwei Begriffe, falls du nicht täglich in dem Thema steckst. CORS ist die Browser-Regel, die festlegt, welche fremden Server eine Seite per JavaScript auslesen darf. Ein Transient ist WordPress-Sprech für einen Zwischenspeicher mit Ablaufdatum, perfekt, um ein Ergebnis kurz vorzuhalten, statt es bei jedem Aufruf neu zu holen.
Was Google zum Sonderfall macht
Bei Anthropic und OpenAI bekomme ich einen einzigen Statuswert. Google liefert stattdessen ein großes Array mit sämtlichen Vorfällen über die gesamte Cloud, hunderte Dienste, von Netzwerk in Mumbai bis Speicher in Iowa. Da gibt es keinen fertigen Ampelwert.
Mein Adapter filtert deshalb auf offene Vorfälle, die Gemini oder Vertex AI betreffen, und leitet daraus die Farbe ab. Genau dieser Punkt ist auch der Grund, warum die serverseitige Lösung keine Spielerei ist, sondern notwendig. So eine Filterlogik willst du nicht im Browser jedes Besuchers laufen lassen, und das fette Array willst du erst recht nicht tausendfach ausliefern. Einmal serverseitig holen, filtern, zwischenspeichern, fertig.
Warum das Ganze praktisch ist
Drei Dinge machen für mich den Unterschied zwischen Spielzeug und Werkzeug.
Erstens ist es ein echtes Elementor-Widget, keine Codeschnipsel-Bastelei. Hintergrund, Border, alle Farben, alle Schriften und Größen, die Statusfarben, das Refresh-Intervall, sogar die Statustexte, alles stelle ich im Editor ein, mit Live-Vorschau. Wenn ich nächste Woche das Design ändere, brauche ich keine Datei mehr anzufassen.
Zweitens ist es mobile-first. Die Schriftgrößen, Abstände und die Punktgröße sind responsive geregelt, die Pill-Leiste bricht auf schmalen Screens automatisch um, und das Widget füllt schlicht den Container, in dem es steht. Ich design das einmal und es sitzt auf dem Handy genauso wie am Desktop.
Drittens passt es in meinen selbstgehosteten Stack, ohne neue Abhängigkeit. Ich betreibe ohnehin ein eigenes Dashboard und diverse kleine Dienste auf eigener Infrastruktur. Ein Plugin, das einen REST-Endpoint mitbringt und sonst nichts braucht, fügt sich da sauber ein. Das macht Sinn, wenn man Tools lieber besitzt als mietet.
Das ist nicht Theorie. Das ist das, was bei mir in der Beratungsarbeit mit EPU und KMU immer wieder durchkommt: die kleinen, unsexy Bausteine, die im Alltag tatsächlich Zeit sparen, schlagen das nächste glänzende Feature fast immer.
Warum Grok bewusst fehlt
Jetzt der Teil, der keine technische Entscheidung ist. Vier Anbieter sind drin, ein offensichtlicher fehlt: Grok. Das ist kein Versehen, das ist Absicht.
Ein Status-Widget ist eine Empfehlung durch Anwesenheit. Wer auf meiner Ampel steht, steht im selben Regal wie Claude, Gemini, OpenAI und Perplexity, also bei den Werkzeugen, die ich ernst nehme und einsetze. Grok gehört für mich nicht in dieses Regal, und ich hab das nicht aus dem Bauch heraus entschieden.
Ich habe Grok mehrfach getestet, neugierig und ohne ideologische Scheuklappen. Meine Begründung, warum ich es nicht mehr verwende, steht ausführlich im Artikel Grok, Wahrheit und Verantwortung. Der Kern: einem Sprachmodell fehlen Korrekturmechanismen, wenn es reale Ereignisse mit erfundenen Details anreichert und diese Version selbst nach Widerspruch als Wahrheit verteidigt. Eine verantwortungsvolle KI zeigt Unsicherheit und korrigiert sich. Genau das tat Grok in den dokumentierten Fällen nicht.
Dazu kommt die Plattform dahinter. Warum meine Agentur und mein Blog gar nicht mehr auf X sind, hab ich im Text Abschied von X festgehalten. Ein Werkzeug, das ethische Mindeststandards ignoriert, ist für den professionellen Einsatz unbrauchbar, egal wie gut die Benchmarks aussehen. Relevanz entsteht durch konkreten Nutzen und durch verantwortbares Risiko, nicht durch Provokation.
Ich würde das eigentlich diplomatischer formulieren, aber so ist es ehrlicher: Ich gebe einem Produkt, das ich aus guten Gründen nicht nutze, keinen Dauerplatz auf meinem Dashboard. #NoMusk ist bei mir keine Pose für Reichweite, sondern eine schlichte Konsequenz. Wer es anders sieht, kann Grok in seiner eigenen Kopie des Widgets in zwei, drei Zeilen ergänzen, der Code gibt das her. Bei mir bleibt es draußen.
Wer es live sehen will
Das Widget läuft bei mir produktiv. Wer es in Aktion sehen will, mit echten, sich live färbenden Punkten, schaut auf digitalhandwerk.rocks vorbei. Dort siehst du auch gleich, wie es sich ins Amber-Anthrazit-Design einfügt, das ich eh für die ganze Seite verwende. Auf der Startseite findest du es bei den LLMs, die ich im Einsatz habe oder bei jedem Blog in der Seitenleiste.
Den Bauplan dahinter habe ich bewusst geradlinig gehalten: ein Plugin, ein REST-Endpoint, ein bisschen JavaScript, ein natives Elementor-Widget. Nichts davon ist Raketenwissenschaft. Der Wert steckt nicht im einzelnen Trick, sondern darin, dass die kleinen Stolpersteine, Caching und CORS, vorab gelöst sind, statt dich im Livebetrieb zu ärgern.
Du kannst beim nächsten Ausfall weiter fünf Tabs aufreißen. Oder du baust dir den einen Punkt, der dir sofort sagt, wo das Problem liegt.
FAQ
Brauche ich Programmierkenntnisse, um das Widget zu nutzen?
Für den Einsatz nein. Du installierst das Plugin, aktivierst es und ziehst das Widget in Elementor an die gewünschte Stelle. Alles Weitere, Farben, Texte, Intervall, stellst du im Editor ein. Wenn du einen Anbieter ergänzen oder entfernen willst, brauchst du ein paar Zeilen PHP.
Funktioniert das mit Cache-Plugins wie WP Rocket?
Ja, und zwar genau deshalb, weil die Statusfarben nicht im gecachten HTML stehen, sondern per JavaScript live von einem eigenen REST-Endpoint nachgeladen werden. Die statische Seite darf im Cache liegen, die Punkte bleiben aktuell.
Wie oft aktualisiert sich die Anzeige?
Das Intervall stellst du selbst ein, von 30 Sekunden bis zu einer Stunde. Serverseitig liegt ein kurzer Zwischenspeicher von rund zwei Minuten, damit die Anbieter nicht unnötig oft abgefragt werden. Beides lässt sich anpassen.
Warum ist Grok nicht dabei?
Weil ein Status-Widget für mich eine Empfehlung durch Anwesenheit ist und ich Grok aus inhaltlichen Gründen nicht verwende. Die ausführliche Begründung steht in meinen Artikeln zu Grok und zum Abschied von X. Wer Grok trotzdem will, kann es im Code selbst ergänzen.
Du willst das?
Ich habe keine Ahnung, ob das Plugin bei dir passt. Das musst du selber versuchen. Ich schenk’s dir. Lad es runter, wenn es für dich funktioniert: gern geschehen. Wenn nicht, dann lösch es einfach wieder. Hier der Download (installierbares ZIP):