← SITE

SHOWCASE TÉCNICOANDROID · KOTLIN · COMPOSE

COMO O RENSEI FOI CONSTRUÍDO.

Eu queria um app de treino que desse vontade de abrir. Como não achei, fiz o meu: treino, alimentação e hábitos, com a cara dos quadrinhos e dos animes que eu cresci lendo. Aqui eu conto como ele foi feito por dentro.

EM 30 SEGUNDOS
  • App Android de treino, alimentação e hábitos, com 18 Arquétipos de HQ e anime que mudam o visual inteiro.
  • Funciona sem internet e sem conta. Os dados ficam no celular, e o backup sai cifrado com uma senha que só a pessoa conhece.
  • Fiz sozinho, usando agentes de IA como time: eu escrevi as specs, aprovei os contratos e tomei as decisões, e os testes eram escritos antes do código e não podiam ser mexidos.
  • 78,7% de cobertura de testes, 18 Arquétipos e 13 Pets de pixel art.

O código é fechado, então não tem trecho de código nem estrutura do banco por aqui, só o raciocínio. Os diagramas são interativos: dá para clicar nas caixas e avançar passo a passo.

Um treino com o Pet: gravação de tela do Rensei
Um treino com o PetCarga, série feita e o descanso contando com o Pet esperando junto.
Trocando de Arquétipo: gravação de tela do Rensei
Trocando de ArquétipoO app inteiro muda de cor, fonte e traço na hora.
Marcando Hábitos: gravação de tela do Rensei
Marcando HábitosUm toque por hábito, até o Dia Perfeito.

01 · POR QUE O RENSEI EXISTE · 1 MIN DE LEITURA

TODO APP DE TREINO É IGUAL

Eu tentei vários apps para organizar a minha vida: um para treino, outro para dieta, outro para hábitos. Todos funcionavam, mas eram lentos, cinzas e chatos. Eu abria por obrigação, até o dia em que parava de abrir.

Eu sou geek. Cresci com HQ e anime, e queria algo que me desse vontade de continuar, que fosse divertido de usar e chamasse atenção. A ideia de verdade veio de uma conversa sobre o treino que o Tom Holland fez para o último filme do Homem-Aranha (o shape dele ficou absurdo). Fui atrás e descobri que tem site inteiro só com treino de super-herói. Pensei: e se o app tivesse isso? Você escolhe o personagem, o app inteiro veste a roupa dele, e você treina como ele treinaria.

O resto deste documento é o que acontece quando essa ideia precisa lidar com dado de saúde, celular sem internet e loja de aplicativo.

02 · AS REGRAS DO JOGO · 1 MIN DE LEITURA

QUATRO REGRAS ANTES DA PRIMEIRA LINHA

Antes de escrever código, eu fechei quatro regras. Quase toda decisão daqui para frente é consequência delas.

Funciona sem internet
O celular é a fonte de verdade. Se o Wi-Fi da academia cair no meio do treino, o app nem percebe.
Sem conta
Abriu, escolheu o Arquétipo, aceitou os termos, treinou. Ninguém precisa me dar e-mail para usar.
Dado de saúde pede cuidado
Peso, medidas e alimentação ficam no aparelho. Quando saem, saem cifrados.
Só Android
Health Connect, trabalho em segundo plano e personagem animado na tela são coisas nativas. O iOS ficou de fora de propósito.

03 · ARQUITETURA · 6 MIN DE LEITURA

TRÊS DECISÕES QUE EU DEFENDERIA NUMA ENTREVISTA

1. A verdade mora no banco

Imagine que você está na terceira série do supino e o Android fecha o app para liberar memória. Num app que guarda o treino na memória da tela, aquele treino foi embora. No Rensei, a Sessão de Treino é gravada no banco no momento em que você toca em iniciar, antes de a tela aparecer.

