MÓDULO 3.4

📊 Dashboard e acompanhamento

Ver a história nos números: o dashboard ao vivo (/healthdb), o card Sleep & Recovery, as tendências de peso/intake/vitals, e o ciclo dado → ajuste → resultado. Este é o módulo que fecha o curso.

7
Tópicos
~35
Minutos
Prático
Nível
Uso
Tipo
Seu progresso neste módulo 0% · 0 de 7
1

🔗 O link /healthdb: o painel ao vivo

O coach mora no Telegram, mas às vezes você quer ver tudo de uma vez — sono da semana, peso caindo, pressão, intake. Pra isso existe o comando /healthdb: ele te manda um botão de deep-link que abre o dashboard ao vivo, lendo direto do seu Supabase. É a mesma verdade do bot, só que num painel visual.

🟣 Novo aqui?

  • Dashboard — uma página web (em agent/dashboard/) que lê o seu Supabase e desenha cards e gráficos. Mesmo banco do coach, outra janela.
  • Deep-link — um link que já abre direto no lugar certo e autenticado. Aqui ele carrega o seu token de uma vez só, sem você digitar senha.
  • Cookie HttpOnly — um cookie que o navegador guarda mas o JavaScript da página não consegue ler. Serve pra esconder o token de scripts maliciosos.
healthdb · HealthOS ● ao vivo
😴 Sleep & Recovery
71%
⚖️ Peso (14 d)
75,0 kg
▼ 3,5 kg no sprint
🍽️ Intake hoje
1.840 kcal
P 142g · C 160g · G 58g
🩺 Pressão
118/76
média 7 d · estável
💓 HRV / RHR
64 ms / 52
subindo na semana
💊 Suplementos
6/6 ✓
aderência hoje

🎛️ Recriação ilustrativa do dashboard — não é screenshot real. Números fictícios, só para mostrar o leiaute.

📊 Como ler: a janela tem a barra de título (3 bolinhas) e cards independentes. Cada card é uma fonte: sono, peso, intake, pressão, HRV. As mini-barras mostram a tendência, não só o número de hoje — é isso que o painel acrescenta ao chat.

▶ Copie e use — o deep-link do dashboard URL

Objetivo: abrir o dashboard ao vivo autenticado. No Telegram você só manda /healthdb e o coach devolve este botão; o link em si é assim:

https://<seu-host>/healthdb?token=<DASHBOARD_TOKEN>

Como verificar: ao abrir, o painel carrega; recarregue a página e repare que o ?token=... some da URL — ele migrou para um cookie HttpOnly no 1º load. Se o painel continuar aberto sem o token na barra, deu certo.

💡 Por que um link, e não uma senha

O token vai uma vez na URL e na sequência some — fica só no cookie HttpOnly. Você não digita nada, e o segredo não fica pendurado no histórico do navegador depois do 1º load. É conveniência sem deixar a porta destrancada.

Conceitos-chave

/healthdb

O comando que gera o botão do painel.

Deep-link

Abre direto e já autenticado.

Token → cookie

Some da URL no 1º load.

Mesma verdade

Lê o mesmo Supabase do coach.

2

😴 O card Sleep & Recovery

O card mais importante do painel é o Sleep & Recovery: os últimos 7 dias de sono e recuperação, lado a lado. Um número isolado mente; sete dias mostram o padrão — se você está acumulando dívida de sono ou se recuperou. É o mesmo dado que entra no snapshot do coach, agora desenhado.

Seg7h10 Ter7h45 Qua5h30 Qui6h55 Sex8h05 Sáb7h20 Hoje7h40 62%70%48%58%80%66%71% Sono (barra roxa) × Recuperação % (linha ciano) · 7 dias

📊 Como ler: a barra roxa é quanto você dormiu; a linha ciano é como você recuperou. Note a quarta-feira (barra vermelha, 5h30 → recovery 48%): noite curta puxa a recuperação pra baixo. A sexta dormiu mais e recuperou a 80%. O painel mostra a relação, não números soltos.

🔎 O que olhar nesse card

  • A tendência da semana, não o dia: 7 dias dizem se você está pagando ou acumulando dívida de sono.
  • Os vales (dias vermelhos) e o que veio antes: jantar tarde, álcool, treino pesado à noite.
  • Se a recuperação sobe depois de uma boa noite — confirma que o sono é a sua maior alavanca.

Conceitos-chave

7 dias

A janela que revela o padrão.

Sono × recovery

Barra e linha contam a mesma história.

Vales

O dia ruim aponta a causa do dia anterior.

Mesmo dado

É o que o coach usa no snapshot.

3

📉 Tendências: peso, intake e vitals

Peso, intake (o que você comeu) e vitals (pressão, HRV, frequência de repouso) só fazem sentido ao longo do tempo. O peso de hoje pode ser água; a linha de duas semanas é a verdade. O dashboard plota essas tendências pra você ver a inclinação, não o ruído do dia.

