Dashboard interativo
Resumo visual do dia com taxa de conclusão, streak ativo e hábitos pendentes em destaque.
Aplicativo mobile de rastreamento de hábitos desenvolvido em React Native
Construído para ajudar pessoas a manterem consistência em seus hábitos diários através de acompanhamento visual, streaks e estatísticas. Interface minimalista, persistência local e arquitetura escalável.
Uma navegação minimalista, com hierarquia visual clara e foco no progresso do usuário.
O AppRotina nasceu da necessidade de criar um aplicativo simples e eficiente para ajudar pessoas a manterem consistência em seus hábitos diários através de acompanhamento visual, streaks e estatísticas.
A proposta é remover o atrito do "tracking diário": uma interface direta, que se acessa em segundos, com feedback visual claro a cada hábito concluído — transformando rotina em hábito e hábito em identidade.
"Pequenas ações repetidas todos os dias criam grandes mudanças. O AppRotina existe para tornar isso visível."
Pequenos detalhes que fazem o usuário voltar todos os dias.
Resumo visual do dia com taxa de conclusão, streak ativo e hábitos pendentes em destaque.
Cálculo automático de sequências consecutivas para gamificar a constância e manter o engajamento.
Visualização em calendário dos últimos dias para identificar padrões e momentos de queda.
Métricas de evolução com gráficos limpos: taxa média, recordes pessoais e melhor dia da semana.
Alternância suave entre temas, com paleta calibrada para uso confortável em qualquer hora do dia.
Dados armazenados via AsyncStorage — funciona 100% offline, com sincronização imediata na UI.
Localização rápida de hábitos por nome, categoria ou status — útil quando a lista cresce.
Cada hábito recebe seu ícone e sua cor — identidade visual única para reconhecimento imediato.
Stack moderna, performática e com excelente DX.
Framework principal para construção da UI mobile.
Build e deploy rápido, OTA updates e APIs nativas integradas.
Persistência local de hábitos, configurações e histórico.
Estado global compartilhado sem dependências externas pesadas.
Navegação stack + bottom tabs com animações nativas suaves.
Biblioteca completa de ícones para personalização dos hábitos.
As decisões mais relevantes durante o desenvolvimento — e como foram resolvidas.
Os hábitos precisam estar disponíveis em diversas telas (dashboard, detalhe, estatísticas). Optei pela Context API com reducers próprios — sem trazer Redux para um app deste porte. Resultou em código previsível, menos boilerplate e excelente performance.
AsyncStorage como camada de persistência, com uma service layer isolada que abstrai leitura e escrita. Toda mudança de estado dispara um side effect de salvamento, garantindo que os dados sobrevivam a fechamentos do app.
Determinar streaks ativos exige comparar datas considerando timezone, "dias quebrados" e registros parciais. Construí uma função pura e testável que recebe o histórico e devolve streak atual, maior streak e data da última quebra.
Toda interação no dashboard precisa refletir nas estatísticas em tempo real. Memoizei os cálculos pesados com useMemo e isolei seletores no contexto, evitando re-renders desnecessários em cards que não dependem do dado alterado.
Microinterações ao marcar um hábito (pulse, check, fade no streak) usando a API de Animated nativa. O foco foi manter as animações em native driver sempre que possível, garantindo 60fps mesmo em aparelhos modestos.
Estrutura por features (habits, stats, settings), com components, hooks, services e contexts isolados. Permite adicionar novos módulos sem tocar no que já existe — pensado para crescer.
Cada projeto deixa marcas. Aqui ficam as mais importantes deste.
Entender quando usar componentes nativos, navegação fluida e como pensar em telas, não em rotas.
Construir blocos pequenos, com responsabilidade única, que se compõem em telas inteiras com pouco código.
Hierarquia visual, espaçamentos generosos e interações pensadas para uso com uma única mão.
Context API + reducers como alternativa elegante e leve ao Redux para projetos de pequeno e médio porte.
Separar a lógica de armazenamento da UI deixou o código testável e fácil de migrar para outro storage.
Pensar em pastas por feature desde o dia um economiza horas de refactor lá na frente.
O AppRotina é parte de uma jornada construindo produtos reais. Veja o código ou conheça outros projetos do portfólio.