Isso virou regra para o app inteiro. A tela só avisa o que aconteceu ("tocaram em série feita") e espera o estado novo chegar. Quem decide é o ViewModel, e quem guarda é o banco. Cada tela tem duas partes: uma conversa com o ViewModel e a outra só desenha. É essa segunda que eu uso nas prévias e nos testes de interface, porque ela não depende de nada do mundo real.

FIG. 1 · ARQUITETURA EM CAMADAS · INTERATIVOTOQUE NUMA CAIXA PARA SABER MAIS
01

Você toca em SÉRIE FEITA. A parte da tela que desenha só avisa que o toque aconteceu, e não sabe nada de banco.

PASSO 1 DE 5

Tem um segundo lado dessa regra. Sessão, série e refeição são fatos: descrevem o que aconteceu, e fato não muda depois. Se você renomeia o exercício na quinta, o treino de segunda tem que continuar mostrando o nome que tinha na segunda. Por isso o histórico guarda uma cópia do que mostra no momento em que o fato acontece, e nada que a pessoa criou é apagado de verdade: vai para o arquivo. Mexa no cadastro abaixo e olhe o histórico.

FIG. 2 · O PASSADO NÃO MUDA · INTERATIVOMUDE O CADASTRO E OLHE O HISTÓRICO
CADASTRO · HOJESupino retoPeito de frango grelhado · 160 kcal por 100 g
HISTÓRICO · SEGUNDA PASSADASupino reto · 3 × 8 · 80 kgAlmoço: 150 g de peito de frango · 240 kcal

Toque numa mudança. O histórico guarda o que valia na hora em que você registrou: o nome do exercício e os macros da refeição. Os números são de exemplo.

2. O tema é um arquivo

Cada um dos 18 Arquétipos é um arquivo de Pack com duas partes: a skin, que diz a forma (fonte, traço, cantos e sombra), e uma paleta com 13 papéis de cor. O app não tem nenhuma cor escrita em tela. Se alguém declarar uma, a análise estática quebra o build. Foi o jeito que encontrei de garantir que trocar de Arquétipo troca o app inteiro, e não 90% dele.

O detalhe de que eu mais gosto: o Pack que vem no app e o Pack que a pessoa importa passam pelo mesmo leitor e pela mesma validação, inclusive a de contraste. Se fossem dois caminhos, o de importação ia ser esquecido e quebrar sem ninguém ver. Eu também fugi do Material Design de propósito. Ele é ótimo, mas qualquer componente dele chega com cara de app do Google, e aí o Morcego vira um app de banco.

3. Um backup que só você abre

O backup do Rensei é um arquivo que a pessoa salva onde quiser: no celular, num pendrive, numa pasta do Drive. E é aí que mora o risco, porque um arquivo com peso e alimentação esquecido numa pasta sincronizada é um prato cheio. Por isso ele já sai cifrado do aparelho, com AES-256-GCM e uma chave que vem da Senha de Backup.

Para transformar a senha em chave, escolhi o Argon2id, que é lento e gasta memória de propósito. Quem roubar o arquivo e tentar adivinhar a senha com placa de vídeo vai gastar muito tempo e dinheiro. O PBKDF2, que já vem no Android, seria o caminho mais fácil, mas apanha feio para esse tipo de ataque. O preço que eu aceitei: esqueceu a Senha de Backup, perdeu o backup. Ninguém recupera, nem eu.

FIG. 4 · O ARQUIVO DE BACKUP · INTERATIVOTOQUE EM CADA BLOCO

Guarda os parâmetros da derivação de chave e da cifra. Ele fica em texto claro porque o app precisa desses parâmetros antes de ter a chave. Mas ele é autenticado junto com o conteúdo: se alguém mexer nele para enfraquecer a derivação, o arquivo inteiro deixa de abrir.

01

Você digita a Senha de Backup duas vezes. Ela fica só na memória e nunca é gravada.

PASSO 1 DE 5

04 · O DOMÍNIO · 4 MIN DE LEITURA

SAÚDE, COMIDA, HÁBITOS E PONTOS

Como calcular o gasto sem mentir?

