El viaje se hace blog
El blog era texto plano que leías una vez y olvidabas. El modo recordar lo convierte en el artefacto del viaje: bloques editables, tus fotos, y un PDF que te puedes llevar.
El blog era texto plano que leías una vez y olvidabas. El modo recordar lo convierte en el artefacto del viaje: bloques editables, tus fotos, y un PDF que te puedes llevar.
El contexto
CamperRoute nació con tres modos: planificar en el sofá, conducir en la cabina, recordar en casa. Los dos primeros ya tenían forma. El tercero era una promesa a medias: al volver, la app te generaba una narrativa del viaje — un texto plano, día a día, escrito por un LLM — y nada más.
Era expositivo sin apropiación. routes.narratives
guardaba un JSONB plano {idioma: {día: "texto"}}: sin
párrafos, sin imágenes, sin poder regenerar un trozo. La
única acción posible era regenerar el día entero. Si
querías tus fotos, abrías Google Photos en otra pestaña.
Si querías recordarlo offline, no tenías nada que
descargar. Lo que debía ser el recuerdo del viaje era un
texto que leías una vez.
La decisión
Convertir el blog en el artefacto final del viaje. Tres capas, sobre una base que ya existía:
- Bloques, no texto plano. La narrativa pasa a content blocks estructurados y se edita con un editor TipTap: slash-menu para insertar, toolbar flotante, y “regenera con IA” sobre la selección — una frase, un párrafo — no solo el día entero.
- Tus fotos. Subida directa del navegador a Cloudflare R2 con URL firmada; un worker saca las variantes WebP y borra el EXIF. Además, un botón para enlazar la galería externa entera (Drive, Photos) sin rehospedarla.
- Un PDF que te puedes llevar. Exportación server-side: un Chromium headless (Playwright) imprime la misma página, en vertical u horizontal, agrupada por día, con mapas e imágenes.
La base es el caché compartido de conocimiento: el contexto de país — idioma, moneda, normativas camper, gastronomía — que encabeza el blog con CTAs temáticos sale de aquí, generado una vez por país y no por usuario.
Por qué un shim y no una migración de golpe. Había narrativas viejas en JSONB plano. En vez de migrarlas todas en un batch arriesgado, una capa de lectura las sirve como un solo bloque
paragraphal vuelo; solo cuando editas el día por primera vez se escribe la versión estructurada. La migración ocurre sola, un día a la vez, y nunca rompe lo que ya funcionaba.
Qué no es
Por ser explícito:
- No es un CMS multi-usuario ni una red social. El blog es tuyo; solo es público si marcas la ruta como pública. Entonces las imágenes van por URL firmada y las claves en R2 son UUIDs no adivinables.
- No es re-traducción automática. Una vez editas el texto, es tuyo: no se vuelve a generar en los otros idiomas. La IA propone; tú tienes la última palabra.
- No es un generador de imágenes. Las fotos son tuyas o de fuentes CC0 referenciadas; nunca rehospedamos imágenes de terceros.
- No es versionado editorial. Hay guardado automático y undo local, pero no un historial de versiones persistido.
Lo que viene
Con el modo recordar se cierra el círculo que abrió el primer post: planificar, conducir, recordar — los tres modos, ahora todos con forma. Y se cierra también la primera serie sobre CamperRoute: por qué tres modos, por qué planificar y conducir son dos cerebros, cómo aparecen los POIs, cómo se detecta una llegada, qué hago con el combustible real, por qué el código vive en tres repos, cómo observo sin espiar, y cómo el viaje acaba haciéndose blog.
Lo que no he explicado — sprints, branches, BMAD como método, identidad de marca, ser un solo dev con un SaaS asistido por IA — espera en una segunda serie. Cuando la empiece, enlazará desde aquí y desde el hub del producto. Gracias por leer hasta aquí.