Kookee — это бэкенд для контента: вы пишете посты для блога, записи журнала изменений, статьи центра помощи, страницы и объявления в одной панели управления, а ваше приложение получает их в виде JSON и показывает своими компонентами на вашем домене. Это руководство ведёт от пустого проекта до трёх работающих разделов с контентом на TypeScript SDK. Если ваш фреймворк умеет получать JSON и рендерить на сервере — Next.js, Astro, Nuxt, SvelteKit, TanStack Start, — всё ложится на него напрямую.
1. Создайте проект и возьмите данные для подключения
Зарегистрируйтесь (бесплатному тарифу не нужна банковская карта, и в него входят модули блога, журнала изменений и центра помощи), создайте проект и запишите два значения для подключения:
ID проекта — его можно показывать в коде для браузера; он читает опубликованный контент, как и API-ключ. Работает, только пока у проекта включён готовый портал, иначе API отвечает 403
PORTAL_NOT_ENABLED.API-ключ — работает в любом проекте, на ваших серверах и в браузере. Он только читает опубликованный контент, но всё, что попадает в браузер, видят посетители, поэтому ограничьте ключ своими доменами в разрешённых источниках проекта.
Простое правило: apiKey — везде, с ограничением по разрешённым источникам, если ключ попадает в браузер; projectId — в коде для браузера, и только пока готовый портал включён.
Сразу напишите в панели управления один пост для блога, одну запись журнала изменений и одну статью центра помощи и опубликуйте их: на другом конце первого запроса должны быть настоящие данные.
2. Установите и инициализируйте SDK
npm install @kookee/sdk
import { Kookee } from '@kookee/sdk';
export const kookee = new Kookee({ apiKey: process.env.KOOKEE_API_KEY });
SDK написан на TypeScript, не имеет зависимостей и поддерживает tree-shaking; каждый метод чтения принимает AbortSignal. Создайте экземпляр один раз в общем модуле и импортируйте его в загрузчики маршрутов.
3. Блог: список и страница поста
Два маршрута. Страница списка:
const { data: posts } = await kookee.blog.list({ page: 1, limit: 10 });
В каждой краткой записи есть заголовок, slug, отрывок, теги и даты — этого хватает для карточек. Страница поста получает запись целиком по slug:
const post = await kookee.blog.getBySlug(slug);
Ответ для поста содержит готовый HTML текста и SEO-поля, заполненные в редакторе, поэтому head документа собирается из того же запроса: title, meta description, canonical из slug, OG-картинка. Если getBySlug ничего не нашёл, верните настоящий 404.
Страницы тегов — тот же вызов list с tags: ['news'], поле поиска — list({ search: query }), а kookee.blog.getTags() отдаёт облако тегов с количеством постов.
4. Журнал изменений
Устроен так же, только с типизированными категориями:
const { data: entries } = await kookee.changelog.list({ page: 1, limit: 20 });
const features = await kookee.changelog.list({ filter: { changelogType: 'feature' } });
У записей есть тип (feature, fix, improvement, breaking, security, deprecated или other) и необязательная версия, так что интерфейс может показывать бейджи и фильтры без самодельных соглашений. Если нужна простая обратная связь по релизам, реакции — это один вызов:
await kookee.changelog.react(entryId, { reactionType: 'fire', action: 'add' });
5. Центр помощи: категории, статьи, семантический поиск
Маршруты закрывают три запроса:
const categories = await kookee.help.categories();
const articles = await kookee.help.list({ category: 'getting-started' });
const article = await kookee.help.getBySlug('reset-your-password');
Главное отличие — поиск. Он семантический: ищет по смыслу, а не по ключевым словам, и возвращает найденный фрагмент, чтобы вы могли показать, почему результат подошёл:
const results = await kookee.help.search({ query: 'списали деньги дважды в этом месяце', limit: 5 });
// results[i].title, results[i].matchedChunk
Когда статей станет достаточно, на том же контенте заработают ответы ИИ: kookee.help.chat возвращает ответы с источниками, опираясь на ваши статьи, а chatStream отдаёт дельты для интерфейса со стримингом. Это функция ИИ с лимитом на бесплатном тарифе (для начала 50 ответов в месяц), и отдельной интеграции ей не нужно: корпус — это статьи, которые вы только что опубликовали.
6. Готовые хуки, если у вас React
@kookee/react оборачивает всё перечисленное в хуки — useBlogPosts, useBlogPost, useChangelog, useHelpCategories, useHelpSearch (с debounce, его можно подключать прямо к полю ввода), — и каждый возвращает { data, isLoading, error } с пагинацией через loadMore. Рендерите на сервере загрузчиком своего фреймворка и передавайте результат в initialData, чтобы первая отрисовка была полной. Текст записи выводит <EntryContent entry={post} />, а к нему есть таблица стилей для блоков кода, которую можно импортировать в cascade layer Tailwind.
С версии 1.9.0 в пакете есть и серверные компоненты для всех трёх разделов, подробнее — в статье React-компоненты для блога, журнала изменений и центра помощи.
7. Что вы получаете, не написав больше ни строчки
Готовый портал на
your-project.kookee.dev: доска обратной связи, дорожная карта, журнал изменений и центр помощи начинают работать, как только вы включите переключатель «Включить публичный портал» на странице проекта «Публичный портал». Он пригодится, пока ваши собственные маршруты в работе (страницы портала закрыты от индексации, поэтому в поиске не конкурируют с вашим доменом).Переводы: каждый тип контента принимает параметр
localeс запасными языками на уровне проекта — на тот случай, когда сайт станет многоязычным.Комментарии и реакции во всех модулях, с модерацией из панели управления.
MCP-сервер: ИИ-агенты и ассистенты ищут, читают и готовят черновики вашего контента по личному токену каждого участника команды — только для чтения, если вы не решите иначе.
Полдня по пунктам
Если реалистично: настройка проекта и первый контент — полчаса, маршруты блога — час, журнал изменений — полчаса, центр помощи с поиском — час-два, метаданные в head — час. 100 000 запросов к API в месяц на бесплатном тарифе с запасом хватает на серверный рендеринг небольшого сайта, и платить не нужно, пока вы из них не вырастете.
Быстро получается благодаря тому, ради чего продукт и сделан: написание, хранение, поиск и доставка контента — на Kookee, а на вас — два-три тонких маршрута на раздел, собранных из компонентов, которые у вас уже есть. Создайте проект, опубликуйте тестовый пост и сделайте первый вызов list — дальше всё пойдёт само.