Muito app de dieta faz assim: pega a taxa metabólica basal, soma as calorias que o relógio mandou e ainda soma uma estimativa feita a partir dos passos. Na minha opinião, isso é o erro mais comum da categoria. Essas contas medem, em boa parte, a mesma energia, então o gasto fica inflado e a pessoa acha que pode comer mais do que pode. No Rensei, cada dia tem uma fonte só: o Health Connect, se ele tiver as calorias ativas, ou a taxa basal vezes o nível de atividade que você declarou. Sem dado suficiente, o campo fica vazio. Prefiro vazio a um número inventado.

Do Health Connect eu só leio passos, calorias ativas e peso. O app não escreve nada lá: a ideia é aproveitar o que outros apps e o relógio já medem.

Como buscar comida sem internet?

A base brasileira ideal seria a TACO, mas ela não tem licença aberta publicada. Então embarquei no app a base americana USDA, com nomes em português gerados por ferramentas que escrevi, e somei duas coisas: o Alimento do Usuário, para o que a pessoa não achar, e o Open Food Facts, para produto industrializado. O que está no celular aparece na hora. A internet só entra depois que você para de digitar.

Como cobrar hábito sem virar chato?

Os Hábitos foram a feature que mais mudou o tom do app. Você cria os seus (beber água, ler, meditar), define a meta e marca com um toque, até aos poucos, um copo de água de cada vez. Para não punir o dia ruim, a Sequência tem Fôlego: o primeiro dia perdido da semana não quebra nada. E o Nível de Constância sobe com a média dos dias e cai devagar, com seis títulos de anime shōnen, de "Figurante do Episódio 1" até "Lenda que Vira Abertura".

Aqui eu quebrei uma regra minha. O Pet nunca cobrava nada, mas nos Hábitos eu queria que ele lembrasse o que falta e desse uma bronca de vez em quando. Resolvi deixando a cobrança presa nessa aba, onde as metas foram escolhidas pela própria pessoa, e no máximo uma bronca por dia. No treino, o Pet continua só comemorando, porque um Pet que cobra treino perdido viraria o personal trainer que o app não é. Pelo mesmo motivo o Rensei só sobe a carga do Plano sozinho se você pedir, e nunca desce: progressão de carga é opinião de treinador.

Ponto vale o quê?

Ponto no Rensei é memória de esforço, e serve para liberar Pets quando o total passa de um marco. Cada crédito é gravado uma vez e nunca é editado, e o total é sempre a soma dos créditos. O banco recusa o mesmo fato duas vezes: o dia com treino vale 50, cada refeição vale 10 por dia, a semana com a meta batida vale 320 e o Dia Perfeito nos Hábitos vale 20. Tente creditar duas vezes.

FIG. 7 · LIVRO-RAZÃO DE PONTOS · INTERATIVOUM CRÉDITO POR FATO
Créditos gravados, do mais recente para o mais antigo
FATOPONTOSRESULTADO
Toque num fato acima.
TOTAL ACUMULADO640 pts
???1.000 pts
???3.000 pts
???7.500 pts
???12.000 pts

0 de 4 liberados. Faltam 360 para o próximo. O que está liberado é calculado a partir do total. Nada é descontado, e um Pet liberado nunca volta a trancar. O botão "+1 mês" é só um atalho desta demonstração.

05 · O QUE DEU ERRADO · 4 MIN DE LEITURA

CINCO TROPEÇOS E O QUE EU APRENDI

Nem tudo saiu certo de primeira. Estes são os tropeços que mais me ensinaram alguma coisa.

O botão que parecia desligado

O QUE ACONTECEU
Testando o app, o botão de concluir aparecia todo preto, como se estivesse desabilitado. Só que ele funcionava.
A CAUSA
Eram duas coisas juntas. O estado desabilitado só deixava o texto meio transparente, sem mudar o resto. E dois Arquétipos (O Ninja Raposa e O Sem-Magia) têm a cor principal quase preta, então o botão ligado já era um bloco escuro.
O QUE EU APRENDI
Com tema como dado, todo componente precisa funcionar nos 18 temas, e não só no que eu uso. Hoje o desabilitado tem visual próprio, sem sombra e com as cores apagadas da paleta, e os botões só desabilitam quando realmente não há nada para salvar.

