Volver a los análisis
Bitácora de desarrollo9 min de lectura

Construyendo BJJ Buddy en directo: una sesión de entrenamiento de Speediance y desarrollo con IA

Una sesión real de domingo: lanzando la autenticación de Supabase en BJJ Buddy, depurando problemas de descarga de GLM 4.7 y completando series de Speediance mientras reviso datos de Whoop y Garmin.

Toby 21 de septiembre de 2026

La respuesta a cómo es en la práctica una compilación asistida por IA es: caótica, paralela y significativamente más útil que una demo pulida. Este pasado domingo, retransmití una sesión en la que el objetivo era doble: migrar el backend de BJJ Buddy de un prototipo exclusivamente local a una realidad sincronizada en la nube, y mantener mi volumen de entrenamiento usando una plantilla Speediance Warrior One. El resultado fue una sesión en la que el cerebro realmente nunca se apaga: estás terminando un set de curls pesados, caminas tres pasos hasta el escritorio y creas prompts para resolver un flujo de autenticación de Supabase fallido antes de que expire el temporizador de descanso.

La compilación técnica: Conectando BJJ Buddy a la nube

BJJ Buddy está evolucionando. Hasta ahora, era un experimento local-first. Esta sesión trataba de hacerlo real para los usuarios conectando Supabase de extremo a extremo. La transición a un backend sincronizado en la nube nunca es tan sencilla como pulsar un botón de 'desplegar'; requiere una re-arquitectura sistemática de cómo fluyen los datos a través de la aplicación.

Los logros principales durante la retransmisión incluyeron:

  • Reforma de la autenticación: Implementación de la autenticación completa por correo electrónico y contraseña. Nos topamos con un tropiezo temprano en el que los correos de creación de cuenta no se estaban enviando; la conexión inicial era silenciosa, lo que nos llevó a depurar la entrega SMTP durante unos minutos antes de darnos cuenta de que el listener no estaba inicializado correctamente.
  • Seguridad a nivel de fila (RLS): En una aplicación de fitness, la privacidad de los datos es primordial. Dediqué una parte significativa de la sesión a escribir y probar políticas de RLS para las sesiones de entrenamiento, las biometrías y las tablas principales del registro de entrenamiento. Esto garantiza que, aunque los datos estén en la nube, un usuario solo pueda interactuar con sus propias filas.
  • El bucle de UI: Desarrollé una vista de inicio funcional, una pantalla de entrada de registro de entrenamiento optimizada y una vista de historial de sesiones. Lo más destacado aquí fue la funcionalidad de 'edición in situ' para sesiones históricas, que permite a los usuarios corregir pesos o recuentos de repeticiones sin tener que salir de la lista de historial.
  • El modo demo híbrido: Era importante mantener un modo demo. Esto permite a los usuarios potenciales explorar la interfaz y registrar sesiones ficticias sin necesidad de registrarse. Construir la lógica que alterna entre el estado local y el estado de Supabase según el estado de autenticación fue un logro clave de la noche.

La parte más interesante de la compilación no fue el código en sí, sino el flujo de trabajo. Tras añadir un flujo de guardado al registro de entrenamiento, noté que faltaba un botón 'cerrar' en el modal de éxito. En lugar de saltar al CSS yo mismo, usé mi stack de IA para encargarse de la micro-tarea. Le pedí a ARIA (mi agente IA principal) que le pasara la tarea a Clarity (un sub-bot local).

Clarity inició una sesión local de Qwen 3 Coder, identificó el div y aplicó el parche. Toda la entrega requirió un único prompt en lenguaje natural y aproximadamente quince segundos de tiempo de ejecución.

La pila de orquestación de IA: ARIA, Clarity y Nova

Mi entorno de desarrollo actual utiliza un sistema que denomino OpenClaw, estructurado como un bot controlador principal con sub-bots especializados. Esta arquitectura está impulsada por una limitación muy práctica: el coste y la eficiencia de tokens. Estaba aproximadamente en 47% de mi uso mensual de la suscripción. Si le pidiera a un modelo de alta gama como Claude 3.5 Sonnet que realizara cada corrección trivial de CSS o cada búsqueda menor de errores, agotaría mi presupuesto a mitad de mes.

