PTENES
MÓDULO 3.4

📊 Dashboard y seguimiento

Ver la historia en los números: el dashboard en vivo (/healthdb), la tarjeta Sleep & Recovery, las tendencias de peso/intake/vitals y el ciclo dato → ajuste → resultado. Este es el módulo con el que termina el curso.

7
Temas
~35
Minutos
Práctico
Nivel
Uso
Tipo
Tu progreso en este módulo 0% · 0 de 7
1

🔗 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.
healthdb · HealthOS ● en vivo
😴 Sleep & Recovery
71%
⚖️ Peso (14 d)
75,0 kg
▼ 3,5 kg en el sprint
🍽️ Ingesta de hoy
1.840 kcal
P 142g · C 160g · G 58g
🩺 Presión
118/76
promedio de 7 d · estable
💓 HRV / RHR
64 ms / 52
subiendo durante la semana
💊 Suplementos
6/6 ✓
adherencia hoy

🎛️ 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.

▶ Copia y usa — el enlace profundo del dashboard URL

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

/healthdb

El comando que genera el botón del panel.

Deep-link

Abre directamente y ya autenticado.

Token → cookie

Desaparece de la URL en la 1.ª carga.

La misma verdad

Lee el mismo Supabase del coach.

2

😴 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.

Lun7h10 Mar7h45 Mié5h30 Jue6h55 Vie8h05 Sáb7h20 Hoy7h40 62%70%48%58%80%66%71% Sueño (barra morada) × Recuperación % (línea cian) · 7 días

📊 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

7 días

La ventana que revela el patrón.

Sueño × recuperación

La barra y la línea cuentan la misma historia.

Valles

El mal día señala la causa del día anterior.

El mismo dato

Es lo que el coach usa en la instantánea.

3

📉 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.

rango objetivo (~75 kg) 79 kg77 kg75 kg 78,5 75,0 D1D5D10D14 Peso · 14 días · −3,5 kg

📊 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.

▶ Copia y ejecuta — comprueba la tendencia en la base de datos terminal

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

Inclinación

La dirección de la línea > el punto de hoy.

Ruido

El agua y la sal influyen en el día, no en la semana.

Intake

Lo que se registró: calorías y macros.

Vitals

Presión, HRV, RHR a lo largo del tiempo.

4

📖 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.
1

Ve el valle

La recuperación se desplomó el miércoles. El número por sí solo solo asusta.

2

Busca la causa

Mira el día anterior en la tarjeta de intake: cena a las 21h30 + dos copas de vino.

3

Saca la lección

"Cenar tarde + alcohol = recovery baja para mí." Se convierte en un patrón conocido.

4

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

Por qué

La causa detrás del número.

Qué cambió

La variable que movió la línea.

Narrativa

Número → causa → siguiente paso.

Sin culpa

Un dato es información, no un juicio.

5

🔐 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.
🔑 ~/.envDASHBOARD_TOKEN 🔗 URL (1.ª vez)?token=… 🍪 Cookie HttpOnlytoken guardado ✅ URL limpiael token desaparece el secreto aparece una sola vez en la URL y desaparece en cuanto se convierte en cookie

📊 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.

▶ Copia y ejecuta — generar el DASHBOARD_TOKEN terminal

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 ~/.env o 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

DASHBOARD_TOKEN

La clave que desbloquea el panel.

HttpOnly

Cookie que JS no puede leer.

~/.env

Secreto fuera de git.

¿Se filtró? Cámbiala

Genera otro token y actualiza.

6

🗓️ 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

①Sueño y recuperación — ¿el promedio subió o bajó? ¿Dónde estuvo el mínimo y por qué?
②Peso — ¿la tendencia de 14 días avanza hacia la meta?
③Intake — ¿llegas a la cantidad de proteína? ¿Cenas temprano la mayoría de los días?
④Vitals — ¿presión estable? ¿Mejoran el HRV/RHR?
⑤Suplementos — ¿la adherencia de la semana está bien?
⑥1 ajuste — elige UN cambio para la próxima semana, no diez.
▶ Copia y ejecuta — actualiza los datos vitales antes de revisar terminal

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

Ritmo semanal

Mañana = coach; semana = panel.

4 tendencias

Sueño, peso, ingesta, signos vitales.

1 ajuste

Un cambio por semana, comprobable.

Idempotente

Volver a ejecutar el sync no duplica.

7

🔁 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.

📊 Datopanel: sueño, peso, vitals 🛠️ Ajustecena a las 19 h · dormir con el estómago lleno 🎯 Resultado−3,5 kg, sin hambre el resultado se convierte en el nuevo dato — el ciclo se repite cada semana El ciclo que cierra el curso

📊 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.

Dato — el panel mostró que la recuperación bajaba los días que cenabas tarde y que el peso estaba estancado.
Ajuste — dejar de comer alrededor de las 19h e irse a la cama satisfecho (sin hambre), en vez de recortar comida de golpe.
Resultado — −3,5 kg en el sprint sin pasar hambre; recuperación más alta y estable. Ese resultado se convierte en el dato de la semana siguiente.

🏁 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

Dato

El panel muestra dónde estás.

Ajuste

Un cambio pequeño y comprobable.

Resultado

−3,5 kg sin hambre: el ciclo funciona.

Gira de nuevo

El resultado se convierte en el siguiente dato.

📋 Resumen del módulo

✓
/healthdb abre el panel en vivo — deep-link con token; el token se convierte en una cookie HttpOnly en la primera carga y desaparece de la URL.
✓
Sleep & Recovery en 7 días — la tarjeta muestra el patrón de la semana, no un número aislado.
✓
Tendencias > día — el peso, el intake y los vitals solo tienen sentido según la tendencia a lo largo del tiempo.
✓
Leer como una historia — número → causa → siguiente paso; revisión semanal con 1 ajuste.
✓
Datos → ajuste → resultado — el ciclo que te llevó a −3,5 kg sin pasar hambre. Seguridad del panel mediante DASHBOARD_TOKEN.

🎉 ¡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.