Kit de plano · academia e estúdio · código aberto

O plano completo para o aluno voltar amanhã

Especificação, 99 testes de aceitação, travas e prompts para um agente construir, no seu ambiente, o atendimento de uma academia ou estúdio pequeno: planos e matrícula, aulas com vagas e lista de espera, check-in, ficha de treino, exercícios animados e a equipe no Telegram. O sistema ainda não está implementado: este repositório é o plano, e você roda a implementação.

Banner do Atende Academia: planos e matrícula, aulas com vagas e lista de espera, check-in, ficha de treino, exercícios animados e equipe no Telegram
O que é

Um kit para pedir ao agente: do contrato aos 99 testes verdes

Aqui não há aplicativo pronto. Há o contrato do que o aplicativo deve fazer, a bateria de testes que prova isso e as travas que impedem o agente de trapacear. Quem constrói é o Claude Code ou o Codex, rodando na sua máquina, pela sua assinatura. O irmão Atende Fisioterapia segue o mesmo molde, e o atende-clinica, que veio antes, foi feito exatamente assim e fechou 93 de 93 testes.

Planos com status de pagamento manual, aulas coletivas com vagas e lista de espera, check-in e reativação com consentimento, ficha de treino, avaliação física como dado sensível e equipe no Telegram

🏋️ O sistema que sai do plano

Alunos e planos, aulas coletivas com reserva, check-in e a ficha de treino do professor. No centro está a aula com vagas: reserva com limite, lista de espera com oferta automática e falta automática. Python 3 só com biblioteca padrão e SQLite, para uma academia por instalação.

📦 O kit

Especificação de 23 seções (0 a 22), 99 testes caixa-preta, 20 decisões já propostas, mapa para o Raio-X, prompts para /goal e para o loop headless, e as travas que congelam o contrato. Um validador adversarial já passou por tudo e achou 10 problemas, 2 deles travariam um implementador honesto.

📈 Fonte: Raio-X de Margem

Falta sem aviso, horário ocioso e aluno que some são os vazamentos que o plano ataca. O sistema devolve seis números do mês ao painel do Raio-X de Margem, que é a fonte das regras de negócio. Não existe pacote de academia lá: o kit usa o modelo genérico de serviços com agenda, e cada mapeamento é uma premissa.

💳 Plano e matrícula, pagamento manual

Planos mensal, trimestral, anual e aulas avulsas, com preço e vigência. A matrícula é ativa, vencida, trancada ou cancelada. O pagamento é só um status manual (pago ou pendente) marcado pela equipe, mais o aviso de vencimento. Nenhum Pix, cartão ou intermediário de pagamento no v1.

📍 Check-in e reativação

O aluno faz check-in pelo código na recepção ou pelo chat (cheguei), um por dia. Quem some há N dias recebe uma mensagem de reativação, mas só se tiver dado consentimento: reativação é marketing, não aviso do contrato. "PARAR" bloqueia tudo que é automático.

🔒 LGPD e avaliação física

Exportar e anonimizar os dados do aluno. O resultado da avaliação física (peso, altura, medidas) é dado sensível: só a equipe vê, nunca pela conversa, e é apagado junto com o aluno. A LGPD e o 192 são do Brasil.

Como funciona

Da matrícula ao "cheguei" de cada dia

Este é o fluxo do sistema planejado, o que o agente vai construir. Servidor Python sem dependências, SQLite numa pasta de dados e Docker para a VPS. Evolution e Telegram entram só por variáveis de ambiente; sem elas, a caixa de saída é simulada e nenhuma chamada de rede sai.

Chat do site ou WhatsApp (Evolution)→ Plano e matrícula→ Reserva de aula, vaga ou espera→ Check-in e falta automática→ Ficha de treino e exercício animado→ Reativação e números para o Raio-X

Aluno

Pelo chat ou pelo WhatsApp pergunta pelas aulas, reserva e cancela, vê meu plano e meu treino, pede explica agachamento, faz cheguei, tira dúvidas do FAQ, pede atendente e manda "PARAR" quando não quer mais mensagens. Palavra de alerta de saúde (dor forte, dor no peito, falta de ar, desmaio, tontura, lesão e outras) responde com 192 e avisa o professor.

Equipe no Telegram

Avisos de reserva e de cancelamento, e os comandos /aulas [data], /fila, /responder e /encerrar, também em resposta direta à mensagem do aluno.

Página /equipe

Com token: alunos, planos e matrículas, grade, reservas, check-ins, fichas, avaliações, biblioteca de exercícios, FAQ, cadastros e fila humana.

