Problema
Aplicações de agenda podem ocultar falhas de sincronização e sobrescrever mudanças concorrentes. O Leve trata preservar o dado do usuário como a restrição principal e torna estados pendentes e conflitos visíveis.
Tecnologias
- React 19
- TypeScript
- Express 5
- Firebase Auth
- Firestore
- Zod
- Playwright
Decisões de engenharia
Um caminho único de escrita
Toda mutação passa por POST /api/commands. A API concentra validação, autorização, idempotência por operationId e registro da operação.
Revisão esperada, sem last-write-wins
Cada comando informa a revisão esperada. Quando o servidor encontra outra versão, recusa a escrita e devolve o estado concorrente para a interface preservar o conflito.
Offline explícito e reversível
O modo offline é opt-in. Alterações sem conexão entram em uma outbox local e são sincronizadas na reconexão; a interface informa o que ainda está pendente.
Regras compartilhadas
Cliente e servidor importam os mesmos schemas Zod do pacote de domínio, reduzindo validações divergentes entre as duas camadas.
Trade-offs
Consistência por uma API menos convencional
O endpoint único simplifica garantias transversais, mas troca rotas REST por recurso por comandos discriminados no payload.
Continuidade exige dado local
A outbox preserva trabalho sem rede, mas o cache pode manter dados pessoais no aparelho. Por isso a ativação depende de uma escolha informada do usuário.
Arquitetura condicionada ao plano gratuito
O projeto documenta paginação na limpeza, leases no agendador e controle de leituras do Firestore como escolhas necessárias para operar sem recursos pagos.
Evidências no repositório
- O repositório documenta testes unitários, integração com emuladores e E2E com Playwright para duas abas, reconexão da outbox, conflitos e acessibilidade.
- A conta permite exportar dados em JSON versionado, excluir os dados e controlar o armazenamento offline por aparelho.
- O README registra CI, runbooks e uma matriz que separa cobertura automatizada de verificações manuais.
O que eu mudaria
Eu transformaria em uma rotina de release registrada as verificações que o README ainda separa como manuais: push com o app fechado, leitor de tela externo e instalação em aparelho físico.
Fontes verificáveis
As afirmações desta página apontam para documentação e código públicos.
