Kamaankamaan

CMS headless pour Astro : la configuration REST pour SaaS

Astro se marie avec n'importe quelle API REST. Voici comment Kamaan livre du JSON propre pour votre blog, sans SDK ni schema-as-code, et avec un multilingue inclus.

Junaid Khalid
Junaid Khalid
30 mai 2026 · 12 min read

Vous avez choisi Astro parce que le blog doit être rapide, statique, et libéré du poids des frameworks dont vous n'avez pas besoin. Puis vous avez ouvert le marché des CMS et chaque outil voulait du schema-as-code, une facturation par site, ou un SDK propriétaire qui vous enferme dans une seule plateforme. Voilà le fossé. Astro s'accorde proprement avec n'importe quelle API REST : du JSON standard, fetch(), et getStaticPaths() suffisent. La question n'est pas de savoir quel CMS a le plus beau plugin Astro. La question est de savoir quel CMS offre à Astro un endpoint JSON propre et reste à l'écart à mesure que le produit grandit.

À retenir rapidement

  • getStaticPaths() d'Astro plus un endpoint REST standard, voilà toute l'intégration. Pas de verrouillage SDK, pas de configuration de schéma pour un blog.
  • Kamaan publie le contenu des articles via une API REST JSON standard. Récupérez-le dans Astro comme vous récupéreriez n'importe quelle source HTTP.
  • La configuration depuis un projet Astro neuf jusqu'à un blog multilingue en ligne prend de 40 à 60 minutes pour le premier câblage, le côté CMS arrivant autour des 14 minutes pour le premier article publié.
  • L'Auto-Multilingual Delivery transforme un article anglais en 99+ versions linguistiques avec un hreflang correct, servies sur /es/blog, /de/blog, /fr/blog, /it/blog. Côté Astro, la même route dynamique les affiche.
  • Kamaan est le centre de commande pour chaque blog SaaS que vous opérez, piloté depuis Claude, ChatGPT, Cursor, ou n'importe quel client MCP. Astro reste une fine couche de présentation.

Pourquoi Astro et un CMS headless vont ensemble

Astro livre du contenu en HTML statique partout où il le peut, et ne se rabat sur des routes rendues côté serveur ou récupérées en direct que lorsque le contenu doit vraiment être mis à jour au moment de la requête. Un blog est la charge de travail statique canonique : vous écrivez quelque chose, le moteur le rend une fois, et le sert pendant des années. La Content Layer API a été conçue exactement pour ce cas. Vous définissez un loader qui tire les articles depuis n'importe quelle source, et Astro construit une route par article au moment de la compilation.

Un CMS de blog headless qui émet du JSON standard via HTTP s'adapte à ce modèle sans aucune friction. Vous écrivez un loader, le pointez vers le CMS, et Astro gère le routage, le rendu et le SEO à partir de là. Pas de SDK. Pas de schema-as-code. Pas de langage de requête propriétaire. Si le CMS tombe demain, votre build fonctionne toujours parce que le contenu a déjà été récupéré au moment de la compilation.

L'erreur que commettent la plupart des configurations Astro est de partir d'un SDK opinionnaire. Sanity veut que vous écriviez des schémas en JavaScript. Storyblok livre un modèle d'arbre de blocs qui paraît lourd pour un article de 600 mots. Contentful facture 300 $ par mois pour débloquer le palier de contenu qui correspond au volume typique d'un fondateur multi-produits. Ces outils ont été conçus pour des systèmes de contenu avec des dizaines d'éditeurs et des flux d'approbation, pas pour un fondateur SaaS qui veut un blog en ligne pour vendredi.

Le pattern fetch standard dans Astro

Le pattern est le même que vous utilisiez la Content Layer API d'Astro ou un simple fetch() à l'intérieur de getStaticPaths(). Vous demandez la liste d'articles au CMS, vous construisez une route par slug, et vous passez le corps de l'article comme props.

Vignette du blog Kamaan : CMS headless pour Astro, sous-titre Configuration de blog statique avec un CMS REST API, de zéro à en ligne

Voici à quoi ressemble le fichier de route. src/pages/blog/[slug].astro :

---
export async function getStaticPaths() {
  const res = await fetch("https://api.kamaan.io/v1/sites/your-site-id/articles?language=en");
  const data = await res.json();

  return data.articles.map((article) => ({
    params: { slug: article.slug },
    props: { article },
  }));
}

const { article } = Astro.props;
---
<html lang="en">
  <head>
    <title>{article.meta_title}</title>
    <meta name="description" content={article.meta_description} />
    <link rel="canonical" href={`https://yoursite.com/blog/${article.slug}`} />
  </head>
  <body>
    <article>
      <h1>{article.title}</h1>
      <div set:html={article.content_html} />
    </article>
  </body>
</html>

