Ahora con creación de páginas por IA vía el servidor MCP

Branding del workspace

Gestiona los assets de branding del workspace (logo, favicon, nombre de la marca, imagen Open Graph) y obtenlos en tu aplicación Next.js a través de la gateway cmssy.

Last updated: 14 de julio de 2026

Visión general

cmssy es headless - tu aplicación Next.js posee todo el estilo visual (colores, tipografía, modo oscuro) como Tailwind/CSS estándar en tu propio repositorio. Lo que cmssy guarda por workspace es el branding: un nombre de marca y assets compartidos que tú obtienes y aplicas en tu sitio.


Branding del workspace

El branding vive en la config de sitio del workspace. Obténlo a través de la gateway con tu propia consulta GraphQL - createCmssyClient(cmssy).query(...). La config de sitio se expone bajo public.siteConfig, y los assets están en su sub-objeto 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)
CampoQué esDónde usarlo
brandNameNombre visible del sitio / la marca.Título de página, metadata, header
logoUrlURL del asset del logo.Renderiza en tu header o footer
faviconUrlURL del asset favicon.Conéctalo a los iconos de tus metadata
ogImageUrlImagen Open Graph / de compartir en redes por defecto.Imagen OG por defecto para páginas sin imagen personalizada

Todos los campos son anulables - renderiza solo lo que esté definido.

Usar branding en tu aplicación

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