Quem opera
Hybrid é a plataforma de treino da Thabata Almeida para HYROX, treino híbrido e CrossFit. Conta de atleta ou de treinadora, no mesmo login. Site em Next.js e app Expo no mesmo serviço.
Conta
Cadastro pede nome, e-mail e senha. A senha entra com scrypt; o que fica no banco é o hash, não a senha. O papel é atleta ou treinadora. Dá para guardar preferência de tema (claro, escuro ou seguir o sistema). Sessão: JWT de acesso de 15 minutos e refresh opaco de 30 dias, em cookie httpOnly no site ou Bearer no app. O token de refresh não é gravado em claro — só o hash. Reusar um refresh já trocado derruba a família da sessão.
Convite
A treinadora convida de dois jeitos. Direct: quem já tem conta precisa aceitar. Link: quem se cadastra pelo token já entra vinculada. O convite tem prazo e pode ser revogado. Uma treinadora ativa por pessoa; dá para treinar sem treinadora. Sair do vínculo não apaga a conta nem a anamnese.
Anamnese (não vai ao perfil público)
Ficha de treino da atleta: idade, peso, frequência, sessões no dia, tempo de sessão, anos de treino, modalidades, se corre (km e pace), lesões, objetivo, nível, onde treina (HYROX, Cross, academia ou prédio) e data da prova alvo. Cada salvamento gera uma versão de auditoria. A treinadora vinculada lê isso na ficha e no CRM. O perfil público não inclui anamnese, e-mail, peso, lesão nem box — só nome e o que a pessoa escolheu mostrar (foto, bio de 200 caracteres, modalidades, provas).
Fotos e vídeos de exercício
Foto de perfil é opcional, até 2 MB, JPG/PNG/WebP, no disco do servidor em /uploads/profiles (atleta) ou /uploads/trainers (treinadora). Vídeo de exercício é arquivo local MP4 ou WebM, até 40 MB, em /data/exercise-videos na produção. Não há YouTube, nem upload de foto/vídeo feito pela aluna no treino. O vídeo entra na execução e na biblioteca para quem está logada e pode ver aquele treino — não no perfil público.
E-mail de senha (Resend)
O único e-mail transacional é redefinição de senha, via Resend, quando a chave está configurada. O link vale cerca de 1 hora e é de uso único; no banco fica o hash SHA-256 do token, nunca o token cru. Sem chave de envio o pedido ainda é gravado; em desenvolvimento o caminho aparece no log do servidor. Não mandamos newsletter.
Gemini (semana, biblioteca e ditado)
Com GEMINI_API_KEY, o chat da semana e o “Criar com IA” da biblioteca chamam o Gemini Flash da Google. Na semana vai um cartão compacto da aluna: nome, idade, nível, frequência, minutos, corrida, modalidades, equipamentos, objetivo, lesões, prova alvo e provas recentes do perfil — sem e-mail. Na biblioteca vai o pedido e o catálogo de exercícios. O ditado em português envia o áudio para transcrever e devolve só o texto. Sem chave, o app cai no parser local e o ditado não transcreve. Não gravamos o histórico do chat no banco: rascunho vira treino só quando a treinadora confirma.
Onde os dados ficam
Produção na Render: um Web Service, SQLite e arquivos num disco persistente (/data). Esse serviço roda nos Estados Unidos. Resend (e-mail) e Google (Gemini) processam o que descrevemos acima, cada um na infraestrutura deles. Limitação de tentativas de login, cadastro e reset usa o IP em memória no processo — não vai para o banco.
O que este app não faz
Sem menores como público: o cadastro não tem verificação de idade, mas o Hybrid não é feito para criança. Sem Garmin, Apple Health, relógio ou wearables. Sem pagamento, Stripe, Apple IAP ou cobrança in-app — plano mensal/trimestral/anual no CRM é texto da treinadora, não fatura. Sem anúncio de terceiros.
Quem mais vê o quê
Atleta vê a própria semana, execução e histórico. Treinadora vê alunas vinculadas, anamnese, atribuições, execuções dos treinos dela e o CRM (incluindo CSV com nome, e-mail, cidade, status, frequência, plano e se a anamnese foi preenchida). Perfis públicos em /p/[id] e /p/t/[id] são o que cada pessoa publicou.
Apagar a conta
No perfil do site e no app: Apagar conta. Não é só por e-mail. Pede confirmação digitando APAGAR.
Atleta: some a conta, o login deixa de funcionar, anamnese e versões, perfil, foto, provas, convites e treinos atribuídos a você. Execuções que a treinadora ainda tiver ficam sem o seu nome (“Conta apagada”) e sem observações.
Treinadora: some a conta, perfil profissional, fotos, exercícios próprios e vídeos, treinos, templates, convites e CRM. As alunas não perdem a conta delas — perdem o vínculo com você. Atribuições e o histórico daqueles treinos somem com os treinos.
Contato
Dúvida sobre os seus dados: pela própria conta, ou pelo perfil profissional da treinadora (Instagram/WhatsApp, se ela publicou). Esta página descreve o que o código faz hoje.