Bohemian Gym
Resumo
Bohemian Gym é um app de treino para atletas e academias. O atleta monta as próprias rotinas, e o app conduz a sessão enquanto ela acontece (rounds de combate, sino de descanso com audio ducking, recuperação de sessão, RPE retroativo) e transforma o histórico em recomendações de sobrecarga progressiva. Cada academia recebe builds white-label, papéis próprios e um fluxo treinador-atleta. São 5 flavors em Flutter (atleta, treinador, manager, consumidor e console) sobre um core offline-first compartilhado, com uma API NestJS 11 + MongoDB e um assistente com Gemini.
Pontos-chave
Sessões conduzidas pelo appExecução de sessão em tempo real como moat de produto vs competidores tipo Excel com UI
Diferencia o Bohemian Gym de competidores de log-after-the-fact (Strong, Hevy, Jefit) ao conduzir a sessão de treino em si: combat rounds com timer de descanso, sino em background com audio ducking, e modelo PendingSet para acompanhamento em progresso.
Nenhum dado perdido na interrupçãoContinuidade sem perda de dados frente a interrupcao, background ou crash
Recuperou sessões de treino interrompidas através de snapshot do cubit e restoreFromSnapshot, de modo que uma sessão interrompida nao perde dados e o usuario continua onde parou.
Cinco flavors, white-label por academia5 flavors a partir de 1 codebase com builds white-label por academia
Atende 5 flavors (atleta, treinador, manager, consumidor e console) a partir de um único monorepo Flutter, com builds white-label por academia (slug da academia mapeado para applicationId / bundle id) e papéis que cada academia define com role bindings e audiências por app.
Fluxo de convite coach-atletaWorkflow coach-atleta entregue sobre codigos de convite
Habilitou colaboracao coach-atleta através de codigos de convite e fluxo de atribuicao (aceitar, rejeitar, revogar, pendente), dashboard de atribuicao de rotinas e biblioteca compartilhada de exercicios e sistemas.
Auth e sync reforçadosSeguranca production-grade e sync v2 offline-resiliente
Fortaleceu autenticacao e sincronizacao de dados para produção através de hashing de senha no cliente, rotacao de refresh com detecção de reuso, snapshot backup, detecção de drift e UI de resolucao de conflitos.
Assistente de IA reforçadoAssistente IA in-product endurecido com taxa de ataque verificada em 0%
Embutiu um assistente IA sobre Gemini no app (Assistant v2) com chat polimorfico, controles de budget e endurecimento contra prompt injection em 7 camadas de defesa (0% ASR no baseline de benchmark Spikee).
Motor de sobrecarga progressivaMotor de sobrecarga progressiva diferencia de apps de apenas logging
Impulsionou progresso real de forca através de inteligencia de sobrecarga progressiva: rastreia metricas de levantamento entre sessões e recomenda ajustes de peso / repeticoes baseados em historico de volume e intensidade, em vez de deixar o atleta adivinhando.
API NestJS 11 sobre MongoDB13 módulos de negócio, 45 arquivos spec com cerca de 470 casos Jest, e testes de integração com Supertest e mongodb-memory-server
Construiu a API em NestJS 11 + MongoDB (Mongoose): login com JWT e com Google, throttling, Swagger, tracing com OpenTelemetry e um assistente Gemini que transmite por SSE com modelos de fallback e orçamento de tokens. O deploy sai como imagem Docker em bohemian.accentio.dev pelo Statio, a ferramenta de deploy criada por ele.
Marionette nos cinco flavorsUm agente MCP dirige os 5 flavors em builds de debug
Conectou um binding do Marionette nos builds de debug dos 5 flavors, fora do release por tree-shaking, e uma config que ensina ao driver os componentes do design system, para um agente MCP ler o rótulo de cada botão em vez de um nó vazio.
Guia de código travado por testes20 testes de arquitetura rodam com a suíte
Escreveu o guia de código do projeto (um CLAUDE.md de 2.300 linhas) e o travou com 20 testes de arquitetura, como a pureza de imports do design system e o grafo de imports do console.
CI até o Firebase App DistributionCerca de 1.360 casos de teste Flutter em 158 arquivos
Publica o app com GitHub Actions e Fastlane no Firebase App Distribution: a chave de assinatura vem do GCP Secret Manager via OIDC e o pipeline confere o assinante do APK.