C'est toute la route. getStaticPaths() s'exécute une fois au build, récupère la liste d'articles, et émet une route par slug. Astro rend chacune en HTML statique au moment de la compilation. Aucun JavaScript côté client n'est nécessaire pour l'article lui-même. Ajoutez la Content Layer API d'Astro par-dessus si vous voulez un accès typé, ou restez sur un simple fetch() si vous voulez zéro abstraction.

Là où les CMS existants échouent pour Astro

Trois modes d'échec reviennent sans cesse lorsque les fondateurs associent un CMS à Astro.

Le schema-as-code est démesuré pour un blog. Sanity attend que vous définissiez un schéma en JavaScript avant de pouvoir créer un seul article. Pour un catalogue commerce structuré, c'est correct. Pour un blog avec un titre, un corps, un slug et une meta description, vous avez passé une heure à configurer des schémas pour faire ce qu'un fichier markdown fait déjà. La Content Layer API d'Astro existe en partie parce que le framework a remarqué ce surcoût et a construit une couche agnostique du CMS.

La facturation par espace pénalise les fondateurs multi-produits. Contentful et Storyblok facturent par espace, ce qui correspond grossièrement à un espace par site. Un fondateur qui fait tourner trois produits SaaS sur Astro paie pour trois espaces avant même d'atteindre une fonctionnalité payante. Les 19 $ par mois en tarif unique de Kamaan couvrent un nombre illimité de sites sous un seul compte, sans frais par site. Un tableau de bord, une facture, tous vos blogs.

Pas de multilingue natif. Ghost n'en a pas. Sanity exige une configuration i18n personnalisée. Contentful facture un add-on par locale. Si vous servez cinq marchés linguistiques, cela représente une part significative de la facture CMS sur l'année. L'Auto-Multilingual Delivery de Kamaan publie une version de chaque article dans chaque langue de votre plan à l'instant où vous appuyez sur publier en anglais, chacune à sa propre URL avec un hreflang correct. Zéro étape supplémentaire.

Configurer Kamaan avec Astro en moins d'une heure

Étape 1 : créez un compte Kamaan et ajoutez un site. Le côté CMS prend environ 14 minutes depuis la création du compte jusqu'à votre premier article publié. Le premier mois est gratuit sur chaque plan, donc vous pouvez câbler tout le pipeline avant de payer quoi que ce soit.

Étape 2 : installez Astro et échafaudez les routes.

npm create astro@latest my-saas-blog
cd my-saas-blog
npm install

Étape 3 : copiez le pattern getStaticPaths() ci-dessus dans src/pages/blog/[slug].astro. Définissez votre site ID Kamaan dans une variable d'environnement. Ajoutez src/pages/blog/index.astro pour lister les articles.

Étape 4 : gérez les routes multilingues. La route dynamique [lang]/blog/[slug].astro d'Astro reflète le pattern d'URL de Kamaan. Récupérez la liste d'articles avec ?language=es, ?language=de, et ainsi de suite. Kamaan retourne le titre traduit, content_html, meta_title, slug et alt text pour chaque langue. Émettez les balises hreflang dans le head de l'article à partir de la carte de traductions de Kamaan.

{article.translations.map((t) => (
  <link rel="alternate" hreflang={t.language} href={`https://yoursite.com/${t.language}/blog/${t.slug}`} />
))}

Voilà l'intégration complète. Build statique, routes multilingues, hreflang émis côté serveur, contenu tiré d'une API REST.

Comparaison : options CMS pour Astro sur les dimensions qui comptent

Le tableau ci-dessous compare la manière dont les CMS headless les plus courants compatibles avec Astro gèrent le temps de configuration, la facturation multi-sites, le support multilingue, la configuration de schéma, la publication par IA, et le tarif mensuel d'entrée.

Comparaison des CMS headless pour Astro : Kamaan vs Sanity vs Storyblok vs Contentful sur l'intégration Astro, le temps de configuration, le multi-site, le multilingue, la configuration de schéma, la publication IA, et le tarif mensuel d'entrée

Dimension Kamaan Sanity Storyblok Contentful
Intégration Astro REST standard + fetch() SDK officiel + langage de requête GROQ Intégration Astro officielle REST ou GraphQL
Configuration premier blog ~14 min côté CMS, 40-60 min de câblage Astro complet ~45 min en incluant la config du schéma ~30 min avec l'intégration ~40 min pour le premier modèle de contenu
Compte multi-sites Sites illimités, tarif fixe de 19 $ par mois Facturation par projet Facturation par espace Facturation par espace
Multilingue prêt à l'emploi 99+ langues à la publication Configurer i18n par schéma Plan par langue Add-on par locale
Configuration de schéma pour un blog Aucune requise Schema-as-code Configuration de bibliothèque de blocs Modèles de contenu
Publication par IA Kamaan MCP Server et ChatGPT Actions Aucune en natif Aucune en natif Aucune en natif
Tarif d'entrée mensuel 19 $ par mois, sites illimités 15 $ par projet sur le palier payant 106 $ par espace 300 $ par mois au premier palier payant

