MÓDULO 2.1

🧰 Pré-requisitos e contas

Antes de construir: instalar o básico, criar as contas (Supabase, Telegram, OpenAI, Gemini, WHOOP) e montar o ~/.env. Cada peça com o porquê — para você saber o que está ligando antes de seguir para o banco.

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

🐍 O que instalar na máquina

O HealthOS é enxuto de propósito: os scripts são Python puro (stdlib) — só o advice.py pede pip install requests. Antes de criar qualquer conta, deixe quatro ferramentas de base prontas na máquina. Você instala uma vez e segue para o resto.

🟢 Novo aqui? Dois termos antes de seguir

  • CLI — "interface de linha de comando": um programa que você roda digitando no terminal, sem janela gráfica. O Supabase CLI é o que empurra o banco lá pra nuvem por comando.
  • Runtime — o "motor" que executa um tipo de código. Python roda os scripts; Node roda o agente e o servidor do dashboard.
🐍 Python 3.9+ 🟢 Node 🎬 ffmpeg (clipes) 🗄️ Supabase CLI ✅ Ambiente pronto para construir o seu HealthOS

📊 Como ler: as quatro ferramentas de base (ciano, à esquerda) só precisam existir uma vez. Python e Node são obrigatórios; ffmpeg só entra se você for gerar clipes de treino; o Supabase CLI empurra o banco na Trilha 2.2.

FerramentaObrigatória?Para quê
Python 3.9+SimRoda os scripts (stdlib). Só advice.py usa pip install requests.
NodeSimRoda o agente e o servidor do dashboard.
ffmpegOpcionalSó para exercise_clip.py (clipes de demonstração de treino).
Supabase CLISimEmpurra as migrations (cria as 14 tabelas) — usado na 2.2.
Objetivo: confirmar que Python e Node estão instalados (e nas versões certas)
python3 --version && node --version
Como verificar: deve imprimir duas linhas, ex.: Python 3.11.6 e v20.11.0. Se o Python aparecer abaixo de 3.9 ou der "command not found", instale/atualize antes de seguir. (ffmpeg e Supabase CLI: cheque com ffmpeg -version e supabase --version — o primeiro só se for usar clipes.)

Conceitos-chave

Stdlib

Os scripts não dependem de pacotes externos (quase nada a instalar).

Python + Node

Os dois motores obrigatórios: scripts e agente.

ffmpeg opcional

Só para clipes de treino.

Supabase CLI

Empurra o banco — protagonista da 2.2.

2

☁️ Criar o projeto Supabase privado

O Supabase é onde TODOS os seus dados de saúde vão morar — comida, treino, peso, exames, sinais vitais, metas e a memória das mensagens. Por isso ele tem que ser privado, na sua conta. Aqui você só cria o projeto e guarda quatro segredos; criar as tabelas é a 2.2.

🟢 Novo aqui?

Supabase é um banco de dados PostgreSQL na nuvem + armazenamento de arquivos, com um painel web. Pense nele como o "HD do coach": tudo que você registra vira uma linha lá, e o agente lê de lá a cada conversa.

1

Crie a conta e um projeto novo

Em supabase.com, "New project". O plano gratuito dá conta de uma pessoa.

2

Escolha uma região adequada

Prefira a região mais perto de você (menos latência). Para o Brasil, normalmente South America (São Paulo).

3

Defina e guarde a senha do banco

A senha do banco vira o SUPABASE_DB_PASSWORD — o Supabase CLI vai precisar dela na 2.2 para empurrar as migrations.

4

Copie URL e chaves (Settings → API)

Pegue o SUPABASE_URL, a SUPABASE_ANON_KEY (pública) e a SUPABASE_SERVICE_ROLE_KEY (servidor). Guarde para o tópico 6.

🔒 Anon × Service-role — duas chaves, dois mundos

