El viatge es fa blog
El blog era text pla que llegies un cop i oblidaves. El mode recordar el converteix en l'artefacte del viatge: blocs editables, les teves fotos, i un PDF que te'n pots endur.
El blog era text pla que llegies un cop i oblidaves. El mode recordar el converteix en l’artefacte del viatge: blocs editables, les teves fotos, i un PDF que te’n pots endur.
El context
CamperRoute va néixer amb tres modes: planificar al sofà, conduir a la cabina, recordar a casa. Els dos primers ja tenien forma. El tercer era una promesa a mitges: en tornar, l’app et generava una narrativa del viatge — un text pla, dia a dia, escrit per un LLM — i prou.
Era expositiu sense apropiació. routes.narratives
guardava un JSONB pla {idioma: {dia: "text"}}: sense
paràgrafs, sense imatges, sense poder regenerar-ne un
tros. L’única acció possible era regenerar el dia
sencer. Si volies les teves fotos, obries Google Photos
en una altra pestanya. Si volies recordar-ho offline, no
tenies res per descarregar. El que havia de ser el record
del viatge era un text que llegies un cop.
La decisió
Convertir el blog en l’artefacte final del viatge. Tres capes, sobre una base que ja existia:
- Blocs, no text pla. La narrativa passa a content blocks estructurats i s’edita amb un editor TipTap: slash-menu per inserir, toolbar flotant, i “regenera amb IA” sobre la selecció — una frase, un paràgraf — no només el dia sencer.
- Les teves fotos. Upload directe del navegador a Cloudflare R2 amb URL signada; un worker en treu les variants WebP i esborra l’EXIF. A més, un botó per enllaçar la galeria externa sencera (Drive, Photos) sense rehostejar-la.
- Un PDF que te’n pots endur. Exportació server-side: un Chromium headless (Playwright) imprimeix la mateixa pàgina, en vertical o horitzontal, agrupada per dia, amb mapes i imatges.
La base és el cache compartit de coneixement: el context de país — idioma, moneda, normatives camper, gastronomia — que encapçala el blog amb CTAs temàtics surt d’aquí, generat un cop per país i no per usuari.
Per què un shim i no una migració de cop. Hi havia narratives velles en JSONB pla. En comptes de migrar-les totes en un batch arriscat, una capa de lectura les serveix com un sol bloc
paragraphal vol; només quan edites el dia per primera vegada s’escriu la versió estructurada. La migració passa sola, un dia a la vegada, i mai trenca el que ja funcionava.
Què no és
Per ser explícit:
- No és un CMS multi-usuari ni una xarxa social. El blog és teu; només és públic si marques la ruta com a pública. Aleshores les imatges van per URL signada i les claus a R2 són UUIDs no endevinables.
- No és re-traducció automàtica. Un cop edites el text, és teu: no es torna a generar als altres idiomes. L’IA proposa; tu tens l’última paraula.
- No és un generador d’imatges. Les fotos són teves o de fonts CC0 referenciades; mai rehostejem imatges de tercers.
- No és versionat editorial. Hi ha desat automàtic i undo local, però no un historial de versions persistit.
El que ve
Amb el mode recordar es tanca el cercle que va obrir el primer post: planificar, conduir, recordar — els tres modes, ara tots amb forma. I es tanca també la primera sèrie sobre CamperRoute: per què tres modes, per què planificar i conduir són dos cervells, com apareixen els POIs, com es detecta una arribada, què faig amb el combustible real, per què el codi viu en tres repos, com observo sense espiar, i com el viatge acaba fent-se blog.
El que no he explicat — sprints, branches, BMAD com a mètode, identitat de marca, ser un sol dev amb un SaaS assistit per IA — espera en una segona sèrie. Quan la comenci, enllaçarà des d’aquí i des del hub del producte. Gràcies per llegir fins aquí.