Developers
Content
El dueño cambia el sitio desde el chat. Tu app lee esos datos con una clave de lectura — sin un panel paralelo ni un CMS aparte.
Qué es
Cada sitio Guaso guarda textos, páginas y listas en entradas. Una entrada es un paquete de datos con un nombre (la key): por ejemplo pages/home es la home. El dueño escribe por chat; tu app solo lee.
El package @guaso-ai/content es el cliente HTTP para leer esas entradas en el server. No escribe, no abre la base, no corre en el browser. Si querés pintar bloques en la página, eso es el kit de piezas @guaso — andá a Blocks.
Instalar
Para qué. Deja el cliente en tu Next. Después lo usás solo del lado del server.
npm i @guaso-ai/contentTambién en npm (@guaso-ai/content@0.14.0)(abre en una pestaña nueva).
Uso mínimo
Para qué. El camino más corto: armás el cliente con el ID del sitio y la clave de lectura, pedís la home, y si viene vacía no inventás texto.
import { createClient } from "@guaso-ai/content"; const client = createClient({ siteId: process.env.GUASO_SITE_ID!, token: process.env.GUASO_CONTENT_TOKEN!,}); const home = await client.getEntry("pages/home");if (home.empty) { // no hay datos: no inventes copy} const batch = await client.getEntries(["pages/home", "pages/about"]);
createClient arma el cliente. Corrélo solo en el server: una página del App Router sin "use client", o un route handler. getEntry / getEntries te devuelven { data, empty }. Si la key no existe, { data: null, empty: true } y HTTP 200 — no es un error.
Si tu API no es la de producción, GUASO_API_BASE apunta a otra base (por default https://api.guaso.link). Cuando el dueño cambia algo, tu hosting se entera por un webhook de revalidate: el contrato no asume Vercel.
Dónde van las claves
Las claves del link de una sola vez van en el hosting de tu sitio (Vercel, Railway o el .env del server), no en Guaso.
- Clave de lectura →
GUASO_CONTENT_TOKEN. El ID del sitio que el dueño ya recibió por chat →GUASO_SITE_ID. Las usacreateClient(arriba). - Clave para que tu web se entere →
REVALIDATE_SECRETen el endpoint de revalidate que el dueño nos pasó.
Keys reservadas vs custom
En un sitio con hosting propio hay dos familias de keys. El dueño edita todo por chat; tu Next lee con getEntry. Un catálogo propio (máscaras, lo que sea) es un ejemplo de consumidor — no un esquema fijo de Guaso.
No se registran
Reservadas
Prefijos pages/ y config/.
Ya existen. El dueño las edita con las funciones de página y branding del chat — no hace falta pedirlas.
El front lee, por ejemplo, pages/home, config/branding.
Por chat
Custom
El dueño las pide en humano: “quiero un catálogo de máscaras”.
Quedan como colección: una lista. Cada ítem tiene slug (el id estable) y name (el nombre que ve la gente).
Después el dueño da de alta o edita ítems por chat, con el mismo tono que un catálogo de tienda.
Tu app lee la key exacta con el SDK. No hay editor de código ni campos libres: no asumas cosas tipo maskType. El contrato de chat es slug + name.
Para qué. Cómo leer un catálogo propio. Si viene vacío, devolvé null — no rellenes la sección con texto de muestra.
// Ejemplo: un catálogo propio (máscaras, lo que sea). La key la registró el dueño por chat.const masks = await client.getEntry("products/masks"); if (masks.empty || !Array.isArray(masks.data) || masks.data.length === 0) { return null; // lista vacía: no inventes copy} return masks.data; // ítems { slug, name, … }
Solo en el server
El package se niega a correr en el browser. Si lo importás desde un componente con "use client", el build se rompe a propósito. En Node, Vite o tests también tira si hay window.
Para qué. Un guard de ESLint opcional, copy-paste. npm i no deja ESLint armado: si lo querés, lo pegás vos. El mensaje habla de Server Components (páginas sin "use client") y de no filtrar el token al browser.
// eslint.config.mjs — opcional; npm i NO lo aplica solo{ files: ["**/components/**/*.{ts,tsx}"], rules: { "no-restricted-imports": [ "error", { paths: [ { name: "@guaso-ai/content", message: "Server-only: importá desde RSC / route handlers, nunca desde Client Components. Token ⛔ NEXT_PUBLIC_*.", }, ], }, ], },}
Código fuente
El código del cliente vive fuera de este repo, en guaso-content:
github.com/guaso-ai/guaso-content(abre en una pestaña nueva)Relacionado
- Blocks — el kit de piezas de la página.
- Para tu agente — el archivo de texto para Cursor, v0 o ChatGPT.