Um PWA minimalista de Temporizador e Cronômetro com estética Dark Neon.
Construído com foco em performance, acessibilidade mobile e design limpo.
- ⏱️ Temporizador Dinâmico: Gráfico de rosca SVG reativo com animação orbital fluida.
- ⏱️ Cronômetro de Precisão: Cálculo baseado em timestamps absolutos, garantindo precisão mesmo com o app em background.
- 🎨 Tema "Dark Neon" Customizável: Altere a cor de destaque principal, refletindo instantaneamente em botões, sombras, gráficos e até no favicon da guia do navegador.
- 🎹 Sintetizador de Áudio Nativo: Alarme totalmente gerado via Web Audio API. Personalize o tipo de onda (Sine, Square, Triangle, Sawtooth), frequência (Hz), duração e repetições.
- 📱 Mobile-First & PWA: Navegação por Segmented Controls (nativo e intuitivo), prompt customizado de instalação offline e suporte a Service Workers.
- 🚀 Atalhos de Produtividade: Botões de incremento rápido (+30s, +1m, +5m) que recalculam dinamicamente a proporção do gráfico.
Este projeto foi desenvolvido seguindo as melhores práticas de Engenharia de Software:
- Clean Architecture & DDD: Separação clara entre Domínio (Regras), Aplicação (Serviços/Web APIs) e UI (Componentes).
- TypeScript Strict Mode: Tipagem rigorosa em toda a base de código.
- Object Calisthenics: Código limpo, sem blocos
else, métodos curtos e responsabilidades únicas. - Test-Driven: Cobertura de testes unitários e de integração utilizando Vitest e jsdom.
src/
├── core/ # Regras de Negócio e Serviços Externos (Web Audio, Notifications)
├── shared/ # Recursos partilhados (Store, Composables de Tempo, PWA)
├── components/ # Componentes visuais UI (Botões Neon, Gráficos SVG)
├── App.vue # Orquestrador principal da UI
└── main.ts # Ponto de entrada
Pré-requisitos: Node.js v18+
- Clone este repositório:
git clone https://github.com/luizhanauer/timer.git- Acesse a pasta do projeto:
cd timer- Instale as dependências:
npm install- Inicie o servidor de desenvolvimento:
npm run devO projeto conta com uma suíte de testes robusta cobrindo formatação de tempo, gerência de estado e mock de Web APIs.
Para rodar os testes uma vez:
npm run testPara gerar o relatório de cobertura (Coverage):
npm run test:coverageContribuições são bem-vindas! Se você encontrar algum problema ou tiver sugestões para melhorar a aplicação, sinta-se à vontade para abrir uma issue ou enviar um pull request.
Se você gostou do meu trabalho e quer me agradecer, você pode me pagar um café :)
Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter mais informações.
Desenvolvido com ☕ e código limpo.
