Commits

Auto Magazine: de l'esquelet al primer número paginat en una sola jornada

Segona jornada: esquelet desplegat a magazine.escandell.cat, ingesta per hotfolder, extracció per capes, primer prototip maquetat i paginació automàtica a múltiple de 4.

· auto-magazine · milestone

La segona jornada d'Auto Magazine ha estat la més intensa fins ara: hem passat de no tenir res a tenir l'aplicació funcionant en producció, amb el material entrant, els Word convertits en articles i el primer número paginat com una revista de veritat.

L'esquelet i el desplegament

Vam començar per la fase 1: l'esquelet de l'aplicació, reutilitzant el patró de Contenidos_PX_v4 tal com deia la spec. Autenticació amb scrypt, una primera arrencada que demana l'administrador una sola vegada, middleware de sessió amb CSRF i la configuració guardada en una taula de SQLite.

El panell de proveïdors d'IA va sortir del mateix motlle, amb Anthropic i Ollama local sumats al catàleg. Com l'equip local no té Docker, el desplegament va anar directe al servidor, i l'aplicació ja funciona a magazine.escandell.cat amb Nginx Proxy Manager davant. Van caldre tres ajustos que recordarem per a propers desplegaments: els hosts de confiança i el mode HTTPS ara es configuren per .env, el contenidor té el nom estable auto-magazine i viu a la xarxa externa edge, que és on viu el proxy.

El material ja entra i es converteix

La fase d'ingesta va arribar tot seguit: el watcher vigila el hotfolder i sincronitza la base de dades amb el que hi ha físicament — si apareix una subcarpeta es dona d'alta, i si desapareix es borra. La pujada web amb drag&drop crea exactament el mateix que deixar una subcarpeta a mà: un sol camí d'entrada.

Cada .docx es converteix en blocs etiquetats amb dues capes: primer els estils de Word, que no costen cap crida, i només quan el document no porta cap títol per estils entra la IA a etiquetar per índex sense tocar el text. La jornada també va deixar tres correccions que va provocar provar-ho en producció:

  • El panell es veia tot apretat per una CSS cachejada. Ara es serveix amb la data de modificació a la URL i cada desplegament invalida la memòria cau automàticament.
  • El catàleg de proveïdors va sumar Groq i va deixar de donar error 500 quan Ollama Cloud responia amb alguna cosa que no era JSON.
  • Els models de MiniMax no es quedaven seleccionats perquè parse_qs agrupava tots els elements de selecció amb el mateix nom i el codi només es quedava amb el primer valor.

El primer número paginat

Al final del dia va arribar el prototip de maquetació: un número zero sintètic de revista de motor amb portada a sang, editorial, índex viu —on els números de pàgina es calculen sols amb target-counter—, dos articles i contraportada. El tema està definit en YAML com a variables CSS i tenim les capacitats d'impremta actives: sangrat de 3 mil·límetres, marques de tall i folis.

La reacció al prototip va deixar una decisió important: a l'usuari no li agrada la direcció visual, i precisament per això era un prototip. Les plantilles seran HTML i CSS plans, editables a mà, amb un únic contracte: rebre les variables de l'extracció i col·locar-les on es vulgui. Traslladar el prototip dins l'aplicació va ser gairebé copiar i enganxar, i el botó «Maquetar número» ja llança el render en segon pla.

Per acabar, la paginació automàtica: els articles flueixen sense salts forçats i el total s'ajusta al múltiple de 4 del grapat amb la cascada acordada — es mesura el render, es calcula el buit i s'omple primer amb un colofó i després amb pàgines en blanc. El primer intent va calcular l'omplert abans de comptar les pàgines de l'anunci i el test del múltiple el va caçar a l'instant: nou pàgines no quadren en cap plec.

Ara toca la fase d'exportació a impremta, amb el CMYK i el preflight.