faixa de meta (~75 kg) 79 kg77 kg75 kg 78,5 75,0 D1D5D10D14 Peso · 14 dias · −3,5 kg

📊 Como ler: ignore se um ponto sobe um pouco (água, sal). O que importa é a inclinação: a linha desce de 78,5 para 75,0 kg e entra na faixa de meta (ciano). Tendência descendente suave > obsessão com o número diário.

▶ Copie e rode — conferir a tendência no banco terminal

Objetivo: ver os mesmos pontos que o dashboard plota, direto do Supabase, sem abrir o 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"

Como verificar: sai uma tabela de 14 linhas com data e peso. Confira que os valores batem com a linha do card de peso no /healthdb — painel e banco contam a mesma história.

✓ Ler tendência

  • Olhar a inclinação de 7–14 dias.
  • Cruzar peso ↓ com intake e sono da semana.
  • Esperar a linha antes de mudar a estratégia.

✗ Reagir ao ruído

  • Surtar porque subiu 0,4 kg num dia.
  • Cortar comida vendo um único pico.
  • Pesar em horários diferentes e comparar.

Conceitos-chave

Inclinação

A direção da linha > o ponto de hoje.

Ruído

Água e sal mexem no dia, não na semana.

Intake

O que entrou: calorias e macros.

Vitals

Pressão, HRV, RHR ao longo do tempo.

4

📖 Ler como história, não como número solto

Um número sozinho — "recovery 48%" — não ensina nada. A história ensina: por que caiu, o que mudou, o que fazer. O dashboard mostra os números; você (e o coach) os transforma em narrativa. Ler o painel é perguntar "qual é a história desta semana?".

✗ Número solto

  • "Recovery 48%." E daí? Não diz a causa nem o próximo passo.
  • "Peso 75,4." Subiu ou desceu? Em relação a quê?
  • Olhar um dado, sentir culpa, fechar o painel.

✓ Como história

  • "Caiu pra 48% porque jantei tarde + vinho; amanhã janto cedo."
  • "Peso desce há 10 dias; o que mudou foi parar de comer às 19h."
  • Olhar a semana, entender a causa, ajustar uma coisa.
1

Vê o vale

A recuperação despencou na quarta. O número sozinho só assusta.

2

Busca a causa

Olha o dia anterior no card de intake: jantar às 21h30 + duas taças de vinho.

3

Tira a lição

"Jantar tarde + álcool = recovery baixa pra mim." Vira um padrão conhecido.

4

Ajusta e confirma

Janta cedo na quinta; sexta a recuperação volta a 80%. A história fechou — e ensinou um botão seu.

Conceitos-chave

Por quê

A causa por trás do número.

O que mudou

A variável que moveu a linha.

Narrativa

Número → causa → próximo passo.

Sem culpa

Dado é informação, não julgamento.

5

🔐 Segurança do dashboard

O painel mostra dado de saúde — sensível. Quem protege é o DASHBOARD_TOKEN: uma chave secreta no seu ~/.env que destranca o dashboard. Sem o token certo, a página não abre. E o token nunca fica exposto: depois do 1º load ele vive só no cookie HttpOnly.

🟣 Novo aqui?

  • DASHBOARD_TOKEN — uma das chaves do ~/.env (a tabela do README diz: "Gates the web dashboard"). É o segredo que libera o painel.
  • ~/.env — arquivo na sua home onde ficam os segredos. Fora do git, nunca versionado.
  • HttpOnly — o cookie existe para o servidor, mas o JavaScript da página não lê. Reduz o risco se algum script malicioso rodar na aba.
🔑 ~/.envDASHBOARD_TOKEN 🔗 URL (1ª vez)?token=… 🍪 Cookie HttpOnlytoken guardado ✅ URL limpatoken some o segredo aparece uma única vez na URL e some assim que vira cookie

📊 Como ler: da esquerda pra direita é o caminho do token: nasce no ~/.env, vai uma vez na URL, é guardado no cookie HttpOnly (caixa roxa) e a URL fica limpa (caixa verde). Depois disso, o segredo não está mais visível na barra de endereço.

▶ Copie e rode — gerar o DASHBOARD_TOKEN terminal

Objetivo: criar um token longo e aleatório e gravá-lo no seu ~/.env (nunca um valor fácil de adivinhar).

python3 -c "import secrets; print('DASHBOARD_TOKEN=' + secrets.token_urlsafe(32))" \
  >> ~/.env

Como verificar: rode grep DASHBOARD_TOKEN ~/.env e veja uma linha com ~43 caracteres aleatórios. Reinicie o servidor do dashboard e o /healthdb passa a abrir só com esse token.

