v1.20.0 — Translate your content with an AI assistant, and categories for your blog

1.20.0New featureDenis Povarov

Your blog and help center can now live in several languages without you keeping track of every copy: ask your AI assistant to translate an entry, and Kookee links the translation to the original and tells you when it falls behind.

New

  • Translate with your AI assistant. Ask Claude, ChatGPT, Cursor or any MCP client to translate a blog post or help article into one of your project's languages. The translation is linked to the original and goes into the version of the original's category in that language. When that category has no translation yet, the assistant is told which one, and can translate it too. Translations don't take the original's cover image.

  • Outdated translations. When you change the title, body, excerpt or SEO texts of an entry in your default language, its translations are marked outdated. The Translations panel of blog posts and help articles shows an Outdated badge and a Mark as up to date button, and saving a translation's own text clears it. Assistants see the same flag in get_entry, find outdated translations with list_entries, and mark one up to date with update_entry after they re-translate it.

  • Categories for your blog. Blog posts get categories, like help articles: create and translate them from Manage Categories on the Blog page, and pick one in the post editor. Adding a translation of a post puts it in its category's version in that language.

  • The site widget in German. Its own text now comes in six languages, and the Language select on the Installation tab offers Deutsch.

Improved

  • Readable addresses in any language. A Russian or other Cyrillic title becomes a transliterated slug (Как начать → kak-nachat), a German title writes umlauts as ae, oe and ue (Größe → groesse), and other languages drop their accents. When a title has no Latin or Cyrillic letters, as in Chinese, a translation made over MCP takes its original's slug.

  • One language in the category select. The category select of the blog and help editors lists only the categories in the entry's language.

  • For developers: @kookee/sdk and @kookee/react 1.15.0.

    • blog.categories() and blog.list({ category }), and the BlogCategoryNav component to show them.

    • getTranslationsBySlug(slug, { type, locale }) finds the right entry when several types or languages share a slug, and each translation now carries its own category, so getEntrySeo links every language to its own address. Its new defaultLocale option adds an x-default link, and its JSON-LD gains inLanguage.

    • BlogTagFilter leaves out tags with no posts. hideEmpty={false} lists them all again.

Fixed

  • Deleting a category that still has entries now tells you to move them out first. Before, the warning said its entries would be deleted with it, and the delete then failed.

  • One version of each category in assistant answers. The help center assistant no longer lists a category twice when its translations have their own slugs.

Changes in behavior

  • GET /v1/categories and GET /v1/help/categories without locale now return the categories in your default language, not in every language. Hosted portals show those categories too, so a help category address that uses another language's slug no longer opens.

  • A category filter matches the slug in the requested language, then in your default language. A slug that exists only in a third language no longer matches.

  • Only blog posts and help articles take categories. Creating a category for another type, or giving such an entry a new one, answers ENTRY_TYPE_CATEGORIES_DISABLED. Categories already set stay as they are.

Getting it

Translation and blog categories work now in the dashboard and over MCP; start a new conversation so your assistant sees the new options. The script tag at https://kookee.dev/chat/latest.js already has the German texts. From npm, update to @kookee/react 1.15.0 and @kookee/sdk 1.15.0. See Managing your content from an AI assistant (MCP) in the help center.

Learn more