En su lugar, utilizo modelos locales para el «trabajo pesado»:

  • ARIA (El Orquestador): El modelo remoto de alto razonamiento que comprende la arquitectura del proyecto y delega tareas.
  • Clarity (El Programador): Un sub-bot local que ejecuta Qwen 3 Coder. Se encarga de las ediciones reales de archivos y la sintaxis.
  • Nova (El Investigador/Depurador): Un bot local que ejecuta GLM 4.7 Flash, utilizado para indagar en la documentación o razonar sobre los registros de errores.

Encontré una limitación de hardware fascinante durante la retransmisión: Nova no dejaba de fallar al cargar. Como GLM 4.7 Flash es un modelo nuevo y más grande, debería caber en la memoria unificada junto a Qwen. Sin embargo, el culpable era un modelo Qwen 3 más pequeño que tenía ejecutándose para tareas cron en segundo plano. Cada vez que se disparaba una tarea cron, arrebataba una porción de VRAM, provocando que el sistema expulsara al modelo GLM más grande del grupo para hacer sitio. Eliminar por completo los modelos «pequeños» para cualquier cosa que no fuera el trabajo de Nova resolvió los problemas de estabilidad de inmediato. La lección: en sistemas de memoria unificada, dos modelos locales grandes pueden coexistir, pero un tercer modelo «diminuto» suele ser el catalizador de un cuelgue.

Speediance en directo: Entrenando en los huecos

El entrenamiento de la noche fue Warrior One, una plantilla personalizada que llevo refinando. Mi referencia actual es aproximadamente 20 RM para los calentamientos, haciendo series de 13 repeticiones. Incluso con la última actualización de software 3.1, el Speediance sigue teniendo un punto persistente de fricción en la UX: el temporizador de descanso obligatorio. Aunque su intención es mantenerte en movimiento, en una sesión con mucha carga de desarrollo, a menudo me obliga a volver al escritorio, escribir un prompt y luego volver corriendo a la máquina antes de que pase al siguiente movimiento.

De esta sesión surgieron dos conclusiones específicas sobre el hardware y el software del Speediance:

1. El problema del inicio seguro por defecto: Speediance introdujo recientemente una función de «Inicio Seguro» para los curls de pie y otros levantamientos.

Está diseñado para evitar que las asas se desplacen hacia delante o reboten de vuelta hacia la máquina. Sin embargo, para un estiramiento de arriba hacia abajo (que uso para la movilidad del hombro), el inicio de seguridad limita el rango de movimiento. Detiene el cable antes de que puedas alcanzar la extensión completa necesaria para el estiramiento. Mi serie más pesada en este ejercicio no se trata de la carga; se trata de la profundidad. El Safety Start convierte efectivamente un ejercicio centrado en la movilidad en un curl estándar de rango limitado. Esta es una función que necesita ser un conmutador opcional por ejercicio, no un valor predeterminado global. Curiosamente, Tonal nunca lanzó una función similar por exactamente esta razón: interfiere con la física del movimiento.

2. Preocupaciones sobre la retracción del 2S: He notado que la retracción del cable en mi Speediance 2S se siente más 'blanda' que la del Gym Monster original. Hay un ligero retraso en la recogida que no estaba presente en el hardware anterior. Speediance acaba de regresar de unas vacaciones en China, así que soy optimista y creo que una actualización de firmware podría abordar pronto la calibración del motor.

En una nota más positiva, la durabilidad del hardware se puso a prueba cuando accidentalmente comencé una serie con los Smart Handles en el lado equivocado y se me cayó uno a mitad del movimiento. El hardware no falló ni un instante. Es un equipo resistente que sobrevive a los errores ocasionales por 'cerebro en directo'.

El Stack de Wearables: Garmin vs. Whoop

Durante el ejercicio, estaba monitorizando tanto Garmin como Whoop. Sirven a diferentes propósitos en mi ecosistema. Aunque la gente a menudo pregunta cuál es 'mejor', esta sesión destacó por qué mantengo ambos en mis muñecas.

