Cada vez que le pedía a ChatGPT que me mostrara el mundo del libro, perdía lo que había generado el día anterior
Construí Verso, un lector de worldbuilding que corre al lado del libro que estoy leyendo, porque ChatGPT perdía lo que generaba y no respetaba mi progreso de lectura.
Voy por El Archivo de las Tormentas, de Sanderson — un mundo enorme, con su propia física, su propia fauna, docenas de personajes que se cruzan a lo largo de miles de páginas. Leerlo así, a secas, ya es denso. Lo que quería no era leerlo más rápido: quería ver más de él mientras avanzaba. Cómo se ve un chull. Cómo se ve la armadura esquirlada. Expandir el mundo que el texto ya describe, en vez de imaginármelo solo con palabras.
Llevaba meses intentándolo a mano: el Kindle ocupando 3/4 de la pantalla de la tablet, ChatGPT en el cuarto que sobra, generando una imagen cada vez que quería visualizar algo. Fallaba de dos formas concretas. Lo que generaba un día se perdía en un hilo infinito que no quedaba archivado por capítulo — la próxima vez que quería ver esa imagen, ya no estaba, o estaba enterrada quince mensajes atrás, y tenía que volver a pedirla. Y ChatGPT no sabía en qué página iba: le preguntaba sobre un personaje que acababa de aparecer y me contestaba con todo lo que sabía de él en el libro entero, cosas que yo todavía no había leído.
Las dos fallas venían de lo mismo: cada vez que le pedía algo a ChatGPT, empezaba de cero. No acumulaba nada sobre mi lectura, no sabía dónde estaba, no guardaba lo de ayer para hoy. Quería lo contrario — que el mundo se fuera construyendo capítulo a capítulo, y que se quedara ahí.
Lo que estuve a punto de construir mal
Mi primer instinto fue el obvio: hacer lo mismo, pero mejor integrado — meter un chat de generación dentro de la app. Pido una imagen desde la tablet, se genera ahí mismo, en el momento que la necesito.
Me equivoqué, y me di cuenta a tiempo. Eso seguía siendo exactamente el mismo problema con mejor interfaz: cada imagen sigue siendo un evento aislado que no queda archivado, y el generador sigue sin saber dónde voy en la lectura.
Lo que necesitaba no era generar más rápido. Era tener el material ya ahí: curado capítulo por capítulo, generado con calma antes de leer, esperándome en el momento exacto en que lo alcanzo. Eso significó sacar la generación en vivo de la app por completo. Verso trae un asistente de IA, sí, pero es secundario a propósito — pantalla propia, nunca encima del contenido — y en la práctica casi no lo uso. El trabajo real de generación pasa antes de abrir la app, no dentro de ella.
El nombre
Elegí entre tres candidatos, todos sacados de la anatomía física de un libro: marginalia (las notas al margen), endpaper (las guardas, donde a veces el editor imprime el mapa del mundo), y verso — la página izquierda de un pliego, la que queda justo al lado de la que estás leyendo. Me quedé con Verso. Es literal: así es exactamente como vive en la tablet, al lado del Kindle.
El gate
Todo el diseño gira alrededor de una restricción: nada se me puede revelar antes de que el libro mismo lo revele. Eso significa dos capas de spoiler gate. La primera es de contenido: cada pieza — una entidad, una imagen, una nota — tiene un punto de la lectura donde se desbloquea, y antes de eso aparece sellada, contada pero no nombrada ("3 más sin revelar"). La segunda es del asistente, para el rato en que sí lo uso: mi progreso se le inyecta al system prompt, pero esa capa es frágil — el modelo conoce el libro entero y puede filtrar aunque se lo pida, así que sus respuestas quedan marcadas como no verificadas.
Automaticé una prueba que carga el pack real y revisa, en cada punto posible de lectura — listas, tarjetas, apariciones, buscador — que no se filtre nada posterior. Es la única prueba de esta app que no negocio. Un spoiler no tiene arreglo después de ocurrido.
Esa prueba encontró un bug real antes de que llegara al dispositivo: cinco
entidades tenían su punto de revelación después de su primera mención en
el texto — Kaladin se revelaba en el capítulo 2 cuando el capítulo 1 ya
habla de él. La regla que quedó, ya escrita en el documento de
arquitectura: el reveal de una entidad es su primera aparición, menciones
incluidas. Si el texto la nombra, el lector ya la conoce, aunque la ficha
no se le haya mostrado todavía.
Lo que solo se ve en el dispositivo de verdad
En Expo Go (la app oficial de Expo — expo.dev/go —
para correr tu código directo en un celular real, sin compilar nada) todo
funcionaba. En el APK (el instalador final de una app Android — el archivo
que de verdad se pone en el teléfono, en vez de correr desde la app de
Expo) de verdad aparecieron dos bugs invisibles hasta ese momento. El
primero: el importador de packs usaba File.copy() para traer imágenes
desde una carpeta compartida por Syncthing (sincronización de archivos
entre dispositivos, sin nube — syncthing.net), y
ese método no cruza de una URI content:// a una ruta file:// — "This
method cannot be used with content URIs", y la importación moría en la
primera imagen. El segundo: Android bloquea tráfico HTTP sin cifrar para
cualquier app moderna, así que importar por URL local fallaba con "Network
request failed" mientras la tablet le hacía ping perfecto a la laptop.
Expo Go enmascara los dos — trae su propia excepción para el primero y no
aplica la política del segundo. Los dos solo existían en el mundo real.
Verla funcionar de verdad
La probé primero con un pack de práctica de Drácula — dominio público, para no arriesgar nada mientras el motor no estaba probado. Cuando funcionó, cargué el pack real de El camino de los reyes y seguí leyendo con la app al lado, sin pensar en ella. La primera vez que se sintió terminada no fue viéndola en la laptop: fue de vacaciones, sin Metro, sin laptop prendida, la app corriendo sola en la tablet con el progreso marcado en el capítulo 14, avanzando en cadena con el botón LEÍDO — y el gate no me dejó saltarme nada.
Lo que me llevo
No construí un chat que genera imágenes de mi libro. Construí un lector donde el mundo ya está ahí, capítulo a capítulo, sin que nada se pierda de un día para otro y sin que nada se adelante a lo que todavía no sé. Es opensource — licencia MIT (una de las licencias de software libre menos restrictivas: casi cualquiera puede usar, copiar y modificar el código, incluso comercialmente — opensource.org/license/mit), github.com/andyeswong/verso — porque el motor no tiene nada de Sanderson adentro: es un formato de pack (JSON más una carpeta de media) que sirve para cualquier libro que alguien quiera curar así.
Cómo armar ese material — cómo le pedí a la IA que me ayudara a generar prompts de un mundo que yo no conocía a fondo, y todo lo que probé y descarté antes de llegar a las imágenes que usé — es la parte que de verdad tiene IA adentro, y va en los siguientes dos posts: uno sobre los packs, otro sobre las imágenes.
artículos_relacionados
Diseñé un schema escalable y auditable para los mundos de mis libros. Nunca tuve que cargar un libro completo de una sola vez
Cómo diseñé el formato de packs de Verso — JSON auditable en vez de una base de datos, y un gate de spoilers que se resuelve comparando dos enteros — para que crezca capítulo a capítulo sin arriesgar nada de lo ya leído. Con pack de Drácula descargable de referencia.
Agentes de voz: la voz es lo que menos importa
Le metimos voz en tiempo real al moderador de Quorum. El bug que casi tira el proyecto no fue de audio ni de latencia — fue de memoria, protocolo e idioma. El camino completo, con lo que sirvió y lo que no.
Cuando mis directores no se ponen de acuerdo, no meto una IA que decida. Meto cuatro que los obliguen a decidir
Construí Quorum: una sala de deliberación con IA que fuerza a mi equipo — y a mí — a completar el razonamiento antes de decidir, con una regla dura: nada entra a la memoria de la empresa sin que un humano lo apruebe.
posts_recientes
Diseñé un schema escalable y auditable para los mundos de mis libros. Nunca tuve que cargar un libro completo de una sola vez
1 sept 2026
Agentes de voz: la voz es lo que menos importa
31 ago 2026
Cuando mis directores no se ponen de acuerdo, no meto una IA que decida. Meto cuatro que los obliguen a decidir
31 ago 2026
Me secuestraron un servidor, y la puerta la dejé abierta yo
20 ago 2026