Plataforma própria

Routine Hub

Hub de rotina self-hosted que trata o dia como uma sequência de tarefas, não como um checklist que cobra

Contexto
Projeto próprio
Papel
Product Manager, arquiteto e desenvolvedor
Período
Julho a agosto de 2026
Status
Em uso diário, em produção na infraestrutura de casa
Self-hostedPWADesign de hábitoArquitetura modular

Um aplicativo instalado no celular, servido por um mini PC de casa, que apresenta o dia como tarefas interativas e começa pelo módulo de meditação.

5marcos entregues, cada um usável no dia seguinte
04:00hora em que o dia de rotina vira, e não a meia-noite
30backups mantidos em rotação automática
App instaladono celularAPI e regras deprogressoBanco local,fonte daverdadeBackup eexportação
Servidor de casa como fonte da verdade, app instalado no celular. Arraste para o lado para ver o fluxo inteiro.

Motivador

Eu queria um hub de rotina que funcionasse do meu jeito, sem assinatura, sem meus dados em nuvem alheia e com liberdade para acrescentar módulos conforme a vida pedisse. O primeiro módulo escolhido foi o de meditação, porque tinha 60 áudios prontos e menos dependência de integração.

Problema

Aplicativo de hábito costuma virar fiscal. O primeiro tema visual pesava como cobrança e desmotivava o uso, e havia um erro conceitual de origem: às 00h30 o app dizia que o dia tinha sido perdido, quando a meditação da noite ainda fazia todo sentido.

Solução

Arquitetura de casca mais módulos. Cada módulo tem tabelas com prefixo próprio, rotas isoladas e vale sozinho, o que permite entregar valor por fase em vez de esperar o produto completo.

Servidor único como fonte da verdade, com regras de invariante testadas antes da lógica: substituir um áudio não avança o programa, concluir avança, e tudo que muda junto muda dentro de uma transação.

O conceito de dia de rotina, que vira às quatro da manhã em vez da meia-noite. Isso mudou o núcleo do produto, não só a interface, e obrigou a recalcular a chave de progresso e a derivar a data no servidor.

Princípio de design adotado formalmente: companheiro, não fiscal. Nada de vermelho ou alarme por ausência. Isso virou regra para visual, microcópia e para o tom das notificações da fase seguinte.

Robustez de uso real: retomada de sessão interrompida, exportação em CSV e JSON, backup diário automático e pré-carregamento dos áudios do dia.

Resultado

  • O app é usado todo dia, instalado no celular, servido por uma máquina de casa em rede privada.
  • Um comportamento do iOS que fazia o áudio simplesmente não tocar foi diagnosticado, documentado com o motivo e isolado em uma função pura, para não voltar.
  • Cada marco terminou usável, com critério de aceite escrito antes: o módulo de meditação já servia no dia a dia desde o segundo marco, sem som de fundo.

O que eu tirei daqui

  • Uma sensação vaga sobre a interface pode ser um requisito. Companheiro, não fiscal virou regra escrita e mudou visual, texto e roadmap.
  • Invariante testada antes da lógica evita otimização que quebra a regra do produto meses depois.
  • Mudança de conceito do domínio, como a hora em que o dia vira, é mais barata quando existe uma fonte única da verdade.

Onde a IA entrou

Cada etapa do ciclo do projeto, com o quanto a IA pesou nela.

CentralApoioNão usei
Descoberta e entendimento do problema

Diagnóstico de que o app pesava como cobrança e transformação disso em princípio de design registrado.

Pesquisa e evidência

Investigação das limitações de áudio de aplicativo instalado no iOS e das opções de entrega antes de escolher o caminho.

Especificação e documentação

Documento de produto, especificação técnica, lista de marcos com critério de aceite e registro de mudança de conceito.

Arquitetura e infraestrutura

Casca mais módulos, fonte única da verdade no servidor, contêineres na máquina de casa e HTTPS por rede privada.

Desenvolvimento

Backend em Node e TypeScript e front em React construídos com IA, com testes de invariante escritos antes da lógica de progresso.

QA e análise de dados

Auditoria de código e de design como portão antes do retema, mais investigação sistemática do bug de áudio no iOS.

IA dentro do produto

O produto em si não usa modelo em tempo de execução. Os áudios foram gerados por um pipeline externo de voz.

Timeline e marcos

  1. Jul/2026

    Fundação e catálogo

    Monorepo, banco, contêineres e o primeiro app instalável, com player do dia e testes de invariante.

  2. Jul/2026

    Mixer de fundo

    Som de fundo em loop com controles ao vivo, presets e tela que não apaga durante a sessão.

  3. Jul/2026

    Extras, substituição e linha do tempo

    Biblioteca de extras, troca com registro e visão de progresso do programa.

  4. 30/jul

    Robustez e dados

    Retomada de sessão, exportação, backup automático e pré-carregamento dos áudios.

  5. 15/ago

    Mudança de conceito do dia

    O dia de rotina passa a virar às quatro da manhã, com a data derivada no servidor.

  6. 17/ago

    Decisões fechadas por uso real

    Tema automático por período descartado depois de usar, e o caminho da fase 2 redefinido.

Ferramentas

IA e modelos

Claude CodeRotinas de revisão de código e designXTTS para gerar os áudios, em pipeline separado

Produto

Node 22TypeScriptFastifyDrizzleSQLiteReactViteWeb Audio API

Operação

Docker ComposeTailscale com certificadoBackup diário por agendamento

Resumo STAR

Situação
Eu queria um hub de rotina sem assinatura e sem meus dados em nuvem alheia, e o primeiro tema visual do app pesava como cobrança.
Tarefa
Entregar um módulo de meditação usável no dia a dia, servido por uma máquina de casa, e transformar a sensação de cobrança em princípio de design.
Ação
Desenhei uma arquitetura de casca mais módulos com fonte única da verdade no servidor, escrevi os testes de invariante antes da lógica de progresso, mudei o conceito de dia para virar às quatro da manhã e adotei companheiro, não fiscal, como regra de produto.
Resultado
O app é usado todo dia, cada marco terminou usável, e comportamentos difíceis do iOS foram diagnosticados, isolados e documentados para não voltarem.

Quer conversar sobre um desafio parecido?

Fale comigo