Visual Editing en Sanity.io: Live Previews y Content Source Maps para Editores

Visual Editing en Sanity.io: Live Previews y Content Source Maps para Editores

Programación· 7 min de lectura

El 90% de los Equipos Implementa Visual Editing en Sanity Como si Fuera un Extra

Los editores abren Sanity Studio. Cambian un título. Guardan. Esperan. Revisan el frontend.

Repetir.

La mayoría trata el Visual Editing como un plugin opcional, no como el flujo de trabajo central que define si un editor trabaja en 5 minutos o en 45.

Si vuestros editores están pegando URLs de preview en nuevas pestañas, tenéis un problema arquitectónico. No un problema de configuración.

El Visual Editing real no es un toggle. Es una cadena de sistemas que trabajan juntos: live preview, content source maps, y resolve production doc.

Por Qué Vuestro Visual Editing Actual Es una Mentira Funcional

La mayoría de implementaciones de Visual Editing fracasan en un punto específico: separan el contenido del contexto visual.

Cuando un editor pulsa sobre un bloque en el frontend, espera que Sanity abra ese documento exacto en el Studio. No un flujo genérico. No un modal genérico. El documento específico que corresponde a ese componente en esa página.

Lo que hace la mayoría:

  • Configuran un endpoint /api/preview genérico
  • Crean un component resolver que devuelve el primer documento que coincide
  • El editor pulsa en un botón de "Open in Studio" que abre la home del CMS

Lo que debería hacer:

  • Content source maps que vinculan cada nodo en el frontend con su documento en Sanity
  • Un sistema de navegación bidireccional: Studio → Frontend Y Frontend → Studio
  • Resolvers que usan contexto de ruta para encontrar el documento exacto

El error más común es confundir "live preview" con "iframe con secret token". Live preview significa que cada cambio se refleja en tiempo real en el viewport del editor. Sin recargas. Sin cache. Sin fricción.

El Patrón de los Tres Nodos para Visual Editing Efectivo

La arquitectura de Visual Editing efectiva en Sanity sigue un patrón de tres nodos interconectados:

Nodo 1: Presentation Layer (El Frontend)