A anon é pública; com a RLS ligada e sem políticas (você faz isso na 2.2), ela não lê nada. A service-role é a chave do servidor: ela ignora a RLS e tem acesso total. Por isso a service-role nunca vai pro navegador nem pro git — só pro ~/.env.

Conceitos-chave

Privado

O projeto é seu, na sua conta.

Região

Perto de você = menos latência.

Senha do banco

Vira DB_PASSWORD para as migrations.

URL + 2 chaves

Anon pública, service-role do servidor.

3

🤖 Criar o bot no Telegram (@BotFather)

O Telegram é a porta de entrada do coach: você conversa por mensagem. Para isso existir, você cria um bot com o @BotFather (o "bot que cria bots" oficial) e pega o token dele — o HEALTH_BOT_TOKEN.

1

Abra o @BotFather no Telegram

Procure por @BotFather (o verificado, com o selo azul) e inicie a conversa.

2

Mande /newbot e nomeie

Escolha um nome de exibição e um username terminando em bot (ex.: meu_health_os_bot).

3

Copie o token que ele te dá

Vem algo como 123456789:AAH...xyz. Esse é o HEALTH_BOT_TOKEN — guarde para o tópico 6.

⚠️ O token é a chave da porta

Qualquer um com o HEALTH_BOT_TOKEN controla o seu bot. Não cole em chat, não suba pro git. Se vazar, use /revoke no @BotFather para gerar um novo na hora.

💡 Onde o token é usado

Além do ~/.env, o agente aponta para essa variável no agent.yaml (campo telegram_bot_token_env). Você liga isso de fato na Trilha 2.3 — aqui é só ter o token na mão.

Conceitos-chave

@BotFather

O bot oficial que cria o seu bot.

/newbot

Comando que gera o bot e o token.

HEALTH_BOT_TOKEN

A chave da porta de entrada.

/revoke

Troca o token se ele vazar.

4

🔑 Chaves OpenAI e Gemini

Duas chaves cobrem dois trabalhos diferentes. A OpenAI gera os embeddings da memória (é como o coach lembra do seu histórico). O Gemini (Google) faz a visão: transforma a foto de uma comida ou de um exame em dado.

🟢 Novo aqui?

Embedding é transformar um texto num vetor de números que captura o "sentido". Mensagens parecidas viram vetores próximos — é assim que o coach acha o que você disse semanas atrás (memória semântica) em vez de só guardar a última fala.

🧠 OPENAI_API_KEY

  • Crie em platform.openai.com → API keys.
  • Usada para embeddings da memória semântica.
  • Custo de embeddings é de centavos.

📸 GOOGLE_API_KEY

  • Crie em aistudio.google.com → Get API key.
  • Visão Gemini: foto de comida → macros, exame → marcadores.
  • Custo de centavos por foto.

💰 Quanto pesa no bolso

Para uma pessoa, o uso típico fica em torno de US$ 10–20/mês somando as chamadas de LLM, com embeddings e visão em centavos. Configure um limite de gasto em cada conta para dormir tranquilo.

Conceitos-chave

Embeddings

OpenAI: a base da memória semântica.

Visão

Gemini: foto vira dado estruturado.

Duas contas

OpenAI e Google AI Studio.

Barato

Centavos por foto/embedding.

5

⌚ Conta WHOOP + app dev (opcional)

A WHOOP é o exemplo de wearable do blueprint, mas é 100% opcional. O mesmo padrão (OAuth + sync diário) serve para Oura, Garmin, Fitbit — ou registro manual. O coach e o dashboard trabalham com o que cair na tabela vitals, venha de onde vier.

🟢 Novo aqui?

OAuth é o aperto de mão que deixa o seu app ler os seus dados na WHOOP sem guardar a sua senha. Você autoriza uma vez; a WHOOP devolve um refresh_token que o sync usa (e rotaciona) a cada manhã.