Aulas, vagas e espera

A grade semanal tem modalidade, professor, sala e vagas. A reserva respeita o limite de vagas e a antecedência; com 10 pedidos para a última vaga, um recebe 201 e os outros 409. Quando alguém cancela, o primeiro da lista de espera recebe a oferta automática.

Prazo de cancelamento e falta

Cancelar dentro do prazo (padrão 2 h antes) devolve o crédito. Depois do prazo, a vaga é liberada e a espera dispara, mas o crédito avulso não volta. Reserva sem check-in no dia da aula vira falta automática na rodada de tarefas, e a equipe pode corrigir.

Ficha de treino

O professor monta a ficha com exercícios da biblioteca (séries, repetições, carga, descanso). O aluno pede meu treino de hoje e recebe o treino da vez, em sequência a cada check-in. O bot mostra a ficha do professor e nunca prescreve.

🎞️ Demonstração: exercício animado só com CSS

Cada exercício é um SVG com animação só em CSS, sem script e sem SMIL. Medido em render real, o HyperFrames não tem adaptador SMIL: o movimento SMIL saiu parado ou fora de fase no MP4, e só o CSS ficou fiel. Este é o agachamento: pés fixos no chão, joelhos para a frente, quadril para trás.

Agachamento

Os 12 exercícios do exemplo

Agachamento, flexão de braço, prancha, remada curvada, supino reto, levantamento terra com bastão, afundo, elevação pélvica, abdominal, desenvolvimento de ombros, puxada alta e polichinelo.

Cada um tem a página pública /exercicios/<id> com o SVG animado, os passos, os erros comuns e os cuidados. No WhatsApp vai um MP4 de 4 s renderizado pelo HyperFrames, passo de build local (tools/render-exercicios); sem o MP4 (ou sem PUBLIC_URL), vai o link da página. Os 12 SVGs são desenhados pelo implementador, e o movimento é conferido no nível 4 pelo verificar-independente.py, que diz PULADO quando falta a ferramenta.

Pré-requisitos

O que você precisa

Para rodar o plano basta Python para os testes e um agente logado pela assinatura. Docker só entra na verificação final e no deploy; Evolution e Telegram são opcionais e seus. Para os vídeos dos exercícios, Node 22 ou mais novo, o HyperFrames e o ffprobe.

Python 3.10+ e pytest

Os testes usam pytest (ferramenta de desenvolvimento). A aplicação em si não terá dependências.

# conferir
python3 --version
python3 -m pip install pytest

Claude Code ou Codex

Pela assinatura, sem API paga. Para o loop headless, clone o execucao-longa em ~/projetos.

# conferir
codex --version   # ou: claude --version

Docker, Evolution e Telegram

Docker faz o build final da verificação independente. Uma instância Evolution e um bot do Telegram só se quiser os canais; as credenciais ficam no .env.

# conferir
docker --version
Guia de uso · passo a passo

Do clone ao sistema implementado, no seu ambiente

Os comandos abaixo são os do repositório. O ciclo: responder as decisões, congelar o contrato, rodar o agente até 99 passed e LIMITES OK, conferir com a verificação independente, gerar os vídeos e pedir a revisão de um profissional de educação física.

1

Clone o repositório

Ainda não há ./atende: o repositório só tem o plano. Confira que a suíte é coletada sem erro e que nada passa ainda (faltando a implementação, os testes falham ou dão erro, e isso é o esperado).

git clone https://github.com/inematds/atende-academia && cd atende-academia
python3 -m pytest -q --collect-only | tail -n 1   # 99 tests collected
python3 -m pytest -q | tail -n 1                  # 30 failed, 69 errors (0 passed)
2

Responda as decisões abertas

Leia docs/DECISOES-ABERTAS.md: são 20 propostas padrão já aplicadas na especificação e nos testes. Responder "ok em tudo" destrava a execução. Se mudar algo marcado com ⚠ (por exemplo a reativação só com consentimento, a falta automática ou o prazo de cancelamento), edite docs/ESPECIFICACAO.md e tests/ antes do passo 3 e confira a contagem. Para um piloto real, troque também exemplos/academia.json pela sua grade, planos, professores, FAQ e exercícios.

less docs/DECISOES-ABERTAS.md
python3 -m pytest -q --collect-only | tail -n 1
3

Congele o contrato

Com o git status limpo, o script grava o hash de tests/, pytest.ini, da especificação e dos verificadores em hash-congelado.txt e faz um commit. Daí em diante, qualquer mudança nos testes é detectada.

