Blog

Beiträge

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

  • Product

    Ein mehrsprachiges Hilfecenter ohne leere Seiten

    Das gehostete Portal von Kookee hat bisher jede Seite in der Standardsprache des Projekts gezeigt, egal welche Sprache der Leser gewählt hatte. Jetzt hat jede Sprache ihre eigene Adresse, für eine fehlende Übersetzung springt die Standardsprache ein, und die Sprachauswahl zeigt nur die Sprachen des Projekts.

  • Product

    So richtest du eine Statusseite für dein SaaS ein

    Die Entscheidungen hinter einer Statusseite für ein SaaS: was darauf gehört, wann ein Uptime-Monitor einen Ausfall melden sollte, wie man Updates zu Vorfällen formuliert und wo die Seite liegen sollte. Das durchgehende Beispiel sind die Statusseite und die Uptime-Monitore, die ich gerade in Kookee eingebaut habe.

  • 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.

  • Product

    Dein Hilfecenter sollte nicht mit einer leeren Seite anfangen

    Die meisten Teams haben ihre Hilfetexte schon, in PDFs, Word-Dateien und alten Exporten. Weil sie abgetippt werden müssten, bleiben Hilfecenter leer. Was ich für den Import gebaut habe, und die sieben Regeln, die verhindern, dass ein Import Geheimnisse an einen Chatbot weitergibt.

  • 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.

  • Product

    Dein Feedback-Widget sollte keine Registrierung verlangen

    Das Feedback-Board von Kookee verlangt ein Konto, und für Abstimmungen ist das richtig. Für Besucher, die gerade auf einen Bug gestoßen sind und eine halbe Minute Zeit haben, ist es eine Mauer. Der neue Feedback-Tab im Website-Widget, die fünf Regeln, nach denen ich ihn gebaut habe, und warum auch der KI-Chat jetzt optional ist.

  • Product

    Dein Chat-Widget sollte Besucher für die Antwort nicht von der Seite schicken

    Der Chat hat den richtigen Artikel zitiert, und der Klick darauf hat den Besucher von der Seite und aus der Unterhaltung geholt. Ich habe das Widget um die Tabs Startseite, KI fragen und Hilfe und einen Artikel-Reader herum neu gebaut. Die fünf Regeln dahinter und was ich weggelassen habe.

  • 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.