✓ Tem WHOOP

  • Crie um app em developer.whoop.com.
  • Pegue o WHOOP_CLIENT_ID e o WHOOP_CLIENT_SECRET.
  • A API é gratuita com a assinatura. O REFRESH_TOKEN a callback preenche na 2.4.

○ Não tem WHOOP

  • Deixe as três variáveis WHOOP_* vazias.
  • Use outra wearable com o mesmo padrão, ou registre recovery/sono manualmente.
  • Tudo o resto do curso funciona igual.

💡 Duas pegadinhas que a 2.4 resolve

Quando você ligar o sync de fato (Trilha 2.4), duas coisas mordem: a Cloudflare bane o user-agent padrão do Python (mande um de navegador) e o refresh-token precisa ser rotacionado a cada run. Aqui é só ter as credenciais — o resto vem lá.

Conceitos-chave

Opcional

Qualquer fonte serve, até manual.

App dev

Gera CLIENT_ID e CLIENT_SECRET.

OAuth

Autoriza sem guardar senha.

Tabela vitals

O destino comum de qualquer wearable.

6

📄 O arquivo ~/.env

Tudo o que você juntou — token, URL, chaves — converge para um único arquivo: o ~/.env, na sua home (o ~ é o atalho da sua pasta de usuário). Ele fica fora do git, sempre. O agente lê os segredos de lá para funcionar.

☁️ Supabase (URL+keys) 🤖 Telegram (token) 🧠 OpenAI (key) 📸 Gemini (key) ⌚ WHOOP (opcional) 📄 ~/.env um arquivo, na sua home 🤖 Agente lê os segredos e roda

📊 Como ler: as cinco fontes (ciano, à esquerda) despejam suas chaves num só lugar — o ~/.env (azul, no centro). O agente lê só desse arquivo. A WHOOP entra tracejada porque é opcional.

Todas as variáveis, e para que servem

VariávelPara quê
HEALTH_BOT_TOKENToken do bot do Telegram (do @BotFather).
SUPABASE_URLEndereço do seu projeto: https://<ref>.supabase.co.
SUPABASE_SERVICE_ROLE_KEYAcesso do servidor ao banco (ignora a RLS). Nunca no navegador.
SUPABASE_ANON_KEYChave pública — com RLS ligada, não lê nada.
SUPABASE_DB_PASSWORDSenha do banco para o Supabase CLI rodar as migrations.
OPENAI_API_KEYEmbeddings da memória semântica.
GOOGLE_API_KEYVisão Gemini (foto de comida / exame / treino).
DASHBOARD_TOKENProtege o dashboard web (um segredo aleatório seu).
WHOOP_CLIENT_IDID do seu app WHOOP (opcional).
WHOOP_CLIENT_SECRETSegredo do seu app WHOOP (opcional).
WHOOP_REFRESH_TOKENEscrito pela callback OAuth, rotacionado a cada sync.
Objetivo: montar o ~/.env completo (troque as partes em <...> pelos seus valores)
# ~/.env — segredos do HealthOS. NUNCA versionar (fica na home, fora do git).

# Telegram (do @BotFather)
HEALTH_BOT_TOKEN=<seu-token-do-botfather>

# Supabase (Settings -> API e Database)
SUPABASE_URL=https://<project-ref>.supabase.co
SUPABASE_SERVICE_ROLE_KEY=<service-role-key>
SUPABASE_ANON_KEY=<anon-public-key>
SUPABASE_DB_PASSWORD=<senha-do-banco>

# Modelos
OPENAI_API_KEY=<sk-...>
GOOGLE_API_KEY=<sua-chave-gemini>

# Dashboard
DASHBOARD_TOKEN=<um-segredo-aleatorio-seu>