git status
bash longrun/2026-10-05-academia-v1/congelar.sh
4

Rode o agente (escolha um caminho)

a) Loop headless com o Codex (recomendado). O loop.env define 20 ciclos de 30 min, 8 GB por ciclo, parada após 3 ciclos sem avanço, modelo gpt-6-astra e CODEX_ARGS="-c sandbox_workspace_write.network_access=true": sem isso o sandbox do Codex bloqueia o servidor local dos testes.

~/projetos/execucao-longa/tools/loop-longrun.sh longrun/2026-10-05-academia-v1

b) /goal no Claude Code. Abra uma sessão nova do Claude Code na pasta do projeto e siga longrun/2026-10-05-academia-v1/prompt-goal-claude.md: cole a condição de /goal (a saída precisa mostrar 99 passed e LIMITES OK) e, como primeira mensagem, o bloco de prompt-goal-codex.md.

claude   # sessão nova, dentro de atende-academia

c) Codex TUI aberto. Cole o conteúdo de longrun/2026-10-05-academia-v1/prompt-goal-codex.md inteiro (ele começa com /goal).

codex -c sandbox_workspace_write.network_access=true
5

Acompanhe

No loop, o loop.log mostra cada ciclo e progress.md traz uma linha por checkpoint; o state.md diz o que funciona, o que falta e como retomar. Teste em conflito com a especificação vai para failures.md: é portão humano, e o agente não deve ajustar teste nem especificação.

tail -f longrun/2026-10-05-academia-v1/loop.log
cat longrun/2026-10-05-academia-v1/state.md
6

Confira com a verificação independente

Quando o agente disser "concluído", rode os três comandos. O último o agente nunca viu: ele procura valores da fixture copiados no código, sobe uma academia que nunca apareceu (outra grade, outros planos e prazos, um feriado, outro relógio), abre 3 SVGs num Chromium para provar que se mexem, renderiza um exercício pelo HyperFrames e faz docker build com healthcheck. Sem Chromium, sem HyperFrames ou sem Docker, essas etapas saem como PULADO, nunca como OK. Depois, abra /, /equipe e /exercicios/prancha no navegador.

python3 -m pytest -q tests/                                         # 99 passed
bash longrun/2026-10-05-academia-v1/verificar-limites.sh               # LIMITES OK
python3 longrun/2026-10-05-academia-v1/verificar-independente.py      # INDEPENDENTE OK
7

Gere os vídeos MP4 dos exercícios

Passo humano, depois da implementação: o tools/render-exercicios (escrito pelo agente) usa só o HyperFrames já instalado, sem baixar nada, e precisa de Node 22 ou mais novo, Chromium e ffprobe. Ele gera web/exercicios/<id>.mp4 (4 s, 720×720, sem áudio) a partir de cada SVG. Instale o HyperFrames depois que o loop fechar, porque o agente não deve baixar pacote. O WhatsApp baixa o vídeo pela URL pública, então o caminho do MP4 exige PUBLIC_URL com HTTPS.

npm install hyperframes
tools/render-exercicios --ids agachamento,prancha --saida web/exercicios
8

Rode a sua academia

Com o sistema implementado, copie o exemplo, troque o token e suba o servidor. O chat do aluno fica em /, a página da equipe em /equipe (header X-Token) e cada exercício em /exercicios/<id>. O deploy na VPS é seu, com as suas credenciais; o roteiro (Docker, webhooks da Evolution e do Telegram, backup) o agente escreve no README, seção 22 da especificação.

mkdir -p dados && cp exemplos/academia.json dados/academia.json
./atende serve --porta 8080 --dados dados
./atende raiox --dados dados --mes 2026-10 --acompanhamento acompanhamento.json

⚠️ Antes de usar com aluno real: revisão de um profissional de educação física

Os 12 SVGs são figuras esquemáticas desenhadas pelo implementador, e os passos, erros comuns e cuidados de cada exercício foram escritos como exemplo: um profissional de educação física precisa revisar tudo antes de ir para aluno real, incluindo a lista de palavras de alerta de saúde. As regras do conselho (CREF/CONFEF) não foram pesquisadas: a trava de campanha é só o mínimo seguro (promessa de resultado e "antes e depois"), sem citar artigo, e o dono confirma as regras antes de publicar qualquer campanha (decisão 5). A base legal da avaliação física, dado sensível, também é do dono ou do advogado confirmar (decisão 6).

O que vem no kit

Contrato, testes e travas, com os números reais

Tudo o que o agente precisa para construir, e tudo o que impede que ele finja ter construído.

99 testes de aceitação

