Kookee est un backend de contenu : vous rédigez articles de blog, entrées du journal des modifications, articles d’aide, pages et annonces dans un seul tableau de bord, et votre application les récupère en JSON pour les afficher avec vos propres composants, sur votre propre domaine. Ce pas-à-pas part d’un projet vide et aboutit à trois espaces de contenu en ligne, avec le SDK TypeScript. Si votre framework sait récupérer du JSON et faire le rendu côté serveur (Next.js, Astro, Nuxt, SvelteKit, TanStack Start), tout s’y transpose directement.
1. Créez un projet et récupérez vos identifiants
Inscrivez-vous (le forfait gratuit ne demande pas de carte bancaire et inclut les modules blog, journal des modifications et centre d’aide), créez un projet et notez deux identifiants :
ID du projet — peut figurer sans risque dans le code exécuté par le navigateur ; il lit le contenu publié, comme la clé API. Il ne fonctionne que tant que le portail hébergé du projet est activé ; sinon, l’API répond 403
PORTAL_NOT_ENABLED.Clé API — fonctionne pour tous les projets, sur vos serveurs comme dans le navigateur. Elle ne lit que le contenu publié, mais tout ce qui part vers un navigateur est visible des visiteurs : limitez-la donc à vos domaines avec les origines autorisées du projet.
La règle simple : apiKey partout, restreinte par les origines autorisées dès qu’elle arrive dans un navigateur ; projectId dans le code du navigateur seulement tant que le portail hébergé reste activé.
Rédigez dès maintenant dans le tableau de bord un brouillon d’article de blog, une entrée du journal des modifications et un article d’aide, puis publiez-les : vous voulez de vraies données au bout de votre première requête.
2. Installez et initialisez le SDK
npm install @kookee/sdk
import { Kookee } from '@kookee/sdk';
export const kookee = new Kookee({ apiKey: process.env.KOOKEE_API_KEY });
Le SDK est pensé d’abord pour TypeScript, sans dépendance et compatible avec le tree-shaking ; chaque méthode de lecture accepte un AbortSignal. Instanciez-le une fois dans un module partagé et importez-le depuis les loaders de vos routes.
3. Le blog : liste et détail
Deux routes. La page de liste :
const { data: posts } = await kookee.blog.list({ page: 1, limit: 10 });
Chaque résumé contient le titre, le slug, l’extrait, les tags et les horodatages, de quoi construire des cartes. La page de détail récupère l’entrée complète par son slug :
const post = await kookee.blog.getBySlug(slug);
Les réponses de détail incluent le HTML du corps déjà rendu, ainsi que les champs SEO saisis dans l’éditeur : l’en-tête de votre document découle donc de la même requête (titre, meta description, URL canonique tirée du slug, image OG). Si getBySlug ne trouve rien, renvoyez une vraie 404.
Les pages de tag utilisent le même appel de liste avec tags: ['news'] ; un champ de recherche, c’est list({ search: query }) ; kookee.blog.getTags() vous donne le nuage de tags avec leurs compteurs.
4. Le journal des modifications
Même structure, avec des catégories typées :
const { data: entries } = await kookee.changelog.list({ page: 1, limit: 20 });
const features = await kookee.changelog.list({ filter: { changelogType: 'feature' } });
Les entrées portent un type (feature, fix, improvement, breaking, security, deprecated ou other) et une version facultative : votre interface peut afficher des badges et des filtres sans inventer de convention. Les réactions tiennent en un appel, si vous voulez un retour léger sur vos versions :
await kookee.changelog.react(entryId, { reactionType: 'fire', action: 'add' });
5. Le centre d’aide : catégories, articles, recherche sémantique
Trois requêtes couvrent les routes :
const categories = await kookee.help.categories();
const articles = await kookee.help.list({ category: 'getting-started' });
const article = await kookee.help.getBySlug('reset-your-password');
Ce qui distingue ce module, c’est la recherche, qui est sémantique : elle compare le sens et non les mots-clés, et renvoie le passage trouvé pour que vous puissiez montrer pourquoi chaque résultat est remonté :
const results = await kookee.help.search({ query: 'débité deux fois ce mois-ci', limit: 5 });
// results[i].title, results[i].matchedChunk
Quand votre base d’articles est prête, le même contenu alimente des réponses d’IA : kookee.help.chat renvoie des réponses fondées sur vos articles, avec leurs sources, et chatStream émet des deltas pour une interface en streaming. C’est la fonctionnalité d’IA au compteur du forfait gratuit (50 réponses par mois pour commencer), et elle ne demande aucune intégration supplémentaire : les articles que vous venez de publier forment le corpus.
6. Raccourcis React, si c’est votre stack
@kookee/react regroupe tout cela dans des hooks : useBlogPosts, useBlogPost, useChangelog, useHelpCategories et useHelpSearch (avec debounce, à brancher directement sur un champ de saisie). Chacun renvoie { data, isLoading, error }, avec une pagination via loadMore. Faites le rendu côté serveur avec le loader de votre framework et passez le résultat en initialData pour que le premier affichage soit complet. Pour le corps des entrées, <EntryContent entry={post} /> affiche le HTML de l’entrée, avec une feuille de style pour les blocs de code que vous pouvez importer dans une cascade layer Tailwind.
Depuis la version 1.9.0, le package fournit aussi des composants rendus côté serveur pour les trois espaces ; voir Composants React pour votre blog, votre journal des modifications et votre centre d’aide.
7. Ce que vous obtenez sans écrire plus de code
Un portail hébergé sur
your-project.kookee.dev— tableau de retours, feuille de route, journal des modifications et centre d’aide en ligne dès que vous activez « Activer le portail public » sur la page « Portail public » du projet. C’est utile tant que vos propres routes sont en chantier (les pages du portail sont en noindex : elles ne concurrencent jamais votre domaine dans les moteurs de recherche).Les traductions : chaque type de contenu accepte un paramètre
locale, avec des langues de repli par projet, quand vous passez au multilingue.Commentaires et réactions dans tous les modules, modérés depuis le tableau de bord.
Un serveur MCP, pour que les agents et assistants IA puissent chercher, lire et rédiger votre contenu, avec un jeton personnel pour chaque membre de l’équipe, en lecture seule sauf si vous en décidez autrement.
L’après-midi, poste par poste
En étant réaliste : configuration du projet et premiers contenus, une demi-heure ; routes du blog, une heure ; journal des modifications, une demi-heure ; centre d’aide avec recherche, une à deux heures ; câblage des métadonnées de l’en-tête, une heure. Les 100 000 requêtes API mensuelles du forfait gratuit couvrent largement le trafic rendu côté serveur d’un petit site, et vous ne payez rien tant que vous ne les dépassez pas.
Ce qui rend tout cela rapide, c’est le principe même du produit : Kookee s’occupe de la rédaction, du stockage, de la recherche et de la diffusion ; vous gérez deux ou trois routes légères par espace, construites avec les composants que vous avez déjà. Créez le projet, publiez un article de test et faites le premier appel list : le reste en découle.