expression.
Editor editorial colaborativo
expression lleva la maquetación editorial profesional al navegador y le suma lo que a las herramientas de escritorio les falta: trabajo en equipo real. Cada "nodo" de un pliego se reparte a su responsable, que edita solo lo suyo sin tocar el resto; el flujo va de borrador a publicado con briefings, deadlines e historial siempre a la vista.

El problema
La maquetación de revistas vive en software de escritorio (InDesign, Affinity) pensado para un único diseñador. Pero el trabajo de una redacción es coral: editores, redactores y diseñadores tocan partes distintas del mismo pliego, con deadlines y un flujo de aprobación. Ninguna herramienta cubre ese cruce.
El hueco de mercado
Las herramientas de escritorio (InDesign, Affinity) son mono-usuario; las colaborativas (Docs, Figma) no son editoriales. Hoy no existe una herramienta enfocada en lo editorial que permita un trabajo a la vez tan granular y tan colaborativo. expression ocupa exactamente ese cruce.
La solución
expression es un editor editorial colaborativo de pliegos que corre en el navegador. Maquetación profesional —páginas maestras, columnas, línea base, estilos de párrafo y de carácter, texto enriquecido e imágenes— con un flujo de redacción encima: briefings, deadlines, estados editoriales y compartir por nodos. En tiempo real y sin instalar nada.

Todo lo que incluye
- ✓Maquetación por pliegos con páginas maestras multipágina
- ✓Columnas con medianil y rejilla de línea base (6pt)
- ✓Texto enriquecido (TipTap / ProseMirror)
- ✓Estilos de párrafo y de carácter reutilizables
- ✓Efectos de capa: blur, ruido, modos de fusión
- ✓Multi-selección, grupos y smart guides con imantado
- ✓Compartir por nodo con permisos (ver / comentar / editar)
- ✓Flujo editorial con estados que bloquean la edición
- ✓Briefings por asignación y deadlines siempre visibles
- ✓Checkpoints e historial (undo/redo)
- ✓Export PDF vectorial fiel al editor
- ✓Login sin contraseña y vista de nodo en móvil
El diferenciador: compartir nodos airtight
Cuando compartes el enlace a un solo grupo del pliego, el invitado no recibe el resto del documento — ni siquiera por la red. La frontera de seguridad no vive en la UI sino en la base de datos: funciones SECURITY DEFINER validadas por token proyectan solo ese nodo en lectura y fusionan solo ese nodo de vuelta en escritura.
Filtrar en el cliente no basta: el documento completo viajaría igual. Por eso la proyección y el merge scoped viven en Postgres — cada colaborador edita su nodo y nada más.


Permisos como experiencia
Antes de compartir, el dueño simula el rol (editar / ver / comentar) y puede "aislar" un grupo: un spotlight oscurece y desenfoca el resto del lienzo para ver exactamente lo que verá el colaborador. Los permisos se sienten, no solo se configuran.

El flujo de una redacción
Cada grupo es una asignación con su briefing —ángulo, responsable, temas, ideas y deadline— editable en el inspector. Los estados editoriales (Borrador → Revisión → Corrección/Aprobado → Publicado) bloquean la edición cuando toca, y un temporizador de deadline siempre visible cambia de color según la urgencia.

Geometría editorial, no píxeles
Un pliego no se mide en píxeles sino en pulgadas y puntos (línea base de 6pt, estándar de 72pt por pulgada). expression construye un modelo geométrico propio —área de contenido, columnas con medianil, rejilla de línea base— y deriva de él los puntos de imantado: mover una caja pega a columnas, a la línea base y al punto medio entre líneas.
Export PDF vectorial
El PDF no es una captura: es vectorial e idéntico al lienzo. Una ruta de servidor lanza Chromium headless sobre la propia página de impresión —reenviando las cookies de sesión— y espera a que fuentes e imágenes estén listas antes de generar el archivo. El mismo código corre en local (Chrome del sistema) y en Vercel (@sparticuz/chromium).

Una marca que se dibuja sola
La identidad de expression es un único trazo continuo que fluye como una tubería con color y morfa entre figuras del dominio editorial —texto, página, pluma, lápiz, cursor. Cada figura se resuelve con splines propios y sus límites matemáticos: un mini-reto de geometría aparte.

El stack
Next.js 16 (App Router) y React 19. Estado con Zustand + zundo (undo/redo) y persistencia; texto rico sobre TipTap/ProseMirror. Backend Supabase: Postgres con migraciones versionadas, Auth (magic link), Storage y RPC SECURITY DEFINER para compartir. PDF con Puppeteer + @sparticuz/chromium. Todo el documento es JSON puro, lo que dejó construir el editor local-first y conectar el backend al final sin reescribirlo.
Cómo se construyó
- Modelo y editor de canvas
Documento como JSON puro + frames con drag/resize y snapping a columnas y línea base.
- Tipografía InDesign
Páginas maestras, estilos de párrafo y carácter, texto enriquecido con TipTap.
- Grupos y permisos como experiencia
Multi-selección, grupos, simulación de rol y aislar nodo con spotlight.
- Flujo editorial
Estados que bloquean la edición, briefings por grupo y deadlines siempre visibles.
- Backend Supabase
Auth, persistencia cloud, Storage de imágenes y enlaces de compartir por token.
- Compartir nodos airtight ⭐
Proyección y merge scoped en la base de datos: el invitado nunca recibe el resto del documento.
- Export PDF y marca generativa
PDF vectorial con Chromium headless y la identidad de trazo único.
Resultado
expression nació como la herramienta interna de la propia revista del autor y, tras validarse en producción real, se abre ahora a la comunidad como SaaS —gratuito por ahora. No es una demo: es una herramienta en uso, con el flujo de una redacción real por dentro.