A busca que só falava inglês

O QUE ACONTECEU
A base de alimentos embarcada vinha da USDA, toda em inglês. Quem buscasse "frango" não achava nada.
A CAUSA
Eu pensei na licença e no tamanho da base, mas não em quem ia digitar.
O QUE EU APRENDI
Escrevi ferramentas que traduzem os nomes a partir de duas tabelas revisáveis, sem mexer em código: 8.006 dos 8.116 alimentos ganharam nome em português. A busca passou a entender plural ("ovos" acha "ovo") e a ignorar o "de" de "peito de frango".

O treino de segunda numa terça

O QUE ACONTECEU
Num Plano organizado por dia da semana, se você não fizesse o treino de segunda, a Início continuava mostrando ele na terça.
A CAUSA
O dia escolhido ficava guardado até um treino terminar, e essa escolha passava na frente da regra do dia da semana.
O QUE EU APRENDI
Escolha do usuário também tem prazo de validade. Agora o app guarda a data da escolha, e no plano por dia da semana ela só vale no próprio dia. No plano em sequência (A, B, C), continua valendo até o treino terminar.

A senha que ia parar na nuvem

O QUE ACONTECEU
A primeira versão do backup salvava a Senha de Backup num arquivo de recuperação, para a pessoa não esquecer.
A CAUSA
Na prática, esse arquivo ia parar em Downloads ou numa pasta sincronizada, muitas vezes na mesma nuvem do próprio backup. Quem tivesse acesso aos dois abria tudo, e a cifra não servia para nada.
O QUE EU APRENDI
Tirei o arquivo e não coloquei nada no lugar. A senha é digitada duas vezes e o app nunca grava nem mostra de volta.

O ponto que dava para fabricar

O QUE ACONTECEU
No começo, cada série feita e cada exercício salvo valiam pontos.
A CAUSA
Enquanto ponto não valia nada, tudo bem. Quando ele passou a liberar Pets, dava para marcar 50 séries de um exercício de 3, ou adicionar e remover o mesmo exercício, e ganhar Pet sem treinar.
O QUE EU APRENDI
Toda recompensa vira alvo. Refiz a tabela para um crédito por fato e por dia, e o banco é quem garante que o mesmo fato não credita duas vezes.

06 · COMO EU TRABALHEI · 3 MIN DE LEITURA

UM TIME DE AGENTES DE IA, COM REGRA

Hoje dá para fazer quase tudo com IA. O que eu queria provar com o Rensei é que dá para fazer com IA e ainda assim ter engenharia de verdade. Construí o app sozinho, usando agentes de IA (Claude Code) como time, e o meu papel foi o de quem escreve o problema, decide e aprova.

Na prática, cada etapa seguia o mesmo ciclo:

  1. Spec e glossário primeiro. Antes de qualquer feature, eu escrevia a spec. O projeto tem um glossário com cada termo e os sinônimos proibidos: Sessão de Treino nunca é "workout". Esse glossário acabou sendo o melhor prompt do projeto, porque o agente, a spec e a tela passaram a usar as mesmas palavras.
  2. Rodadas de perguntas. Para cada feature grande, o agente me fazia perguntas em rodadas até a gente fechar cada decisão. Os Hábitos, por exemplo, passaram por mais de 30 perguntas antes da primeira linha de código.
  3. Contrato aprovado por mim. O agente propunha as assinaturas públicas e a lista de casos, em poucas linhas. Só depois que eu aprovava ele escrevia os testes.
  4. Testes congelados. Os testes eram escritos a partir da spec, antes do código, e ficavam congelados: cada arquivo tem um hash conferido antes da revisão, e só eu podia autorizar mudança. É a proteção contra o defeito mais traiçoeiro de trabalhar com agente, que é afrouxar o teste até ele passar e dizer que está tudo verde.
  5. Três papéis separados. Um agente implementava, outro rodava os testes e um terceiro revisava procurando código inútil e refatoração. Além disso, toda API de biblioteca era conferida na documentação atual antes de ser usada, em vez de confiar na memória do modelo.

