Blog

Beiträge

Ausführliche Beiträge von unserem Team: Engineering, Produkt und Unternehmen.

  • Product

    Deine Webhooks sollten der URL, die sie bekommen, nicht trauen

    Ein Webhook ist die einzige Funktion, bei der ein Kunde eine Adresse eintippt und deine Server sie aufrufen. Was ich für Kookees Webhooks und die Integrationen mit Slack, GitHub und Jira gebaut habe, und acht Dinge, die ein Webhook-Sender richtig machen muss.

  • oauth

    Bei deinem MCP-Server sollte niemand ein Token einfügen müssen

    Kookees MCP-Server funktionierte gut mit persönlichen Tokens, solange man ohnehin im Terminal arbeitete. Die Chat-Apps von Claude und ChatGPT verbinden sich stattdessen per Anmeldung. Was ich gebaut habe, damit das geht, und die sieben Entscheidungen, die länger gedauert haben als der Code.

  • headless-cms

    Die React-Komponenten deines CMS sollten ihre Daten nicht selbst laden

    Die meisten Komponenten-Kits von Headless-CMS packen deine App in einen Provider und laden Daten in den Komponenten. Mit Server Components fehlt der Inhalt dann im ersten HTML, statische Listen kommen als JavaScript, und Artikel werden doppelt übertragen. Die sechs Regeln, nach denen ich meine Komponenten gebaut habe.

  • Engineering

    React 19 schreibt dein dangerouslySetInnerHTML bei jedem Render neu

    Ein inline geschriebenes { __html }-Objekt bringt React 19 dazu, das gesamte HTML eines Elements bei jedem Re-Render des Elternelements zu ersetzen. Ich bin darauf gestoßen, weil ein Inhaltsverzeichnis an der letzten Überschrift hängen blieb. Warum das passiert, was es kaputtmacht und der Fix in einer Zeile.

  • pagination

    Deine Blog-Paginierung versteckt vermutlich Beiträge vor Google

    „Mehr laden“-Buttons, Paginierung im State, Seite eins als Canonical für alle Seiten, noindex ab Seite zwei: vier verbreitete Fehler, mit denen eine Blog-Paginierung ältere Beiträge vor Suchmaschinen versteckt, was du stattdessen tust, und eine Checkliste.

  • security

    Dein Einladungslink ist ein Passwort, das du in Slack gepostet hast

    Schickst du jemandem einen Einladungslink, gibst du einen Zugang heraus, der bei jedem funktioniert, der ihn je zu sehen bekommt. Was so ein Link mitbringen muss, bevor du ihn gefahrlos in einen Channel postest, und welche Entscheidungen hinter dem Link in Kookee stecken.

  • ai-agents

    Dein MCP-Server sollte nicht mit einem geteilten API-Schlüssel laufen

    Ändert ein KI-Assistent deine Inhalte über einen MCP-Server, lautet die erste Frage: Wer war das? Ein geteilter Projektschlüssel kann sie nicht beantworten, und einer einzelnen Person lässt er sich nicht wieder entziehen. Womit ich ihn ersetzt habe und welche sechs Details den Ausschlag gaben.

  • Engineering

    Warum dein Chat-Widget deinen Dark-Mode-Schalter ignoriert

    Deine Website hat einen Dark-Mode-Schalter. Das Support-Widget in der Ecke kümmert das nicht. Warum eingebettete Widgets beim Theme danebenliegen (Media Query des Betriebssystems, Shadow Root, Remount) und was ein Widget bieten muss, damit deines es richtig macht.

  • Engineering

    Dein KI-Assistent braucht keine Kopie deiner Datenbank

    Jeder Anbieter von KI-Support will, dass du deine Daten hochlädst. Die Alternative: Gib dem Assistenten eine Funktion, lass sie im Browser des Besuchers laufen, und deine Daten bleiben, wo sie sind.

  • Engineering

    Feature-Flags ohne Deployment

    Ein Banner, eine Rabattregel, ein Kill-Switch. Nichts davon verdient einen Release-Zyklus. Wofür das Config-Modul taugt und wo es aufhört.

  • Engineering

    Ein Blog mit einem einzigen Prompt

    Früher habe ich die komplette SDK-Referenz als eine Textdatei veröffentlicht, die Assistenten abrufen konnten. Zwei verlässlichere Quellen haben sie abgelöst: die Typen auf der Festplatte und eine Live-Verbindung zu deinen echten Inhalten.