🔗 El enlace /healthdb: el panel en vivo
El coach vive en Telegram, pero a veces tú quieres ver todo de una vez — sueño de la semana, peso bajando, presión, intake. Para eso existe el comando /healthdb: te envía un botón de enlace profundo que abre el dashboard en vivo y lee directamente de tu Supabase. Es la misma verdad del bot, pero en un panel visual.
🟣 ¿Nuevo por aquí?
- Dashboard — una página web (en
agent/dashboard/) que lee tu Supabase y dibuja tarjetas y gráficos. La misma base de datos del coach, otra ventana. - Deep-link — un enlace que ya se abre directamente en el lugar correcto y autenticado. Aquí carga tu token de una sola vez, sin que tengas que escribir la contraseña.
- Cookie HttpOnly — una cookie que el navegador guarda, pero el JavaScript de la página no puede leer. Sirve para ocultar el token de scripts maliciosos.
🎛️ Recreación ilustrativa del dashboard — no es una captura de pantalla real. Números ficticios, solo para mostrar el diseño.
📊 Cómo leer: la ventana tiene la barra de título (3 puntos) y tarjetas independientes. Cada tarjeta es una fuente: sueño, peso, ingesta, presión, HRV. Las barras pequeñas muestran la tendencia, no solo el número de hoy —eso es lo que el panel agrega al chat.
Objetivo: abrir el dashboard en vivo autenticado. En Telegram solo envías /healthdb y el coach devuelve este botón; el enlace en sí es así:
https://<seu-host>/healthdb?token=<DASHBOARD_TOKEN>
Cómo verificar: al abrir, se carga el panel; recarga la página y fíjate en que el ?token=... desaparece de la URL — migró a una cookie HttpOnly en la primera carga. Si el panel sigue abierto sin el token en la barra, funcionó.
💡 Por qué un enlace y no una contraseña
El token va una vez en la URL y luego desaparece — solo queda en la cookie HttpOnly. No escribes nada y el secreto no queda expuesto en el historial del navegador después de la 1.ª carga. Es práctico sin dejar la puerta abierta.
Conceptos clave
El comando que genera el botón del panel.
Abre directamente y ya autenticado.
Desaparece de la URL en la 1.ª carga.
Lee el mismo Supabase del coach.
😴 La tarjeta Sleep & Recovery
La tarjeta más importante del panel es el Sleep & Recovery: los últimos 7 días de sueño y recuperación, uno al lado del otro. Un número aislado miente; siete días muestran el patrón — si estás acumulando deuda de sueño o si te recuperaste. Es el mismo dato que entra en el snapshot del coach, ahora representado gráficamente.
📊 Cómo leer: la barra morada muestra cuánto dormiste; la línea cian muestra cómo te recuperaste. Observa el miércoles (barra roja, 5h30 → recovery 48%): una noche corta reduce la recuperación. El viernes dormiste más y tu recuperación llegó al 80%. El panel muestra la relación, no números aislados.
🔎 Qué observar en esta tarjeta
- •A tendencia de la semana, no del día: 7 días te dicen si estás pagando o acumulando deuda de sueño.
- •Los vales (días rojos) y lo que ocurrió antes: cena tarde, alcohol, entrenamiento intenso por la noche.
- •Si la recuperación sube después de una buena noche: confirma que el sueño es tu mayor palanca.
Conceptos clave
La ventana que revela el patrón.
La barra y la línea cuentan la misma historia.
El mal día señala la causa del día anterior.
Es lo que el coach usa en la instantánea.
📉 Tendencias: peso, intake y vitals
El peso, el intake (lo que comiste) y los vitals (presión, HRV, frecuencia en reposo) solo tienen sentido a lo largo del tiempo. El peso de hoy puede ser agua; la línea de dos semanas es la verdad. El dashboard representa estas tendencias para que veas la inclinación, no el ruido del día.
📊 Cómo leer: ignora si un punto sube un poco (agua, sal). Lo que importa es la inclinación: la línea baja de 78,5 a 75,0 kg y entra en el rango objetivo (cian). Tendencia descendente suave > obsesión con el número diario.
Objetivo: ver los mismos puntos que grafica el dashboard, directamente desde Supabase, sin abrir el navegador.
python3 agent/scripts/db.py query \
"select date, weight_kg from vitals \
where weight_kg is not null \
order by date desc limit 14"
Cómo verificar: sale una tabla de 14 filas con fecha y peso. Comprueba que los valores coincidan con la fila de la tarjeta de peso en el /healthdb — el panel y la base de datos cuentan la misma historia.
✓ Leer la tendencia
- ✓Observa la tendencia de 7–14 días.
- ✓Cruza el peso ↓ con la ingesta y el sueño de la semana.
- ✓Espera a que haya una tendencia antes de cambiar la estrategia.
✗ Reaccionar al ruido
- ✗Alterarte porque subiste 0,4 kg en un día.
- ✗Dejar de comer al ver un solo pico.
- ✗Pésate en horarios distintos y compara.
Conceptos clave
La dirección de la línea > el punto de hoy.
El agua y la sal influyen en el día, no en la semana.
Lo que se registró: calorías y macros.
Presión, HRV, RHR a lo largo del tiempo.
📖 Léelo como una historia, no como un número aislado
Un número por sí solo —"recovery 48%"— no enseña nada. A historial enseña: por qué bajó, qué cambió, qué hacer. El dashboard muestra los números; tú (y el coach) los convierten en una narrativa. Leer el panel es preguntarse «¿cuál es la historia de esta semana?».
✗ Número aislado
- ✗"Recovery 48%." ¿Y qué? No indica la causa ni el siguiente paso.
- ✗"Peso 75,4." ¿Subió o bajó? ¿En relación con qué?
- ✗Mira un dato, siente culpa, cierra el panel.
✓ Como historia
- ✓"Bajó al 48%" porque cené tarde + vino; mañana ceno temprano.»
- ✓"El peso baja desde hace 10 días; lo que cambió fue dejar de comer a las 19h."
- ✓Mira la semana, entiende la causa, ajusta una cosa.
Ve el valle
La recuperación se desplomó el miércoles. El número por sí solo solo asusta.
Busca la causa
Mira el día anterior en la tarjeta de intake: cena a las 21h30 + dos copas de vino.
Saca la lección
"Cenar tarde + alcohol = recovery baja para mí." Se convierte en un patrón conocido.
Ajusta y confirma
Cena temprano el jueves; el viernes la recuperación vuelve al 80%. La historia cerró y te enseñó uno de tus botones.
Conceptos clave
La causa detrás del número.
La variable que movió la línea.
Número → causa → siguiente paso.
Un dato es información, no un juicio.
🔐 Seguridad del dashboard
El panel muestra datos de salud, que son sensibles. Quien los protege es el DASHBOARD_TOKEN: una clave secreta en tu ~/.env que desbloquea el dashboard. Sin el token correcto, la página no se abre. Y el token nunca queda expuesto: después de la 1.ª carga, vive solo en cookie HttpOnly.
🟣 ¿Nuevo por aquí?
- DASHBOARD_TOKEN — una de las claves de
~/.env(la tabla del README dice: "Gates the web dashboard"). Es el secreto que habilita el panel. - ~/.env — archivo en tu home donde se guardan los secretos. Fuera de git, nunca se versiona.
- HttpOnly — la cookie existe para el servidor, pero el JavaScript de la página no puede leerla. Reduce el riesgo si se ejecuta algún script malicioso en la pestaña.
📊 Cómo leer: de izquierda a derecha está el recorrido del token: nace en el ~/.env, se visita una vez la URL, se guarda en la cookie HttpOnly (recuadro morado) y la URL queda limpia (recuadro verde). Después de eso, el secreto deja de estar visible en la barra de direcciones.
Objetivo: crear un token largo y aleatorio y guardarlo en tu ~/.env (nunca un valor fácil de adivinar).
python3 -c "import secrets; print('DASHBOARD_TOKEN=' + secrets.token_urlsafe(32))" \
>> ~/.env
Cómo verificar: ejecuta grep DASHBOARD_TOKEN ~/.env y mira una línea con ~43 caracteres aleatorios. Reinicia el servidor del dashboard y el /healthdb pasa a abrirse solo con ese token.
⚠️ Nunca hagas esto con el token
- •Pegar el enlace
?token=...en un grupo, una captura de pantalla o una red social: es la clave de tu panel. - •Hacer commit del
~/.envo el token en git. - •Usar un valor corto u obvio (p. ej.,
123456). Si se filtra, genera otro y cámbialo en el~/.env.
Conceptos clave
La clave que desbloquea el panel.
Cookie que JS no puede leer.
Secreto fuera de git.
Genera otro token y actualiza.
🗓️ Revisar cada semana
El coach hace la revisión de la mañana (diaria). El dashboard es para revisar la semana: una vez por semana, abre el /healthdb con calma y lee las cuatro tendencias como un informe. Cinco minutos convierten los datos acumulados en una decisión.
✅ Lista de verificación de la revisión semanal
Objetivo: garantizar que la recuperación y el sueño de toda la semana ya estén en la base de datos antes de que abras el panel.
python3 agent/scripts/whoop-sync.py
Cómo verificar: el script escribe recovery_pct, hrv_ms, resting_hr e sleep_hours en la tabla vitals. Ejecutarlo de nuevo es idempotente (no duplica). Después, la tarjeta Sleep & Recovery del /healthdb muestra la semana completa.
💡 Un ajuste a la vez
La revisión semanal no es para cambiarlo todo. Elige un botón (cenar más temprano, dejar el café por la tarde, dormir 30 min antes) y prueba durante siete días. En la próxima revisión, la tendencia lo confirma — o no. Así es como aprendes a usar los tus botones sin convertirlo en una hoja de cálculo de culpa.
Conceptos clave
Mañana = coach; semana = panel.
Sueño, peso, ingesta, signos vitales.
Un cambio por semana, comprobable.
Volver a ejecutar el sync no duplica.
🔁 Dato → ajuste → resultado
Todo el curso converge en un único ciclo: tú ve el dato en el panel, haz un ajuste, y la próxima semana muestra el resultado — que se convierte en el nuevo dato. Ese loop fue lo que llevó al autor a −3,5 kg en el sprint, sin pasar hambre: durmiendo con el estómago lleno y dejando de comer alrededor de las 19h.
📊 Cómo leer: tres cajas, un ciclo. Dato (panel) → Ajuste (un cambio pequeño) → Resultado (verde, la meta) → y la flecha de abajo devuelve al Dato. Cada vuelta es una semana. El secreto de los −3,5 kg no fue la fuerza de voluntad: fue el ciclo en marcha.
🏁 Todo el curso en una frase
Construiste un coach que registra (Ruta 2), que conversa contigo todos los días (Ruta 3) y que te muestra la historia en cifras (este módulo). Lo demás es repetir el ciclo: observar, ajustar, confirmar. Aprenderás a usar tus botones con la práctica.
✅ Autoevaluación (opcional): ¿qué llevó al autor a −3,5 kg sin pasar hambre?
Conceptos clave
El panel muestra dónde estás.
Un cambio pequeño y comprobable.
−3,5 kg sin hambre: el ciclo funciona.
El resultado se convierte en el siguiente dato.
📋 Resumen del módulo
🎉 ¡Terminaste el curso!
¡Terminaste el curso! Vuelve al inicio para repasar cualquier ruta o retomar donde lo dejaste. Ahora toca poner en marcha el ciclo en tu propia rutina: observar, ajustar, confirmar.