Essa regra também cobrou o seu preço. Teve um momento em que dois testes congelados de navegação ficaram falhando por dias, porque o layout tinha mudado e só eu podia autorizar a atualização. E num outro, quatro testes foram selados com o hash errado: o arquivo estava com quebra de linha do Windows, e o Git guardava a do Linux. Nenhum dos dois era bug do app, mas os dois mostraram que a regra funcionava: nada passava sem alguém olhar.

Contraste dos Packs
Um teste confere o mínimo de 4,5:1 nos nove pares de texto e fundo dos 18 Packs.
Migrações
Toda mudança no banco tem teste, e migração que apaga tudo para recomeçar é proibida.
Cor literal
A análise estática quebra o build se uma tela declarar cor própria.
Tudo no computador
Banco, busca de alimentos e telas rodam nos testes sem precisar de celular.

07 · EM NÚMEROS

O RENSEI HOJE

78,7%de cobertura de linhas nos testes de unidade
18Arquétipos, entre HQ e anime
13Pets de pixel art

08 · O QUE VEM DEPOIS · 1 MIN DE LEITURA

PARA ONDE O RENSEI VAI

O que eu mais quero agora é ajudar a pessoa a entender o próprio progresso. Os dados já estão todos lá: séries, cargas, refeições, hábitos. Os Hábitos já dizem em que dia da semana você é mais constante. Quero levar isso para o resto do app, com insights que respondam perguntas como "a minha carga no supino ainda está subindo ou travou?" ou "eu como mais proteína nas semanas em que treino mais?".

Também está na fila pontuar o treino pela proporção de séries feitas, para quem precisa parar no meio, e um código de recuperação para o backup que não dependa de guardar a senha em lugar nenhum.

09 · FALE COMIGO

BORA CONVERSAR?

ANGELO GABRIEL · DESENVOLVEDOR DO RENSEI

Sinta-se livre para dar ideias novas para o projeto, ou até para criticar: me diga o que poderia ser melhor ou diferente. O app chega em breve na Google Play.

10 · ANEXO

PARA QUEM QUER IR MAIS FUNDO

Material de consulta, recolhido para não atrapalhar a leitura.

A stack, com versões
CAMADAESCOLHAPOR QUÊ
LINGUAGEM · UIKotlin 2.3.21 + Jetpack Compose (BOM 2026.09.00)O app é só Android e depende de coisas nativas. Detalhes na ADR-0001.
DESIGN SYSTEMPróprio, sem MaterialA cara do app vem do Pack.
NAVEGAÇÃONavigation 3 · 1.1.7Facilita voltar para a Sessão em andamento de qualquer aba.
PERSISTÊNCIARoom 3.0.2 com SQLite embarcadoO mesmo banco em todo aparelho, com busca por texto.
PREFERÊNCIASDataStore 1.2.1Perfil corporal e configurações ficam fora do banco.
SEGUNDO PLANOWorkManager 2.11.2Sincronização com o Health Connect e lembretes de Hábito.
SAÚDEHealth Connect 1.1.0A única porta para dado de saúde depois do fim do Google Fit.
CRIPTOGRAFIABouncy Castle 1.86 (Argon2id) + AES-GCMO Android não tem Argon2 nativo.
CÂMERACameraX 1.6.2 + ML Kit 17.3.0 embarcadoCódigo de barras sem depender do Play Services.
COMPRASPlay Billing 9.1.0Os Pets pagos, em compra única.
FALHASACRA 5.14.2Relatório de erro só por e-mail, e só se a pessoa confirmar.
QUALIDADEdetekt 2.0 + compose-rules · JUnit 4 · Robolectric 4.17Regras de arquitetura no build e testes rodando no computador.
As 10 decisões registradas (ADRs)

