Désormais avec création de pages par IA via le serveur MCP

Branding du workspace

Gérez les assets de branding du workspace (logo, favicon, nom de la marque, image Open Graph) et récupérez-les dans votre application Next.js via la gateway cmssy.

Last updated: 14 juillet 2026

Vue d'ensemble

cmssy est headless - votre application Next.js possède tout le style visuel (couleurs, typographie, mode sombre) sous forme de Tailwind/CSS standard dans votre propre dépôt. Ce que cmssy stocke par workspace, c'est le branding : un nom de marque et des assets partagés que vous récupérez et appliquez dans votre site.


Branding du workspace

Le branding vit dans la config de site du workspace. Récupérez-le via la gateway avec votre propre requête GraphQL - createCmssyClient(cmssy).query(...). La config de site est exposée sous public.siteConfig, et les assets se trouvent sur son sous-objet branding :

import { createCmssyClient, type CmssyBranding } from "@cmssy/core";
import { cmssy } from "@/cmssy.config";

const SITE_CONFIG_QUERY = `query PublicSiteConfig($workspaceSlug: String!) {
  public {
    siteConfig(workspaceSlug: $workspaceSlug) {
      branding {
        brandName
        logoUrl
        faviconUrl
        ogImageUrl
      }
    }
  }
}`;

const data = await createCmssyClient(cmssy).query<{
  public: { siteConfig: { branding: CmssyBranding | null } };
}>(SITE_CONFIG_QUERY, { workspaceSlug: cmssy.workspaceSlug });

const branding = data.public.siteConfig.branding;
// CmssyBranding | null - brandName, logoUrl, faviconUrl, ogImageUrl (each nullable)
ChampDescriptionOù l'utiliser
brandNameNom affiché du site / de la marque.Titre de page, metadata, header
logoUrlURL de l'asset du logo.Affichez dans votre header ou footer
faviconUrlURL de l'asset favicon.Branchez dans les icônes de vos metadata
ogImageUrlImage Open Graph / de partage social par défaut.Image OG par défaut pour les pages sans image personnalisée

Chaque champ est nullable - n'affichez que ce qui est défini.

Utiliser le branding dans votre application

Favicon :

import { createCmssyClient } from "@cmssy/core";
import { cmssy } from "@/cmssy.config";

const SITE_CONFIG_QUERY = `query PublicSiteConfig($workspaceSlug: String!) {
  public { siteConfig(workspaceSlug: $workspaceSlug) { branding { faviconUrl } } }
}`;

export async function generateMetadata() {
  const data = await createCmssyClient(cmssy).query<{
    public: { siteConfig: { branding: { faviconUrl: string | null } | null } };
  }>(SITE_CONFIG_QUERY, { workspaceSlug: cmssy.workspaceSlug });

  const faviconUrl = data.public.siteConfig.branding?.faviconUrl;
  return faviconUrl ? { icons: { icon: faviconUrl } } : {};
}

Logo dans le header :

import { createCmssyClient, type CmssyBranding } from "@cmssy/core";
import { cmssy } from "@/cmssy.config";

const SITE_CONFIG_QUERY = `query PublicSiteConfig($workspaceSlug: String!) {
  public { siteConfig(workspaceSlug: $workspaceSlug) { branding { brandName logoUrl } } }
}`;

export default async function Header() {
  const data = await createCmssyClient(cmssy).query<{
    public: { siteConfig: { branding: CmssyBranding | null } };
  }>(SITE_CONFIG_QUERY, { workspaceSlug: cmssy.workspaceSlug });

  const branding = data.public.siteConfig.branding;
  return (
    <header>
      {branding?.logoUrl && <img src={branding.logoUrl} alt={branding.brandName ?? ""} />}
      {branding?.brandName && <h1>{branding.brandName}</h1>}
    </header>
  );
}