Listo é um gerenciador de tarefas local-first para organizar atividades por data e etiquetas. O projeto nasceu como um exercício de Angular e hoje funciona como um estudo técnico sobre estado reativo, persistência no navegador, acessibilidade e renderização no servidor.
- criação, edição, conclusão e exclusão de tarefas;
- descrição, prazo com horário e etiquetas reutilizáveis;
- busca por título, descrição ou etiqueta;
- filtro de tarefas por data;
- separação entre tarefas pendentes e concluídas;
- persistência local no IndexedDB, sem envio dos dados para um servidor;
- interface responsiva e navegação compatível com teclado.
- Angular 22 com componentes standalone e detecção de mudanças
OnPush; - Angular Material e CDK para interface e recursos de acessibilidade;
- RxJS para combinar tarefas, busca e data selecionada sem duplicar estado;
- Dexie como camada de acesso ao IndexedDB;
- Angular SSR e prerenderização;
- Vitest para testes unitários e de regressão;
- Netlify Angular Runtime para publicação.
O código está dividido por responsabilidade:
src/app/
├── core/ # modelos, banco local e serviços de dados
├── features/ # tarefas, busca e seus diálogos
└── shared/ # componentes compartilhados, como o cabeçalho
O TaskService expõe a coleção persistida pelo Dexie. A lista combina essa fonte com os fluxos do termo de busca e da data selecionada. Cada alteração recalcula a visualização a partir da coleção original, evitando filtros cumulativos e mantendo uma única fonte de verdade.
Pré-requisitos:
- Node.js 24;
- npm 11 ou superior.
npm install
npm startA aplicação fica disponível em http://localhost:4200.
# suíte completa em modo CI
npm run test:ci
# build otimizado, SSR e prerenderização
npm run build
# executar o resultado SSR localmente
npm run serve:ssr:listoA suíte cobre os serviços de tarefas e etiquetas, o estado de busca e data e regressões da combinação de filtros. O build gera a aplicação cliente, o servidor SSR e a rota inicial prerenderizada.
- Os dados ficam somente no navegador. Isso favorece privacidade e uso sem backend, mas ainda não oferece sincronização entre dispositivos.
- A interface está em português e usa o fuso e a localidade do dispositivo.
- Autenticação, colaboração e notificações não fazem parte do escopo atual.
- Testes end-to-end e sincronização opcional são evoluções possíveis, não requisitos para a proposta local-first.
O projeto documenta uma evolução de um exercício inicial para uma base mais sustentável: correção do fluxo reativo de filtros, serviços testáveis, migração incremental entre versões principais do Angular, SSR compatível com a plataforma de deploy e melhorias de responsividade e acessibilidade.