La comparaison ne porte pas sur qui a le plus beau template de démarrage Astro. Elle porte sur quel CMS s'efface quand vous voulez livrer.

Scénarios concrets

Une fondatrice solo construit un SaaS d'outils pour développeurs sur Astro. Elle veut un blog en ligne avant son lancement. Elle crée un compte Kamaan, ajoute son site, écrit son premier article dans le tableau de bord Kamaan, et appuie sur publier. En quelques minutes, l'article est disponible sur api.kamaan.io en JSON. Elle copie le pattern getStaticPaths() dans son projet Astro, déploie sur Vercel, et l'article est en ligne sur yoursite.com/blog/first-post. Temps total de zéro à blog en ligne : moins d'une heure. L'article est automatiquement publié en espagnol, allemand, français et italien sur /es/blog, /de/blog, /fr/blog, /it/blog avec un hreflang correct. Elle n'a pas écrit une seule ligne de code d'internationalisation.

Un fondateur bootstrappé fait tourner trois produits SaaS construits avec Astro. Il a besoin d'un blog sur chacun, mais refuse de payer trois espaces Contentful. Il crée un compte Kamaan, ajoute les trois sites, et utilise la même route getStaticPaths() sur les trois projets Astro avec un site ID différent par projet. Un compte couvre les trois blogs à 19 $ par mois, en tarif fixe. Il pilote toute l'opération de contenu depuis une conversation Claude via le MCP Server de Kamaan : plan, brouillon, édition, publication, changement de site, on recommence.

À lire aussi sur Kamaan

FAQ

Puis-je utiliser la Content Layer API d'Astro avec Kamaan ?

Oui. Écrivez un loader personnalisé qui appelle https://api.kamaan.io/v1/sites/{site_id}/articles et renvoie le tableau d'articles. La Content Layer API gère le cache et la génération de types à partir de là. La forme de la réponse REST de Kamaan se mappe proprement aux entrées de contenu Astro.

Dois-je écrire un schéma avant de pouvoir créer un article dans Kamaan ?

Non. L'Article CMS dans Kamaan est livré avec titre, corps en rich-text, slug, champs meta, image à la une, planification et support des traductions, prêts à l'emploi. Il n'y a aucune étape de configuration de schéma pour un blog. Si vous avez besoin de contenu structuré pour des cas d'usage hors blog, c'est une autre catégorie de produit.

Comment fonctionne le multilingue entre Kamaan et Astro ?

L'Auto-Multilingual Delivery de Kamaan publie une version de chaque article dans chaque langue de votre plan à l'instant où vous appuyez sur publier en anglais. Chaque traduction a sa propre URL sur /{lang}/blog/{slug} avec un hreflang correct. Côté Astro, vous récupérez la liste d'articles de chaque langue avec le paramètre de requête ?language= et construisez une route par langue. Le même pattern getStaticPaths() fonctionne pour chaque locale.

Que renvoie l'API REST de Kamaan pour un build Astro ?

Chaque article inclut title, slug, content_html, meta_title, meta_description, focus_keyword, le tableau keywords, og_title, og_description, twitter_title, twitter_description, featured_image_url, featured_image_alt, language, published_at, updated_at, et une carte translations listant chaque version de langue disponible du même article avec son slug localisé et son URL.

Le build va-t-il casser si Kamaan est temporairement injoignable ?

Si vous compilez avec output: "static" dans votre configuration Astro, le contenu a été tiré au moment du build et le site déployé continue de servir. Les builds futurs nécessitent que Kamaan soit joignable. Pour du contenu en direct qui se met à jour au moment de la requête, utilisez le mode de sortie serveur d'Astro et fetch() à l'intérieur du composant de page au lieu de getStaticPaths(). Kamaan supporte les deux patterns via le même endpoint REST.

Puis-je publier sur Kamaan depuis Claude ou ChatGPT sans quitter la conversation ?

Oui. Le Kamaan MCP Server connecte Claude, Cursor et n'importe quel client MCP. L'intégration ChatGPT Actions fait la même chose depuis ChatGPT. Faites tourner toute votre opération de contenu sans tableau de bord.

Existe-t-il un plugin Kamaan pour Astro Studio ou une plateforme de déploiement Astro ?

L'intégration est du pur REST, donc aucun plugin n'est nécessaire. Déployez votre site Astro sur Vercel, Netlify, Cloudflare Pages, Astro Studio ou n'importe où ailleurs qui exécute Node au moment du build. Kamaan se moque de l'endroit où votre site Astro est hébergé.

