Saltar al contenido
weekly14 de junio de 2026·6 min

La semana en que Family Quest pasó de cero a producción (y otras cosas que ardieron en paralelo)

Family Quest nació, se desplegó y se endureció para LinkedIn en cinco días. Mientras tanto, Builders in a Box salió en abierto, Hezu cerró el bucle de retención, Ganga24 estrenó Pixel con feature flag y Sofi se llevó una auditoría seria. 125 commits, ocho repos, una mano sola tecleando.

El lunes no existía. El viernes estaba en producción, hablando dos idiomas, con kill-switch, blocklist y cuota horaria contra Gemini. Family Quest pasó de carpeta vacía a quest.sixsevenapps.com en cinco días, y eso marcó el ritmo de toda la semana: hacer cosas en serio, en abierto, sin esperar a tenerlo perfecto.

Estos siete días pesan 125 commits repartidos en ocho repos. No es maratón por deporte: es que cuando montas una segunda app nueva en mitad de la semana, el resto del catálogo no se pausa solo por consideración.

Family Quest: de PRD a juego jugable en una semana

38 commits, casi todos del 10 de junio en adelante. La cronología, sin maquillaje:

  • Día 1 — scaffold, lógica del juego, tres aventuras, audio, capa opcional de Firebase y AI. Smoke test del flujo completo.
  • Día 2 — backend propio (proxy a Gemini 2.5 Flash + invites + estáticos), gating trial/invite, validación de invite codes en servidor (porque sí, los códigos falsos colaban en el cliente antes de FEAT-001), egg del 67 escondido en el flujo.
  • Día 3 — modos de hide-and-seek, sonido ambiente, sello imprimible, soporte hasta 8 niños, biblioteca de aventuras persistida por invite. Panel admin, cron de backup diario, KPI script, icono PWA real.
  • Día 4 — i18n EN/ES completa, game-first flow, gestión de equipos, retos personalizados con contexto y props del jugador.
  • Día 5 — hardening pre-LinkedIn launch (FEAT-007), Cloudflare Web Analytics sin cookies, footer con switch de idioma, kill-switch manual, IP blocklist y cap horario en Gemini (FEAT-008) por si alguien se entusiasma con curl y la API factura como si no hubiera mañana.

La decisión interesante: backend propio en vez de empujar Firestore/Cloud Run/Auth desde el día uno. Lo evaluamos, lo escribimos en la spec, y dijimos not now. Un Express con invites firmados sirve, escala lo que necesita escalar este mes, y no nos casa con un stack que igual no queremos en seis meses. Decisión discutible, pero documentada.

Builders in a Box: el primer repo público de SixSeven

Nueve FEATs en una semana para sacar a la calle un curl | bash honesto. Cambios concretos:

  • Despersonalización del installer (FEAT-006): nada de rutas con mi nombre dentro.
  • Slim del bundle por defecto + SDD opt-in (FEAT-008). El que quiera el flujo Spec-Driven completo lo activa; el resto se lleva lo mínimo.
  • Pipeline de publish (tools/publish.sh) que mantiene el repo público sincronizado sin filtrar nada interno.
  • buildersinabox.com sirviendo el install.sh directamente.
  • Rename del repo público a buildersinabox (sin -installer, que sobraba) y org sixsevenappslab.
  • Un detalle pequeño que cuesta dos horas encontrar: el uninstall resucitaba /var/log porque la función log() lo recreaba al escribir. Arreglado en FEAT-006.

Hezu: cerrar el bucle de retención

Tres PRs grandes. El más relevante: signup_completed se emitía mal en magic-link, así que el embudo C1 estaba mintiendo. Arreglado. Sumamos welcome-back, UTMs contextuales para share, preselección de edad del peque, follow-up cuando la valoración baja. Email transaccional ahora sale desde hezu@login.hezu.es (la login. no es decoración, es lo que hace que ciertos clientes de correo dejen de marcar el remitente como sospechoso). Y migramos el deploy a Workload Identity Federation, que es la forma moderna de no tener service account keys flotando por GitHub.

Ganga24: Pixel con flag, redirects honestos, AI en Wave 3

Meta Pixel implementado pero detrás de feature flag — no se enciende hasta que tengamos certeza de que el consent banner lo gobierna bien. El redirect ahora valida los destinos de Miravia contra la rotación de item_id, porque a veces el ID que te devolvían apuntaba a un producto que ya no existía y la URL final era un 404 con tracking afiliado encima.

El Wave 3 del categorizador suma keywords, mete few-shot de ofertas ya valoradas en el prompt de Gemini, y añade un filtro de calidad PA API entre la IA y la notificación. Si tu modelo dice "oferta" pero Amazon dice "sin stock, sin foto, sin reseñas", la oferta no sale. Y las notis de Telegram aterrizan ahora en ganga24.es/r/{code} que redirige al producto — URL corta para no romper el preview de Telegram, página real para SEO.

Sofi: la semana del audit fallout

FEAT-028, FEAT-029, FEAT-030 cerradas en bloque: dedupe de recordatorios, calidad agéntica del chat (Waves 2-4), calibración de urgencia en los emails. Y un commit que dice mucho de cómo va la cosa: fix(audit): post-audit fallout 2026-06-14 — agent/format/SQL/cron. Cuando arreglas cuatro categorías de cosas en un solo PR es que la auditoría no fue cosmética. Guardrails en las write-tools del agente, watchdog de Baileys con throttle y estado persistente, lectura correcta de extraescolares_tarde del yaml. Cosas pequeñas, cada una un incidente potencial menos.

Chordna: bajar el ruido, subir la calidad

Pipeline catalogue-only: 50 canciones al día, ventana 1966-2023, solo Claude Max. Menos volumen, más control. Y soft-delete para canciones incompletas — no se borran, pasan a categoría "unpublished" para que no contaminen el catálogo público pero podamos recuperarlas si el dato mejora.

Lo de fondo: el meta-trabajo

En ai-platform se cocinaron tres cosas que cambian cómo trabajamos:

  1. Autonomous FEAT-implementer pilot (dry-run) — un cron que lee FEATs del backlog, decide cuáles puede implementar solo, y prepara el PR. En dry-run aún, pero el rail está montado.
  2. LLM-judge pre-publish gate en Conerator — antes de publicar contenido generado, otro modelo lo evalúa. Hay disclosure de afiliado compliant con el Código de Influencers ES 2025 (sí, eso existe, sí, hay que cumplirlo).
  3. Routing de posts de Slack por dominio — work va a Elena, personal a Yefri. Pequeño, útil, deja de mezclarme el ruido.

Y en SixSeven: Family Quest entró en el catálogo de apps, el /lab se partió en herramientas vs. futuro open-source, y arreglamos un newsletter duplicado en el footer que llevaba puesto desde un merge mal resuelto. Esto último lo cuento porque pasa: a veces lo que envías a producción es lo que te recuerda que mires el footer.

Semana de meter, no de pulir. La próxima toca dejar reposar Family Quest, ver si la gente realmente lo usa, y decidir qué de todo esto sobrevive a un mes sin atención.