Plataforma Métrica Principal Por qué Importó Esta Noche
Whoop % de Recuperación y Fatiga Whoop mostró una recuperación 35%. Esto me indicó que no debería intentar un PR en el Speediance. Me mantuve en la zona de volumen de 'mantenimiento'.
Garmin Gráfico de Carga de Entrenamiento Usé esto para rastrear mi progresión de base aeróbica. Actualmente estoy preparándome para una carrera mientras cargo con una masa significativa, y el gráfico de carga de 4 semanas es mi biblia.
Panel Personalizado Informe Matutino Combinado Esto agrega ambos para sugerir si debería correr mañana. Dado que la fatiga de esta noche fue moderada, mañana sí corro.

Garmin sigue siendo un estudio de contradicciones. El gráfico de 'Carga de Entrenamiento' es la pantalla individual más importante para mi preparación actual para la carrera, sin embargo, está enterrada a cinco niveles de profundidad en la aplicación móvil (Estadísticas de Rendimiento > Estado de Entrenamiento > Carga). Es un error significativo del producto que esta señal esté oculta detrás de tanto ruido.

Además, Garmin sigue sin ofrecer una forma de ver la 'Adherencia al Entrenamiento Sugerido' de un vistazo, lo que dificulta comprobar si realmente estás siguiendo el plan durante un periodo de un mes.

Una corrección crítica que hice a mitad de camino: mi Frecuencia Cardíaca Máxima estaba establecida incorrectamente con datos de hace casi ocho años. Esto provocaba que cada entrenamiento se registrara como 'bajo anaeróbico'. Actualizar esto a mi realidad fisiológica actual arregló inmediatamente el gráfico de distribución de carga, haciendo que los entrenamientos sugeridos volvieran a ser realmente utilizables.

Entrenando para una carrera en mi mayor peso

Actualmente estoy entrenando para una carrera mientras estoy en mi mayor peso corporal hasta la fecha. La retroalimentación fisiológica es fascinante. Hace siete años, cuando era puramente corredor, mi curva de carga de entrenamiento se disparaba en dos semanas. Ahora, se necesitan casi ocho semanas de esfuerzo constante para ver esa misma 'línea verde' subir. Un cuerpo más pesado y mayor responde más lento, pero los datos confirman que el progreso es más estable. Esta es la mejor forma física en la que he estado desde antes de 2022, incluso si la báscula dice que estoy 'fuera de especificación' para un corredor tradicional.

Conclusiones clave de la sesión

  • Flujos de trabajo agénticos: Una configuración de bot principal más sub-bot es la única forma de escalar el desarrollo manteniéndose dentro de los presupuestos de tokens de la API. Los modelos locales como Qwen 3 Coder ahora son 'suficientemente buenos' para 80% de las tareas de UI.
  • Garmin UX: Los datos más vitales suelen estar en los peores lugares. Si no estás investigando en los submenús de 'Carga', te estás perdiendo el verdadero valor del ecosistema Garmin.
  • Seguridad Speediance: Los usuarios deben tener cuidado con el nuevo 'Inicio Seguro'. Es genial para principiantes, pero puede obstaculizar activamente los movimientos avanzados que requieren estiramiento de rango de movimiento completo.
  • El cerebro paralelo: Construir con IA mientras entrenas no se trata solo de ahorrar tiempo; se trata de la fatiga del 'cambio de contexto'. Usar la IA para manejar las micro-decisiones te permite ahorrar energía cognitiva para las series pesadas y la arquitectura de alto nivel.

La sesión completa, incluido el recorrido por el backend de BJJ Buddy y el lanzamiento de Smart Handles, está archivada para los suscriptores. Si quieres ver el flujo sin editar de prompts y repeticiones, el enlace está abajo.

Mira la sesión completa de desarrollo en vivo de Build BJJ Buddy más Speediance AI en YouTube.

#BJJ Buddy#Speediance#Supabase#OpenClaw#Whoop#Garmin