El frontend necesita exponer su estructura de componentes de forma que Sanity pueda entenderla. Esto se hace mediante content source maps, que son esencialmente un mapa que conecta cada elemento renderizado con su referencia en el schema de Sanity.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop
[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

El componente VisualEditing se monta una sola vez y permanece activo mientras el editor navega. Cada vez que se cambia de ruta, el componente sincroniza automáticamente el documento correspondiente.

Nodo 2: Resolution Layer (El API de Preview)

El API de preview es el puente entre el frontend visual y los documentos en Sanity. Su responsabilidad es resolver una URL a un documento específico.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Este resolver es el corazón del sistema. Sin él, Sanity no puede saber qué documento está viendo el editor cuando pulsa en el overlay.

Nodo 3: Navigation Layer (El Botón de Apertura)

El último nodo es la navegación bidireccional. Necesitáis un mecanismo para que cuando el editor esté en el frontend y pulse sobre un componente, Sanity abra exactamente ese documento.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop
[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

El Error que el 90% Commite: Confundir Preview con Visual Editing

Vuelvo al punto inicial porque es donde más equipos fracasan.

Preview es una funcionalidad: montáis un iframe, le pasáis un token, el contenido se muestra sin publicar.

Visual Editing es una experiencia: el editor manipula el contenido como si estuviera en el frontend, ve los cambios en tiempo real, y cuando pulsa "Publish", todo está actualizado.

Implementación incorrecta:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Implementación correcta:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

La diferencia es que en el segundo caso, el componente VisualEditing se monta en el DOM y se comunica con el overlay de Sanity. Cada vez que el editor modifica un campo en el Studio, la query en el frontend se re-ejecuta automáticamente sin recargar la página.

Content Source Maps: La Pieza que el 90% Ignora

Los content source maps son el mecanismo que permite que Sanity sepa qué documentos está renderizando vuestra página en cada momento.

Cuando un componente se renderiza en el frontend, puede annotarse a sí mismo en el content source map. Esto permite que cuando el editor pulsa sobre cualquier elemento visible, Sanity pueda:

  1. Identificar el documento exacto
  2. Identificar el campo específico (no solo el documento completo)
  3. Abrir ese campo para edición en el Studio
[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Sin content source maps, el editor puede abrir el documento correcto pero no sabe qué campo específico corresponde al elemento que ha pulsado. Es la diferencia entre abrir un libro entero o abrir directamente la página 47, párrafo 3.

Live Query: El Detalle que Hace que Funcione

La parte de "live" en live preview es la más importante y la más ignorada.

El sistema funciona con subscriptions GraphQL o con queries GROQ que se mantienen abiertas. Cuando un documento cambia en Sanity, el servidor envía una actualización y el frontend se re-renderiza sin intervención.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

En el frontend, cada componente subscribe a las queries específicas de los documentos que renderiza. Cuando el editor cambia un título, solo ese componente se actualiza. No hay full page refresh. No hay pérdida de estado.

La Métrica que Importa: Tiempo de Iteración del Editor

El objetivo real del Visual Editing no es técnico. Es reducir el tiempo entre que un editor tiene una idea y esa idea aparece en producción.

Un editor sin Visual Editing:

  1. Abre Sanity Studio
  2. Busca el documento
  3. Edita el campo
  4. Publica
  5. Abre nueva pestaña
  6. Navega al contenido
  7. Evalúa el resultado
  8. Vuelve a Studio si no es correcto

Tiempo medio: 3-5 minutos por iteración.

Un editor con Visual Editing:

  1. Pulsa sobre el elemento en el frontend
  2. Edita directamente
  3. Ve el resultado instantáneamente
  4. Publish cuando está satisfecho

Tiempo medio: 30 segundos por iteración.

Eso es una reducción del 85% en tiempo de iteración. Un editor que hace 20 cambios al día pasa de 60-100 minutos de fricción a 10 minutos.

Framework: El Sistema de 3 Capas para Visual Editing en Producción

Basándome en implementaciones que funcionan en producción, os presento el framework que elimina el 90% de los problemas de Visual Editing:

Capa 1: Configuración Central

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Capa 2: API de Resolución Robusto

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Capa 3: Componentes Editables

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Takeaways Clave

→ El Visual Editing efectivo no es un plugin de Sanity. Es una arquitectura de tres capas que incluye preview resolution, content source maps, y live queries.

→ El 90% de implementaciones fracasan porque treat el preview como un iframe, no como un sistema de edición en contexto.

→ Los content source maps son opcionales en el sentido de que el sistema funciona sin ellos, pero esenciales para una experiencia de edición de campo específica.

→ La métrica que debéis medir es tiempo de iteración del editor, no velocidad de load de páginas.

→ El framework de 3 capas (Configuración → Resolución → Componentes) previene el 90% de problemas comunes en producción.

Lo Que Viene

El Visual Editing en Sanity está evolucionando hacia experiencias donde el editor no necesita distinguir entre "modo preview" y "producción". El objetivo es un estado único donde cada documento tiene una URL canónica y se puede editar in-context sin fricción.

Para 2026, esperad integraciones más profundas con frameworks de rendering edge-side donde las queries se ejecutan en el borde, cerca del editor, reduciendo latencia de preview a niveles imperceptibles.

Si vuestros editores siguen usando pestañas separadas y URLs copiadas, no es un problema de adopción. Es un problema de arquitectura. Arreglad la arquitectura primero.

Artículos relacionados

---

¿Quieres recibir contenido como este cada semana? Suscríbete a mi newsletter

Brian Mena

Brian Mena

Ingeniero informatico construyendo productos digitales rentables: SaaS, directorios y agentes de IA. Todo desde cero, todo en produccion.

LinkedIn