Combien coûte Kamaan par rapport aux autres CMS compatibles avec Astro ?

Kamaan est à 19 $ par mois, tarif fixe, sites illimités sous un seul compte, premier mois gratuit. Sanity est à 15 $ par projet sur le palier payant avec une configuration i18n séparée. Storyblok est à 106 $ par espace au premier palier payant. Contentful est à 300 $ par mois au premier palier payant. Sur trois sites avec traduction, la différence est d'environ 15x face à Contentful et de plusieurs multiples face à Storyblok.

Lancez-vous avec Kamaan

Un tableau de bord, chaque blog Astro que vous opérez

Kamaan vous offre un tableau de bord pour tous vos blogs produit, auto-traduits en 99+ langues à chaque publication. Un compte couvre des sites illimités à 19 $ par mois, en tarif fixe. Le MCP Server vous permet de publier depuis Claude ou ChatGPT. Premier mois gratuit.

Commencez gratuitement sur kamaan.io

Frequently asked

FAQ · 8 ITEMS
Puis-je utiliser la Content Layer API d'Astro avec Kamaan ?

Oui. Écrivez un loader personnalisé qui appelle `https://api.kamaan.io/v1/sites/{site_id}/articles` et renvoie le tableau d'articles. La Content Layer API gère le cache et la génération de types à partir de là. La forme de la réponse REST de Kamaan se mappe proprement aux entrées de contenu Astro.

Dois-je écrire un schéma avant de pouvoir créer un article dans Kamaan ?

Non. L'Article CMS dans Kamaan est livré avec titre, corps en rich-text, slug, champs meta, image à la une, planification et support des traductions, prêts à l'emploi. Il n'y a aucune étape de configuration de schéma pour un blog. Si vous avez besoin de contenu structuré pour des cas d'usage hors blog, c'est une autre catégorie de produit.

Comment fonctionne le multilingue entre Kamaan et Astro ?

L'Auto-Multilingual Delivery de Kamaan publie une version de chaque article dans chaque langue de votre plan à l'instant où vous appuyez sur publier en anglais. Chaque traduction a sa propre URL sur `/{lang}/blog/{slug}` avec un hreflang correct. Côté Astro, vous récupérez la liste d'articles de chaque langue avec le paramètre de requête `?language=` et construisez une route par langue. Le même pattern `getStaticPaths()` fonctionne pour chaque locale.

Que renvoie l'API REST de Kamaan pour un build Astro ?

Chaque article inclut title, slug, content_html, meta_title, meta_description, focus_keyword, le tableau keywords, og_title, og_description, twitter_title, twitter_description, featured_image_url, featured_image_alt, language, published_at, updated_at, et une carte translations listant chaque version de langue disponible du même article avec son slug localisé et son URL.

Le build va-t-il casser si Kamaan est temporairement injoignable ?

Si vous compilez avec `output: "static"` dans votre configuration Astro, le contenu a été tiré au moment du build et le site déployé continue de servir. Les builds futurs nécessitent que Kamaan soit joignable. Pour du contenu en direct qui se met à jour au moment de la requête, utilisez le mode de sortie serveur d'Astro et `fetch()` à l'intérieur du composant de page au lieu de `getStaticPaths()`. Kamaan supporte les deux patterns via le même endpoint REST.

Puis-je publier sur Kamaan depuis Claude ou ChatGPT sans quitter la conversation ?

Oui. Le Kamaan MCP Server connecte Claude, Cursor et n'importe quel client MCP. L'intégration ChatGPT Actions fait la même chose depuis ChatGPT. Faites tourner toute votre opération de contenu sans tableau de bord.

Existe-t-il un plugin Kamaan pour Astro Studio ou une plateforme de déploiement Astro ?

L'intégration est du pur REST, donc aucun plugin n'est nécessaire. Déployez votre site Astro sur Vercel, Netlify, Cloudflare Pages, Astro Studio ou n'importe où ailleurs qui exécute Node au moment du build. Kamaan se moque de l'endroit où votre site Astro est hébergé.

Combien coûte Kamaan par rapport aux autres CMS compatibles avec Astro ?

Kamaan est à 19 $ par mois, tarif fixe, sites illimités sous un seul compte, premier mois gratuit. Sanity est à 15 $ par projet sur le palier payant avec une configuration i18n séparée. Storyblok est à 106 $ par espace au premier palier payant. Contentful est à 300 $ par mois au premier palier payant. Sur trois sites avec traduction, la différence est d'environ 15x face à Contentful et de plusieurs multiples face à Storyblok.

Junaid Khalid
Written by
Junaid Khalid

Junaid Khalid is the founder of Kamaan, a headless blog CMS that auto-publishes in five languages and lets you manage every product blog from one dashboard.