⚠️ Nunca faça isto com o token

  • Colar o link ?token=... num grupo, print ou rede social — é a chave do seu painel.
  • Commitar o ~/.env ou o token no git.
  • Usar um valor curto/óbvio (ex.: 123456). Se vazar, gere outro e troque no ~/.env.

Conceitos-chave

DASHBOARD_TOKEN

A chave que destranca o painel.

HttpOnly

Cookie que o JS não lê.

~/.env

Segredo fora do git.

Vazou? Troca

Gere outro token e atualize.

6

🗓️ Revisar toda semana

O coach faz a revisão da manhã (diária). O dashboard é pra revisão da semana: uma vez por semana, abra o /healthdb com calma e leia as quatro tendências como um relatório. Cinco minutos transformam dados acumulados em decisão.

Checklist da revisão semanal

Sono & recovery — a média subiu ou desceu? Onde foi o vale e por quê?
Peso — a inclinação de 14 dias segue na direção da meta?
Intake — proteína batendo? Janta cedo na maioria dos dias?
Vitals — pressão estável? HRV/RHR melhorando?
Suplementos — aderência da semana ok?
1 ajuste — escolha UMA mudança pra próxima semana, não dez.
▶ Copie e rode — atualizar os vitals antes de revisar terminal

Objetivo: garantir que a recuperação e o sono da semana inteira já estão no banco antes de você abrir o painel.

python3 agent/scripts/whoop-sync.py

Como verificar: o script escreve recovery_pct, hrv_ms, resting_hr e sleep_hours na tabela vitals. Rodar de novo é idempotente (não duplica). Depois, o card Sleep & Recovery do /healthdb mostra a semana completa.

💡 Um ajuste por vez

A revisão semanal não é pra mudar tudo. Escolha um botão (jantar mais cedo, cortar café à tarde, dormir 30 min antes) e teste por sete dias. Na próxima revisão, a tendência confirma — ou não. É assim que você aprende os seus botões sem virar uma planilha de culpa.

Conceitos-chave

Ritmo semanal

Manhã = coach; semana = painel.

4 tendências

Sono, peso, intake, vitals.

1 ajuste

Uma mudança por semana, testável.

Idempotente

Re-rodar o sync não duplica.

7

🔁 Dado → ajuste → resultado

Tudo no curso converge para um único ciclo: você vê o dado no painel, faz um ajuste, e a próxima semana mostra o resultado — que vira o novo dado. Foi esse loop que levou o autor a −3,5 kg no sprint, sem passar fome: dormindo cheio e parando de comer por volta das 19h.

📊 Dadopainel: sono, peso, vitals 🛠️ Ajustejantar 19h · dormir cheio 🎯 Resultado−3,5 kg, sem fome o resultado vira o novo dado — o ciclo gira toda semana O loop que fecha o curso

📊 Como ler: três caixas, um ciclo. Dado (painel) → Ajuste (uma mudança pequena) → Resultado (verde, a meta) → e a seta de baixo devolve ao Dado. Cada volta é uma semana. O segredo do −3,5 kg não foi força de vontade: foi o ciclo girando.

Dado — o painel mostrou recuperação caindo nos dias de jantar tarde e o peso travado.
Ajuste — parar de comer por volta das 19h e ir pra cama cheio (sem fome), em vez de cortar comida no susto.
Resultado −3,5 kg no sprint sem passar fome; recuperação mais alta e estável. Esse resultado vira o dado da semana seguinte.

🏁 O curso inteiro em uma frase

Você construiu um coach que registra (Trilha 2), que conversa com você todo dia (Trilha 3) e que te mostra a história nos números (este módulo). O resto é girar o ciclo: ver, ajustar, confirmar. Os seus botões você aprende fazendo.

✅ Auto-checagem (opcional): o que levou o autor a −3,5 kg sem passar fome?

Conceitos-chave

Dado

O painel mostra onde você está.

Ajuste

Uma mudança pequena e testável.

Resultado

−3,5 kg sem fome: o loop funcionando.

Gira de novo

O resultado vira o próximo dado.

📋 Resumo do módulo

/healthdb abre o painel ao vivo — deep-link com token; o token vira cookie HttpOnly no 1º load e some da URL.
Sleep & Recovery em 7 dias — o card mostra o padrão da semana, não um número solto.
Tendências > dia — peso, intake e vitals só fazem sentido pela inclinação ao longo do tempo.
Ler como história — número → causa → próximo passo; revisão semanal com 1 ajuste.
Dado → ajuste → resultado — o ciclo que levou a −3,5 kg sem passar fome. Segurança do painel pelo DASHBOARD_TOKEN.

🎉 Você concluiu o curso!

Você concluiu o curso! Volte ao início para revisar qualquer trilha ou retomar de onde parou. Agora é girar o ciclo na sua própria rotina — ver, ajustar, confirmar.