Ficha Técnica
Papel
Criador e desenvolvedor
Stack
🚧 Em construção — o núcleo (treinos, execução, convites, assinaturas) está funcional de ponta a ponta; dieta e relatórios ainda estão em desenvolvimento.
Personal trainers gerenciam alunos por WhatsApp e planilha: o treino vai em PDF, o acompanhamento se perde na conversa, e a cobrança é manual. O Coach App é uma plataforma mobile + web onde o coach monta planos de treino com prescrição completa — séries, reps, cargas, supersets — e o aluno executa pelo celular com timer de descanso, histórico e volume calculado automaticamente.
Como funciona
- Coach: monta planos com wizard multi-etapas, biblioteca de exercícios (centenas seedados + customizados), templates, dias de treino e prescrição por série (reps alvo/mín/máx, carga, duração para exercícios de tempo).
- Aluno: recebe convite por código/deep link, executa o treino com registro de cada série, timer de descanso, resumo com volume total e histórico — em kg ou lb, por sessão.
- Vínculo coach-aluno: sistema de convites v2 com troca de coach segura (confirma antes de desvincular, ajusta contadores dos dois lados, notifica todo mundo por push + in-app + e-mail) e limite de alunos por plano.
- Monetização: assinaturas in-app via RevenueCat (planos starter/professional/enterprise), com webhook idempotente.
- Engajamento: push via FCM respeitando preferências, lembretes de treino 3× ao dia e relatório semanal por cron.
- Login sem senha: OTP por e-mail que unifica login e cadastro, com refresh token rotativo.
Arquitetura
Monorepo Turborepo com app mobile (Expo/React Native), web (Next.js) e API (Express + Prisma), mais pacotes compartilhados de tipos, i18n e UI.
Visão de componentes e infraestrutura:
Fluxo de troca de coach (o caso espinhoso):
Decisões técnicas que valem a pena contar
Backend plugável por env var. O mobile fala com repositórios atrás de interfaces (RepositoryFactory): mock, pocketbase ou api. Isso permitiu desenvolver a UI inteira antes do backend existir — e depois migrar de PocketBase para a API própria sem tocar em uma tela. O mesmo padrão cobre pagamentos, com detecção automática de Expo Go para cair no provider mock quando módulos nativos não estão disponíveis.
Webhook RevenueCat blindado. Assinatura HMAC-SHA256 verificada com timingSafeEqual, router montado antes do express.json() para preservar o raw body, idempotência por tabela de entregas com chave única e resolução de usuário em cascata para sobreviver ao aliasing de clientes do RevenueCat. Evento órfão responde 200 — para não gerar retry infinito.
Inicialização de pagamento resiliente. Deduplicação de inicializações concorrentes via promise compartilhada, cache limpo em falha para permitir retry — o tipo de detalhe que evita o clássico "pagamento travou na primeira abertura".
Stack
Turborepo + pnpm · React Native 0.81 + Expo 54 · Tamagui · Zustand · Next.js 15 · Express + Prisma + PostgreSQL · RevenueCat · Firebase Admin (FCM) · i18n pt-BR/en-US · Docker Compose.
Status
🚧 Núcleo funcional de ponta a ponta: auth OTP, planos, execução de treino, convites com deep link, assinaturas, push e crons. Em desenvolvimento: módulo de dieta (hoje mockado), relatórios de progresso com gráficos, métricas corporais e export PDF.
Curtiu o projeto?
Se quiser conversar sobre esse projeto, arquitetura ou uma oportunidade de trabalho, é só me chamar. 🚀
contato@racoelho.com.br