Saltar al contenido
weekly31 de mayo de 2026·6 min

La semana en que sixsevenapps.com aprendió a contarse a sí misma

Analytics, /stack, /roadmap y un cron que se rompía con worktrees sucios: la semana en que sixsevenapps.com dejó de ser un folleto. Mientras tanto Chordna mató alucinaciones, Ganga24 limpió el hero y SOFI dejó de gritar recordatorios atrasados a las 8 de la mañana.

Una semana de esas en las que el portfolio entero se mueve a la vez y la web corporativa por fin deja de parecer un folleto.

El gancho: hasta el lunes pasado, sixsevenapps.com era una vitrina bonita y muda. No sabíamos quién entraba, qué clicaba, ni si los enlaces a Hezu o Ganga24 servían para algo. Esta semana hemos cerrado esa brecha — y de paso hemos roto el cron del journal por dejarnos un worktree sucio, así que también va incluido el momento de comedia.

sixsevenapps: de folleto a sitio con telemetría

Cuatro PRs encadenados (FEAT-005, 006, 008, 009) que cuentan una sola historia: convertir la home en algo medible y con caminos de salida monetizables sin pasarse de pueblo.

FEAT-005 mete la fontanería de analytics. GA4 con Consent Mode v2 default denied, Cloudflare Web Analytics (cookieless, gratis, suficiente para tráfico bruto) y un banner de cookies propio porque no íbamos a meter un Cookiebot de 30€/mes en una web de cinco páginas. La parte interesante a nivel técnico es que el banner controla el consent mode antes de que GA4 cargue: nada de tracking hasta opt-in explícito, y Cloudflare hace de red de seguridad para métricas básicas que no necesitan cookies. Un detalle que un dev disfruta: el helper lib/tracking/ga4Event.ts es la única vía para emitir eventos custom, así nadie hace gtag() suelto desde un componente y todos los eventos quedan tipados en un sitio.

FEAT-006 añade UTMs y eventos GA4 a todos los CTA outbound. Ahora cuando alguien clica "Probar Ganga24" desde la home, sabemos de dónde vino, qué versión de la card vio y si convirtió. Sin esto, optimizar la web era pintar a ciegas.

FEAT-008 estrena /roadmap y un footer expandido. El roadmap no es un PowerPoint de "visión 2030": es una página con lo que hay en curso, lo que sigue y lo que descartamos. Cero hype, fechas relativas cuando aplican, y enlaces a los specs públicos. Si decimos "Q3" lo decimos con asterisco.

FEAT-009 mete /stack — la página donde explicamos qué herramientas usamos por dentro (Next.js, Cloudflare Pages, Postgres compartido, PM2, Claude Code) y cuáles tienen enlace de afiliado. Importante: con disclosure visible al principio de la página, no sepultado en un footer. Si te llevamos a Cloudflare con un enlace nuestro, lo dices. No es magia legal, es no ser turbio.

Y el momento honesto de la semana: el cron del journal (chore(journal): generate ...) se rompió porque hacía git checkout main con cambios sin commitear de FEAT-009 en el worktree. Resultado: tres días sin entradas (25-28 may). El fix (98807dfc) es un git stash defensivo antes del checkout. Pequeño, feo, necesario. Lección: cualquier cron que cruce un worktree compartido debe asumir que el árbol está sucio.

Chordna: matando alucinaciones a fuego lento

Si Chordna inventa que una canción habla de algo que no habla, la enciclopedia musical deja de ser enciclopedia y se convierte en fanfic. Esta semana hemos atacado eso en tres frentes.

FEAT-007B introduce un prompt de "citation-or-silence": si el modelo no puede citar la fuente del dato, no lo escribe. Punto. Es la regla más barata y la que más reduce ruido en contenido evergreen.

FEAT-027 monta un dossier de ground-truth + un LLM-judge en modo log-only. Es decir: no bloqueamos publicación todavía, pero cada pieza generada queda evaluada contra hechos verificables y registramos la divergencia. Cuando tengamos suficiente señal, ese log se convierte en gate. Mientras tanto, métricas reales sin freno operacional.

FEAT-028 llena huecos del catálogo evergreen (artistas con poca cobertura) y FEAT-029 trae generación nativa vía Claude Max, que nos permite probar otro generador sin tocar el pipeline de Gemini — que sigue siendo el por defecto del cron semanal, ahora pinado explícitamente a generator='gemini' (commit 020235af) porque cuando metes dos generadores en el mismo cron lo último que quieres es que un default cambie sin avisar y descubrirlo el lunes por la mañana.

De regalo: la home pasa a un grid dinámico de 24 canciones (7e35d1de). Pequeño, visible, mejora el descubrimiento sin tocar nada del motor.

Ganga24: limpieza de hero y email como ciudadano de primera

Dos hotfixes de usabilidad el domingo (PRs #49 y #50): CTAs del hero más claros, logos de retailer fuera de las offer cards (eran ruido visual y a veces problema legal según el retailer). El cambio gordo es FEAT-037: rebrand del newsletter + nuevo CTA en home + flujo "unsubscribe → preferencias" en vez de baja dura. Cuando alguien quiere darse de baja, le ofreces ajustar frecuencia o categorías antes de borrarse del todo. Es de manual de retention, pero hay que implementarlo.

Y FEAT-030: UTMs en toda la web de ganga24.es, gemelos espirituales de los que metimos en sixsevenapps esta misma semana. Ahora vemos qué canal trae qué tipo de tráfico, no "viene de Google" como toda la vida.

SOFI: el día en que dejó de gritar a las 8 AM

El bug más doméstico y más feo: el morning summary listaba recordatorios atrasados de días anteriores, así que empezabas la mañana viendo lo que no habías hecho. Hotfix D2 (PR #81): los overdue ya no aparecen en el resumen matutino. Si quieres verlos, los pides.

El resto de la semana en SOFI ha sido FEAT-026 Mejoras 1 y 2: check-in vespertino que repasa los eventos reales del día (no plantillas genéricas) y sugerencias contextualizadas para hablar con los niños sobre esos eventos. La parte técnica con la que un dev se entretiene: hubo que escapar el % en los LIKE del checkin_service porque psycopg2 lo interpretaba como placeholder y rompía las queries (9fe5b76a). Bug clásico, dolor real, fix de una línea.

También hubo lío con el extractor de fechas relativas: "el martes" estaba perdiendo contra "hoy" cuando el usuario decía "recuérdame el martes hoy a las 5". Ahora el día de semana gana. Mejor que mil tests sintéticos: una conversación real que falló y se arregló.

Cierre

Cuarenta y ocho commits, cuatro productos moviéndose y un cron que tropezó con sus propios cordones. Sigue siendo más interesante construir cosas que tuitear sobre ellas.