Quando voltar atrás numa decisão custaria uma reescrita ou uma migração de dados, ela ganha uma ADR. A ADR-0005, sobre a licença GPL, foi substituída pela 0011 quando fechei o código.

ADR-0001KOTLIN + COMPOSE EM VEZ DE REACT NATIVE

CONTEXTOEu trabalho bem tanto com React e TypeScript quanto com Kotlin e Compose, e as referências visuais que eu tinha eram bibliotecas React. Isso puxava para o React Native.

DECISÃOFui de Kotlin com Jetpack Compose nativo. Olhando cada requisito do app, o React Native perdia em todos: o Health Connect depende de um wrapper de terceiro e não roda no Expo Go, as tarefas em segundo plano precisam do WorkManager e animar personagem na tela inteira é exatamente onde a ponte do RN cobra mais caro.

O QUE FICOU DE FORAReact Native com Expo, porque as bibliotecas de referência eram web e não funcionariam lá: eu teria que refazer a identidade à mão de qualquer jeito. Compose Multiplatform, porque eu trocaria o risco de reescrever por um risco de maturidade, só para atender uma plataforma que nem está no escopo.

O PREÇOSe um dia o iOS entrar no plano, o app vai ser reescrito. Aceitei isso, até porque no iOS não existe Health Connect.

ADR-0002ARQUÉTIPOS ORIGINAIS EM VEZ DE PERSONAGENS LICENCIADOS

CONTEXTOA ideia original nomeava os temas a partir de personagens de verdade, de grandes editoras e estúdios. Num app publicado na Play Store, isso é pedir para ser derrubado.

DECISÃOCada Pack ganhou o nome de um Arquétipo, como "O Morcego" ou "O Guerreiro de Laranja", com arte própria. O nome fica dentro do Pack, nunca no código.

O PREÇOSó trocar o nome não resolve. A arte também precisa lembrar o arquétipo sem copiar o personagem, e títulos famosos ficam de fora. As paletas ficaram, porque cor não é propriedade de ninguém.

ADR-0003BACKUP CIFRADO DE PONTA A PONTA, SEM RECUPERAÇÃO DE SENHA

CONTEXTOO backup carrega peso, medidas, treino e alimentação, ou seja, dado de saúde. E ele pode ficar guardado por tempo indefinido num lugar que a pessoa não controla, como uma pasta sincronizada na nuvem.

DECISÃOO backup é cifrado no aparelho com AES-256-GCM, e a chave vem de uma Senha de Backup que passa pelo Argon2id. Essa senha não sai do celular.

O QUE FICOU DE FORAPBKDF2, que já vem no Android e não precisa de biblioteca, mas é o mais fraco contra ataque com placa de vídeo, que é justamente o cenário de um arquivo esquecido numa nuvem. E backup sem cifra, que deixaria dado de saúde exposto para qualquer um que achasse o arquivo.

O PREÇOSe a pessoa perder a Senha de Backup, o backup está perdido, para ela e para qualquer outra pessoa. Não existe "esqueci minha senha", e não vai existir, porque isso significaria alguém além dela conseguir abrir o arquivo.

ADR-0004EDITAR UM PLANO QUE VEM COM O APP SEMPRE CRIA UM FORK

CONTEXTOAlguns Planos vêm prontos no app e podem receber atualização. Se a pessoa editasse um deles no lugar, a próxima atualização apagaria o trabalho dela sem aviso e sem desfazer. É o bug mais caro que esse app pode ter.

DECISÃOO primeiro toque de edição cria uma cópia pessoal do Plano, e o app avisa que criou. A operação "editar o Plano original" simplesmente não existe.

O PREÇOQuem cria o Fork cedo não recebe as melhorias que vierem depois naquele Plano. Prefiro assim: perder uma melhoria tem volta, perder o próprio treino montado não tem.

ADR-0006PONTOS LIBERAM PETS POR MARCO E NUNCA SÃO GASTOS

