# Guaso site (template / fork / BYO) Slots = schema. Copy = Neon/chat. ⛔ JSX por cliente. ⛔ instanciar un bloque cuyo type no esté en schema["blocks"]. Este archivo es el contrato de arquitectura del sitio. No es marketing. - Marketing GEO: https://guaso.link/llms.txt - Pack público (mismo texto): https://guaso.link/docs/llms.txt - SDK content: https://github.com/guaso-ai/guaso-content/blob/main/llms.txt - Kit blocks: https://github.com/guaso-ai/guaso-blocks/blob/main/llms.txt ⛔ duplicar shapes del SDK o del kit acá; apuntá, no copies. ## Invariantes - Slots de UI = schema del template. Copy vive en Neon (content_entries) y se edita por chat. - ⛔ hardcodear copy del dueño en JSX. ⛔ generar markup por cliente. - Keys pages/ y config/ reservadas (skills de página/config). Custom = register_content_keys (add-only) + CRUD de colección. BYO/Mandinga es consumidor, no schema hardcodeado. - IA edita content/** + guaso-config.json. src/ = BLOCKED_PATHS (layout, middleware, getters, package.json, next.config, drizzle/, scripts/, …). - SDK @guaso-ai/content es server-only. Token ⛔ NEXT_PUBLIC_*. Empty-clear: key ausente → { empty: true }. - UI de bloques: kit @guaso — BlockZone + 5 tipos (RichSection, Gallery, Cards, Testimonials, CTA). type desconocido → se ignora. ⛔ meter UI en el package de content. - Write Neon → revalidate tag content (sub-segundo). Cambio de guaso-config.json o src → rebuild. - Tokens semánticos (text-foreground, bg-primary, border-border, font-heading). ⛔ hex en className. - URLs de bloques: safeHref / SafeLink. ⛔ href={data.cta_url}. ⛔ next/image fuera de SafeImage. ## Agente en este clon Desde guaso-app (no desde este repo): python scripts/template_flow.py setup --issue python scripts/template_flow.py verify Nunca sobre main. Nunca sobre un clon atrasado vs origin/main. Slim local: AGENTS.md (este repo).