Caixa-preta, por HTTP e por linha de comando, em 13 arquivos.

test_integracoes.py           16
test_exercicios_svg.py        14
test_aulas.py                 12
test_alunos_planos.py          9
test_conversa.py               8
test_treino.py                 6
test_cadastros.py              6
test_basico.py                 6
test_docker.py                 5
test_checkin.py                5
test_campanhas.py              5
test_avaliacao.py              4
test_lgpd_raiox.py             3

Especificação de 23 seções

docs/ESPECIFICACAO.md, seções 0 a 22: execução, academia.json, alunos, planos e matrículas, aulas coletivas, check-in, treino, explicação animada, avaliação física, API HTTP, conversa, tarefas, campanhas e trava de publicidade, Raio-X, LGPD, Evolution, Telegram e Docker. Cobrança por Pix ou cartão, catraca, app do aluno, aulas particulares e várias academias no mesmo servidor estão explicitamente fora (seção 16).

Travas contra atalho

Hash congelado de tests/, pytest.ini, da especificação e dos verificadores. Escopo de arquivos: o agente só mexe no código e nos próprios registros. Sem chave de API, sem URL externa no código, sem 0.0.0.0 e sem SMIL nem script nos SVGs. O verificar-limites.sh confere tudo isso e imprime LIMITES OK.

Verificação independente

Nível 4, escondido do agente: procura valores da fixture no código, sobe uma academia nunca vista, confere o movimento dos SVGs e o MP4 quando as ferramentas existem, e faz docker build e healthcheck. Só assim "99 passed" prova uma lógica geral.

20 decisões já propostas

Linguagem, canais, cobrança só manual, trava de campanha, avaliação física como dado sensível, reativação com consentimento, falta automática, cancelamento tardio, check-in por código, os 12 exercícios com animação só CSS e o Raio-X. Só os itens marcados com ⚠ mudam o contrato.

Validado por um agente adversarial

Um validador que não viu o planejamento conferiu teste contra especificação e tentou burlar as travas. Achou e corrigiu 10 problemas: 2 bloqueavam a execução, 5 atrapalhavam e 3 eram cosméticos. O principal: a especificação aceitava SMIL, e o render do HyperFrames não tem adaptador SMIL, medido em render real. O relato está em docs/VALIDACAO.md e cada correção tem uma linha em FALHAS.md.

As regras de negócio vêm do Raio-X

Falta sem aviso, horário ocioso, aluno que não volta e recepção presa na agenda: docs/MAPA-RAIO-X.md liga cada vazamento do pacote de serviços a uma peça da v1 ou ao motivo de ficar fora. O Raio-X não traz número de mercado de academia, então faltas, ocupação e renovação ficam como premissa a medir na sua academia. Detalhes no guia do Raio-X de Margem.

Regras brasileiras embutidas

A LGPD (aviso de vencimento, espera e aula cancelada como execução do contrato; reativação e campanha só com consentimento; avaliação física como dado sensível; exportar e anonimizar) e o 192 para emergência. A regra do conselho profissional (CREF/CONFEF) ainda não foi pesquisada. Fora do Brasil, troque pela lei de privacidade, pelo conselho e pelo número de emergência locais.

Roadmap

Onde está e para onde vai

O plano está pronto e validado. A implementação ainda não existe: ela nasce quando você roda o /goal ou o loop, pelo método execucao-longa. O atende-clinica seguiu o mesmo caminho e fechou 93 de 93.

Plano ✅
Especificação, testes e travas validadosContrato de 23 seções, 99 testes de aceitação, 20 decisões propostas, mapa para o Raio-X e validação adversarial concluída em 05/10/2026.
Implementação
Você roda o /goal ou o loopResponder as decisões, congelar o contrato e deixar o agente trabalhar até 99 passed e LIMITES OK, depois a verificação independente. Hoje o sistema não está implementado.
Vídeos
MP4 dos exercícios, na sua máquinaRodar o tools/render-exercicios uma vez, com o HyperFrames instalado, e publicar os arquivos junto com PUBLIC_URL.
Piloto
Numa academia realTrocar o exemplo pela grade, planos e exercícios verdadeiros, ter a revisão de um profissional de educação física, confirmar as regras do CREF/CONFEF, publicar na VPS e acompanhar faltas, ocupação, renovação e frequência no Painel de Recuperação do Raio-X.
Depois
Fora da v1Cobrança, catraca, app do aluno, aulas particulares, várias academias, login por usuário, LLM nas respostas e interface em EN/ES ficam para uma próxima versão, com portão humano.