CONTEXTOParte dos Pets passou a ser liberada por pontos, e eu tinha dois caminhos: tratar ponto como moeda, que a pessoa gasta numa loja, ou como marco, em que o total acumulado libera.

DECISÃOFui de marco. Chegar a 1.000 pontos libera um Pet, nada é descontado e o Pet nunca volta a trancar. O que está liberado é calculado a partir do total, e não gravado em lugar nenhum.

O QUE FICOU DE FORAPonto como moeda, porque aí eu teria que lidar com débito, saldo, preço e balancear uma economia inteira.

O PREÇOComo o ponto passou a valer alguma coisa, precisei colocar um teto: um crédito por fato e por dia. Créditos por série e por exercício salvo saíram, porque dava para fabricar ponto com eles.

ADR-0007ARTE DE PET PAGO FORA DO REPOSITÓRIO PRINCIPALREVISTA PELA 0011

CONTEXTODois Pets são pagos, e o projeto não tem servidor nem conta de usuário para validar compra.

DECISÃOA arte dos Pets pagos fica num repositório privado e só entra na versão oficial do app. A Google Play Billing libera o Pet no próprio aparelho: é uma compra única por Pet, e restaurar é só perguntar à Play.

O QUE FICOU DE FORADeixar a arte paga no repositório com uma licença restritiva. A arte ficaria disponível para download, e a licença só valeria no papel.

O PREÇOUm APK oficial crackeado libera os dois Pets. Aceitei, porque manter um servidor para validar recibo custaria mais do que a perda num app de nicho.

ADR-0008SENHA DE BACKUP SEM ARQUIVO DE RECUPERAÇÃO

CONTEXTOA primeira versão salvava a Senha de Backup num arquivo de recuperação em texto puro. Na prática, esse arquivo ia parar em Downloads ou numa pasta sincronizada, legível por outros apps e muitas vezes na mesma nuvem do backup. Quem tivesse acesso aos dois lia tudo.

DECISÃOTirei o arquivo e não coloquei nada no lugar. A pessoa cria a senha, digita de novo para confirmar, e o app nunca grava nem mostra essa senha de volta.

O QUE FICOU DE FORAMostrar a senha de novo numa tela própria, porque a pessoa acabou de criar e confirmar. Cifrar o arquivo com outra senha, porque isso só empurra o problema um passo para frente.

O PREÇOGuardar a senha passa a ser responsabilidade de quem criou. Um código de recuperação gerado pelo app ficou para depois, porque mudaria o formato do arquivo.

ADR-0009O PET PODE COBRAR, MAS SÓ NA ABA HÁBITOS

CONTEXTOA regra dos Pets sempre foi: ele nunca cobra e nunca fica triste. Só que nos Hábitos eu queria o contrário, um Pet que lembra o que falta no dia e dá uma bronca quando a constância começa a cair.

DECISÃOA cobrança fica presa na aba Hábitos, onde as metas foram escolhidas pela própria pessoa. No máximo uma bronca por dia, sempre com humor. No treino e na dieta, o Pet continua só comemorando.

O QUE FICOU DE FORALiberar a cobrança no app inteiro, porque um Pet que cobra treino perdido viraria o personal trainer que o app diz não ser. E não cobrar nada, porque hábito sem lembrete se perde.

O PREÇOCada fala nova de cobrança passa pela minha revisão antes de entrar, porque é ali que o tom do app aparece.

ADR-0010LEMBRETES DE HÁBITO POR NOTIFICAÇÃO

CONTEXTOAté então o Rensei não mandava notificação nenhuma. Só que, para hábito, o lembrete fora do app é o que mais segura a pessoa.

DECISÃOO lembrete é opcional por Hábito e vem desligado. A permissão só é pedida quando a pessoa liga o primeiro lembrete. Quem agenda é o WorkManager, e a própria notificação tem os botões Concluir e +passo, para marcar sem abrir o app.

