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.

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>
  );
}