AI Trainer
O motor monta e ajusta o treino. A IA explica e conversa.
Exercícios, séries, repetições, RIR, descanso, carga, deload e platô saem de um motor de regras escrito a partir de um guia de metodologia de treino: volume por músculo, progressão por nível, ciclo de quatro semanas. O modelo de linguagem (Google Gemini 2.5) entra em quatro pontos onde o problema é texto, e o app funciona sem ele. Abaixo, cada passo e quem decide.
Quem decide cada passo
Da curadoria do catálogo à conversa com o treinador, em sete fases. Cada passo está na raia de quem o executa. Clique num passo para ver o arquivo, a entrada, a saída e, quando é IA, o modelo, a validação e o que acontece se ela falhar.
O laço de progressão não tem IA
O plano salvo guarda só a seleção de exercícios. A cada leitura, a semana é recalculada a partir do histórico: o mesmo histórico gera sempre a mesma próxima sessão. Isso torna o acompanhamento reproduzível, testável e explicável — o chat lê esse estado para explicar o porquê, mas não o altera.
Os quatro lugares onde o modelo fala
Todos produzem texto para a pessoa ler. Nenhum grava número de treino. O único que pode sugerir uma mudança no plano, o chat, só a propõe entre opções pré-calculadas pelo motor, e o servidor revalida antes de aplicar. O texto em si não é verificado: uma explicação do chat pode estar errada; o plano, não muda por causa dela.
| Ponto | Modelo | Entra | Sai | Validação | Se falhar |
|---|
IA offline, com humano no meio
O motor só escolhe entre exercícios marcados como elegíveis. Essa marcação e as notas biomecânicas usadas no scoring vêm de scripts que rodam fora do app: regras primeiro, modelo depois, e nada é gravado sem relatório e revisão.
1.653 exercícios, com GIF, músculo, subgrupo, equipamento e contraindicações.
Sai o que não tem GIF, é alongamento, usa equipamento raro ou está na lista de movimentos de risco.
Gemini 2.5 flash, com raciocínio, avalia por subgrupo muscular, com o pool atual como contexto e critérios fixos.
Lista o que entra, o que sai e o motivo de cada um. Nada vai ao banco nessa etapa.
O relatório é lido antes de gravar, e uma rodada inteira pode ser descartada. Cobertura mínima por slot é medida antes.
Respostas fora do formato ou com erro transitório nunca viram dado. Notas biomecânicas só aceitam 0,2, 0,5 ou 0,8.
Exemplo real: uma re-curadoria completa foi descartada na revisão porque o modelo tirava agachamento livre, stiff e remada curvada do pool, por um critério de “seguro para iniciante” lido de forma ampla demais. O prompt foi corrigido e só a curadoria incremental foi gravada.
O motor é medido, não só testado
Um simulador roda o motor real sobre o catálogo exportado, sem banco, e gera 200 planos por perfil. As métricas abaixo são acompanhadas a cada mudança de regra ou de catálogo.
| Perfil | Exercício faltando | Fora do músculo | Movimento de risco | Duração estimada (pedida) |
|---|---|---|---|---|
| Academia, intermediário, 4 dias | 0 | 0% | 0 | 46 min (60) |
| Academia, avançado, 3 dias | 0 | 0% | 0 | 68 min (75) |
| Academia, novato absoluto, 3 dias | 0 | 0% | 0 | 49 min (60) |
| Casa, halteres, 4 dias | 0 | 0% | 0 | 46 min (60) |
| Casa, só peso corporal, 3 dias | 0 | 0% | 0 | 32 min (45) |
Qualidade com variedade
Em 64–70% das escolhas, o exercício sai dos 5 de maior nota do slot. Um sorteio uniforme acertaria 7–24%. O restante é variação deliberada, sempre dentro do pool seguro.
Semana 1 começa leve
A duração estimada fica abaixo da pedida porque a semana 1 parte do volume mínimo eficaz. No intermediário de 4 dias, a sessão vai de cerca de 47 para 63 minutos até a semana 3 e cai para 39 no deload.
Fonte: scripts/simulate-engine.mjs, seed 42, catálogo de 13/10/2026.
O que a IA nunca faz
Limites garantidos pela arquitetura, não pelo prompt: o código que decide esses pontos não chama modelo nenhum.
Escolhe os exercícios do plano. A seleção é scoring sobre o pool curado, com sorteio ponderado entre os melhores candidatos.
Define séries, repetições, RIR, descanso ou carga. Isso é prescrição semanal e progressão, em código testado.
Relaxa uma restrição. Equipamento disponível, contraindicações de bloqueio e travas de novato são filtros que nenhum fallback ignora. Contraindicações de cautela não excluem: reduzem a chance de o exercício ser escolhido.
Altera o plano sozinha. Uma troca sugerida no chat é um id de uma lista do motor, revalidado no servidor antes do botão de aplicar aparecer.
Decide algo durante o treino. Os avisos da sessão vêm de regras locais, sem rede e sem custo de modelo; o chat só entra se a pessoa abrir.
Decide deload. O motor detecta os sinais de fadiga e propõe; quem confirma é o atleta.
Por que dividir assim
Reproduzível
Prescrição e progressão são determinísticas; a seleção aceita seed. Com ela, mesma entrada gera o mesmo plano, e é assim que a simulação compara versões do motor. Um bug vira um teste que falha, não uma resposta que muda a cada chamada.
Testável
Seleção, prescrição, progressão, mesociclo, fadiga e platô são módulos puros: 494 testes em 32 suítes, sem banco e sem rede.
Seguro
Contraindicações e equipamento saem antes do scoring, por filtro de lista fechada. Na simulação, nenhum plano trouxe exercício de família bloqueada para ombro ou punho.
Custo previsível
O motor roda em memória, sem chamada externa: a simulação gera e analisa 1.000 planos em menos de 7 s. O modelo menor escreve o texto curto; o maior só entra no chat Pro e na curadoria offline.
Explicável
Cada exercício escolhido guarda o motivo do scoring, e o chat recebe o estado da metodologia. A IA explica uma decisão que existe, em vez de inventar uma.
Versionado
Todo plano é carimbado com a versão da metodologia. Mudança de regra é mudança de código, com diff e teste.
O que ainda não fazemos
Dicas fixas
As dicas de execução são escritas uma vez, quando o plano nasce. Não acompanham a carga e as reps que mudam semana a semana.
Carga inicial estimada
Sem histórico, a carga sai de razões por músculo sobre o peso corporal e começa 20% abaixo. As primeiras sessões calibram; não há teste de 1RM.
Esforço não registrado
A sessão não pergunta mais quantas reps sobraram. Para o avançado, a progressão usa reps e carga; o ajuste fino por esforço só vale para histórico antigo ou importado.
Chat sem verificação
As respostas do chat não são checadas contra a metodologia. O prompt carrega o estado do motor, mas uma explicação pode sair imprecisa.