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
curly 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.comsirviendo elinstall.shdirectamente.- Rename del repo público a
buildersinabox(sin-installer, que sobraba) y orgsixsevenappslab. - Un detalle pequeño que cuesta dos horas encontrar: el
uninstallresucitaba/var/logporque la funciónlog()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:
- 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.
- 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).
- 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.