Saltar al contenido
weekly03 de mayo de 2026·5 min

La semana que Sofi aprendió a leer PDFs (y nosotros a no usar Claude para todo)

Semana de poda y de cosas que de verdad mueven la aguja: Sofi pasa de resumen diario a sistema de recordatorios con extractor LLM, Chordna estrena auto-análisis nocturno (y nos echamos atrás del Claude CLI a mitad), Hezu suelta blog Eleventy con E-E-A-T en serio, y Ganga24 estrena su propio skill de contenidos.

Una semana de las que dejan poso: 154 commits, cuatro productos avanzando en paralelo y dos decisiones de las que duelen un poco — porque admitir que te has equivocado de modelo a mitad de feature no es lo más cómodo del mundo. Esta es la historia de qué cambió, por qué cambió, y qué se va a notar si eres usuario de alguno de estos cacharros.

Sofi: del resumen al recordatorio (y de ahí al PDF)

Sofi es el proyecto donde más se ha movido la tierra esta semana (92 commits, sí). La tesis sigue siendo la misma: un asistente que lee el ruido del cole (Classroom, WhatsApp, PDFs de menús, correos…) y te suelta dos resúmenes al día con lo que realmente importa. Lo que ha cambiado es que ese resumen ya no vive solo.

FEAT-017 fue la pasada en limpio del prompt y el pipeline de resúmenes — score-based relevance para Classroom, anti-duplicación mañana↔tarde vía summary_items_seen, urgencia calculada en backend (no por el LLM, que mentía bonito), filtro de WhatsApp config-driven con normalización de acentos, y un A/B entre el prompt current y uno más executive para ver cuál tira mejor. También un _is_summary_valid más duro contra leaks de etiquetas internas tipo PRIORIDAD ZERO que se colaban en producción. Si los prompts no se defienden de sí mismos, antes o después un usuario ve el andamio.

De ahí saltamos a FEAT-018, el sistema de recordatorios propiamente dicho: extracción idempotente por (source, source_id), segunda pasada de patrones accionables, fallback Gemini cuando los regex fallan, promoción desde PDFs, y la urgencia del resumen ahora se deriva solo de recordatorios. FEAT-019 lo pulió: títulos legibles, fechas en español ("antes del viernes", "para el día 15"), y el correo se puede promover a recordatorio si el LLM lo cree justificado. FEAT-020 atendió a una queja muy específica: los fines de semana y festivos el resumen era un "hoy no hay cole" pelado. Ahora sugiere planes según el contexto. Pequeño detalle, pero es de los que diferencia un producto que te conoce de uno que te ignora.

Y luego FEAT-021, que es el que más juego va a dar: Sofi ya descarga adjuntos de Drive del cole, los clasifica por propósito con Gemini (informe, autorización, circular, factura…) y te los devuelve por una tool get_pdf_summary. Tuvimos un susto a media implementación — maxOutputTokens=512 se quedaba corto para la clasificación, había que subirlo a 2048. Cosas que solo descubres cuando lo pones contra PDFs reales de 14 páginas.

Chordna: cambio de motor a mitad de carrera

Chordna tenía pendiente automatizar el análisis nocturno de canciones. FEAT-020 lo puso en marcha con un cron que llamaba al Claude Code CLI (Max plan) — fino, funcionaba, y nos permitía exprimir el plan que ya pagamos sin tocar API credits. Lo desplegamos el 1 de mayo.

Al día siguiente, FEAT-020d: vuelta a Gemini Flash. ¿Por qué? Porque tras observarlo en producción, el coste real por análisis y el throughput no compensaban frente a Flash, que es más rápido y predecible para esta tarea concreta (extracción estructurada con prompts cerrados). El Claude CLI brilla cuando hay razonamiento abierto; aquí el trabajo es repetitivo y bien acotado. Una semana entre commit y reversión es lo bastante rápido como para no llamarlo deuda, pero lo bastante incómodo como para apuntarlo: cuando el caso de uso es clasificación con esquema fijo, no metas un modelo de razonamiento. También bajamos batch=3 y podamos APIs ruidosas del contexto del prompt — menos tokens, mismo resultado.

Antes de eso, FEAT-018 cerró el ciclo de integridad de la enciclopedia: filtro de releases canónicos de MusicBrainz, validadores nuevos como quality gate bloqueante (si no pasa, no se publica), traductor ES que preserva los arrays de armonía (un mapa de solfeo dedicado, no a base de string replace y rezar), y backfills para reparar lo que ya estaba mal escrito en Firestore. Y se subió el blog — Eleventy + cron quincenal con Claude Code generando borradores. Top-of-funnel SEO, sin pretensiones.

Hezu: el blog que sí se toma en serio el E-E-A-T

En Hezu salió FEAT-019 completo: blog Eleventy, 6 artículos base + 4 más + 3 spokes P4, traducciones en-US, Lighthouse CI, JSON-LD bien inyectado en el layout (no como meta-tag perdido), canonicals, hreflang, og:image por post, robots.txt endurecido. El detalle que un dev disfruta: una skill hezu-growth y un monitor GEO para detectar cuándo Google reescribe tus snippets, con tripwires si el tráfico cae. Páginas de E-E-A-T (autor, metodología, fuentes) porque sin eso un blog de crianza es ruido más.

Ganga24 y SixSeven: skills propias y un journal que ya rueda solo

Ganga24 cerró un hotfix tonto pero real — el worker de redirect respondía 404 cuando alguien usaba product_id en vez del short code de 6 caracteres. Ahora cae a origin con fallback. Y aterrizó FEAT-022: skill /content-ganga24 para generar slideshows, copys y calendario editorial sin salir de Claude Code.

En sixsevenapps (este repo) la gran novedad es que este journal ya se genera solo. Cron local + Claude CLI con plan Max + voz SixSeven adoptada. Backfill del 21 al 26 de abril y a partir de ahí, automático. También un par de arreglos de fontanería del cron (git pull --autostash en lugar de stash manual, scope correcto de daily vs weekly), que son aburridos pero son la diferencia entre que el cron sobreviva tres meses o reviente el martes.

La lección barata de la semana

No todo merece Claude. No todo merece Gemini. Y a veces lo descubres con la feature desplegada. Mejor revertir rápido que defender una decisión tibia.