# WHOOP (OPCIONAL — qualquer wearable ou registro manual serve)
WHOOP_CLIENT_ID=<client-id-do-app-whoop>
WHOOP_CLIENT_SECRET=<client-secret-do-app-whoop>
WHOOP_REFRESH_TOKEN=<deixe-vazio-a-callback-preenche>
Como verificar: salve como ~/.env. A dica do repo é copiar de agent/.env.example e preencher. Não sobrou nenhum <...>? Então está pronto para o próximo passo.
Objetivo: confirmar que o arquivo existe e que as chaves estão preenchidas
# 1) o arquivo existe?
ls -l ~/.env

# 2) nenhum valor ficou como placeholder <...>?
grep -n '<' ~/.env || echo "OK: nenhum placeholder sobrando"
Como verificar: o ls deve listar o arquivo (se der "No such file", ele não está na home). O grep deve imprimir OK: nenhum placeholder sobrando — se listar linhas, ainda há <...> para trocar.

⚠️ Nunca commitar o ~/.env

  • Ele mora na sua home (~/.env), nunca num .env dentro do projeto.
  • Fora do git, sempre. Quem tem essas chaves tem acesso aos seus dados de saúde.
  • Se vazar uma chave, revogue/regenere na conta de origem na hora.

Conceitos-chave

Um arquivo

Tudo converge para o ~/.env.

Na home

~/.env, não dentro do projeto.

Fora do git

Segredo nunca é versionado.

11 variáveis

3 delas (WHOOP) opcionais.

7

✅ Checklist de prontidão

Antes de seguir para o banco (Módulo 2.2), confirme que cada peça está no lugar. O diagrama abaixo mostra o que vai onde — qual chave alimenta qual capacidade do coach. Se tudo isso estiver de pé, você está pronto.

A CHAVE A CAPACIDADE HEALTH_BOT_TOKEN SUPABASE_* (url+keys) OPENAI_API_KEY GOOGLE_API_KEY WHOOP_* (opcional) 💬 Conversa no Telegram 🗄️ Banco + memória (Supabase) 🧠 Memória semântica (embeddings) 📸 Visão: foto vira dado ⌚ Wearable: recovery, sono

📊 Como ler: cada chave da esquerda (ciano) liga UMA capacidade do coach à direita (azul). Faltou a da esquerda? A da direita não acende. Só a última linha (WHOOP) é opcional — sem ela o coach roda igual, com registro manual.

Você está pronto se…

  • python3 --version ≥ 3.9 e node --version respondem.
  • Projeto Supabase privado criado, numa região adequada; URL + 2 chaves + senha do banco guardadas.
  • Bot criado no @BotFather; HEALTH_BOT_TOKEN na mão.
  • OPENAI_API_KEY e GOOGLE_API_KEY criadas.
  • (Opcional) app WHOOP criado, ou decidiu por registro manual.
  • ~/.env montado e verificado — sem nenhum <...> sobrando.

✅ Auto-checagem (opcional): onde devem morar as suas chaves e segredos do HealthOS?

Conceitos-chave

O que vai onde

Cada chave liga uma capacidade.

Faltou = apagou

Sem a chave, a capacidade não acende.

WHOOP opcional

A única linha que pode ficar vazia.

Pronto p/ 2.2

Tudo de pé → vamos ao banco.

📋 Resumo do módulo

Instale o básico — Python 3.9+ e Node (obrigatórios), ffmpeg (só clipes) e Supabase CLI. Scripts são stdlib; só advice.py pede requests.
Crie as contas — Supabase privado (URL + 2 chaves + senha), bot no @BotFather (token), OpenAI (embeddings) e Gemini (visão).
WHOOP é opcional — qualquer wearable ou registro manual serve; tudo cai na tabela vitals.
Tudo converge no ~/.env — um arquivo na sua home, fora do git; o agente lê os segredos de lá.
O que vai onde — cada chave acende uma capacidade do coach; sem ela, aquela parte não funciona.

Próximo módulo:

2.2 — O banco de dados: empurrar as migrations no Supabase, ligar o pgvector, criar as 14 tabelas e o bucket de fotos, e travar tudo com RLS.