O QUE FICOU DE FORAAlarme exato, porque a Play restringe essa permissão a despertador e calendário. E AlarmManager com reinício no boot, que seria mais uma permissão para fazer o que o WorkManager já faz.

O PREÇOO horário é aproximado. Em economia de bateria, o lembrete pode atrasar alguns minutos, e para lembrar de beber água isso não faz diferença.

ADR-0011CÓDIGO FECHADO, TODOS OS DIREITOS RESERVADOSSUBSTITUI A 0005

CONTEXTOO Rensei começou como GPL-3.0 (ADR-0005). Em 8 de outubro de 2026, decidi fechar o código.

DECISÃOApp, arte e textos passaram a ter todos os direitos reservados, e o repositório é privado. Só os termos de uso e a política de privacidade ficam públicos.

O PREÇOA regra para dependência mudou: nenhuma biblioteca com copyleft forte entra no app. O que é de terceiros continua com a própria licença, como as fontes, os ícones Phosphor, a base USDA e o Open Food Facts. E o F-Droid saiu do horizonte.

A jornada de uso e o que acontece sem internet
FIG. 3 · FLUXO DE USO · INTERATIVOLIGUE AS CONDIÇÕES E VEJA O QUE DEGRADA
PRIMEIRA ABERTURA

Nada de conta ou e-mail. Você escolhe um dos 18 Arquétipos, lê o aviso de que os planos são sugestão, e não prescrição, e aceita os termos (é preciso ter 18 anos ou mais).

PASSO 1 DE 8
Os 13 papéis de cor e o contraste de cada Pack
FIG. 8 · OS 13 PAPÉIS E O CONTRASTE · INTERATIVOO MORCEGO
bg#2A3640
surface#3C3E42
track#222C34
hero#203847
heroText#ECECE2
primary#C9B072
onPrimary#14161A
secondary#4A4843
text#ECECE2
muted#C9C3B4
ink#14161A
danger#A8474A
onDanger#ECECE2
  • text / bg10,39:1✓
  • text / surface9,01:1✓
  • text / track11,95:1✓
  • muted / bg7,03:1✓
  • muted / surface6,10:1✓
  • muted / track8,08:1✓
  • heroText / hero10,28:1✓
  • onPrimary / primary8,57:1✓
  • onDanger / danger4,82:1✓

São os nove pares de texto e fundo que as telas desenham, calculados com a mesma fórmula que o app usa. Se um Pack importado ficar abaixo de 4,5:1, o app recusa. Se for um dos 18 que vêm no app, o teste quebra antes de ele chegar em alguém.

O cálculo do gasto energético, na prática
FIG. 5 · GASTO ENERGÉTICO · INTERATIVOUMA FONTE DE VERDADE POR DIA
(A) COM HEALTH CONNECTTMB + calorias ativas1.650 + 420 = 2.070 kcal
(B) ESTIMADOTMB × fator declarado1.650 × 1,55 = 2.558 kcal
(C) INDISPONÍVELCampo vazio— kcal

Se o Health Connect tem as calorias ativas do dia, ele é a fonte. O nível de atividade que você declarou fica de fora, porque somar os dois contaria a mesma energia duas vezes. Os passos aparecem sempre como contagem, e nunca viram caloria. Os números da figura são de exemplo.

A ordem da busca de alimentos (simulação)
FIG. 6 · ORDEM DA BUSCA · SIMULAÇÃONADA SAI DESTE SITE
  1. 1 · ALIMENTOS DO USUÁRIO E PRODUTOS GUARDADOS

    nada aqui

  2. 2 · USDA NO APARELHO

    Frango, peito, grelhado

  3. 3 · OPEN FOOD FACTS · REDE

    esperando você digitar

O resultado do aparelho aparece na hora, com ou sem internet. Se você continuar digitando, o pedido ao Open Food Facts é cancelado antes de sair, e o limite de 10 buscas por minuto é contado no próprio app. A busca também entende plural e começo de palavra: "ovos" acha "ovo", e "fran" já acha frango.