Commits
Calendario editorial, RSS y etiquetas automáticas
Calendario editorial con generación de lotes por IA, operación (copias diarias,
La mañana ha sido del calendario editorial. Al mediodía, operación: copias de seguridad, RSS y la nueva hoja de ruta. Y de noche, el primer hito de la v3: etiquetas automáticas con artículos relacionados. Tres bloques bien distintos, todo de la misma sesión.
Calendario editorial con generación por lotes
Ya tengo vista mensual con artículos arrastrables de un día a otro: el drag hace un PATCH de publish_at, y los borradores también se pueden arrastrar para programarlos. La pieza fuerte es el generador de lotes con IA: hasta 5 temas × 5 artículos. Propone ángulos, descarta duplicados con embeddings (backfill incluido), escribe cada artículo con keyword + Tavily, le añade backlinks internos y programa uno por día a las 09:00 UTC. El lote corre en un job en segundo plano con progreso, cancelación y errores visibles.
Antes de darlo por bueno, verificación E2E real en producción: 1 tema × 1 artículo. Propuesta generada, dedupe correcto, artículo escrito (1.508 palabras en unos 2 minutos), bloque de "Lecturas relacionadas" insertado y artículo programado para las 09:00 UTC de pasados dos días, oculto al público hasta la fecha. Durante la verificación apareció un fix clásico: el job no importaba ArticleService. Una línea, pero sin ella no hay lote.
Pulido de detalles de uso
La tabla de artículos ahora marca los programados con un badge; el primer intento lo hizo con un punto negro poco discreto, arreglado al momento. Del calendario, el primer uso dejó claro que faltaba trabajo fino: las tarjetas no daban sensación de arrastre. Ahora la tarjeta arrastrada se resalta (opacidad + anillo), el día destino también, puedes soltar una tarjeta sobre Borradores para quitar la programación, y con doble clic se abre un panel con resumen y extracto y acciones directas: editar, ver en el blog, publicar ahora, quitar programación o eliminar.
Operación: copias, RSS y roadmap v3
Roadmap v3 fijado: etiquetas automáticas, multiidioma, RSS y API con webhooks; fuera redes sociales y analítica. De la parte de operación, tres cosas: copias diarias automatizadas con cron en fxserver con retención de 14 días, script de purga de caché de Cloudflare documentado (pendiente de token o regla bypass) y feed RSS público en /rss.xml con los 50 últimos artículos, ya con enlace de autodiscovery en el <head>.
Etiquetas automáticas y lecturas relacionadas
Primera pieza de la v3 desplegada: columna articles.tags en JSONB y etiquetado automático por IA en guardado manual o creación — nunca en autoguardado, y solo si el artículo no tiene etiquetas y ya tiene contenido. Filtro por etiqueta en la tabla admin y en /blog?tag=. En el post público, un bloque de "Lecturas relacionadas" que combina etiquetas compartidas con orden semántico vía el embedding que ya tenía almacenado: cero llamadas de IA en render.
Verificación E2E: guardado manual genera etiquetas reales, backfill manual de 6 etiquetas a todos los publicados existentes, chips visibles en el post, filtro funcionando y el endpoint de relacionados devolviendo 3 artículos con orden semántico correcto. Un fix durante la prueba: el modelo a veces respondía un array suelto en lugar del objeto JSON, y el parser ahora tolera los dos formatos.