Pitch: Tarefandos, um organizador de tarefas gratuito que começou com localStorage e hoje roda em Spring Boot na minha VPS
Há quase um ano eu comecei um gerenciador de tarefas para estudar React. Era um app em JavaScript que salvava tudo no localStorage. O que começou a transformar esse projeto de estudos em um produto foi a vontade de ajudar minha namorada a organizar as tarefas do dia a dia. Hoje ele virou o Tarefandos (https://www.tarefandos.com.br): gratuito, em português, com backend próprio e usado por gente além de mim e ela.
Quero contar como ele chegou até aqui, as decisões técnicas que mais me ensinaram e pedir a opinião de vocês.
Do localStorage ao backend próprio
- Dez/2025: React + Vite em JavaScript, tudo no navegador.
- Abr/2026: Supabase para login e banco, com a migração do que estava no
localStorage. - Set/2026: migração inteira para TypeScript e uma interface nova.
- Set–out/2026: backend próprio em Spring Boot 4 (Java 21). Comecei fazendo: cadastro, login com JWT e refresh token rotativo, 2FA, limites de requisição, exportação de dados pessoais.
- 17/out/2026: saí do Supabase e da Vercel para uma VPS com Dokploy.
A virada foi a parte mais tensa. Algumas decisões que funcionaram:
- Migrei os hashes das senhas. O bcrypt do Supabase é compatível com o Spring Security, então ninguém precisou redefinir a senha.
- Preservei também o 2FA de quem já tinha ativado.
- O script de migração rodou dentro do Dokploy, como um serviço temporário, numa transação só. Sem
--commit, ele desfazia tudo, o que me deixou ensaiar quantas vezes quis. - Depois da virada, cada pessoa recebeu um e-mail explicando a mudança.
Stack hoje
- Frontend: React 18, Vite, TypeScript, Tailwind, componentes próprios sobre Base UI, TanStack Query, dnd-kit.
- Backend: Spring Boot 4, Java 21, Spring Security com JWT, JPA + Flyway, PostgreSQL 16.
- Infra: VPS com Dokploy, Cloudflare na frente, backup diário do banco (já testei a restauração), e-mail pelo Resend.
- Testes: cerca de 750 no frontend (Vitest) e cerca de 360 de integração no backend (Testcontainers).
Três coisas técnicas que gostei de fazer
1. Web Push sem biblioteca. Implementei o padrão do Web Push (VAPID e a criptografia da RFC 8291) usando só as APIs de criptografia do JDK. Os avisos passam por uma fila de saída no banco, com horário de silêncio, agrupamento quando chegam vários juntos e uma chave única para não avisar duas vezes a mesma coisa.
2. Teste de carga antes de precisar. Com k6, simulei 100 usuários simultâneos num ambiente local configurado como o de produção. As leituras ficaram com p95 até 70 ms, as escritas em torno de 13 ms, sem erros. Aprendi que medir carga com o computador ocupado (testes, build, navegador pesado) gera números falsos.
3. SEO numa SPA. No build, cada página pública vira um HTML com título, descrição e canonical próprios, e a página inicial é pré-renderizada. O Nginx devolve 404 de verdade para rota inexistente, em vez do "soft 404" que o Google reclamava.
O que dá para fazer no app
- Listas com cor, e as mesmas tarefas em Lista, Quadro (kanban) e Calendário.
- Cinco tipos de tarefa: simples, checklist, foco (Pomodoro), meta e valores (linhas com números e soma, média etc.).
- Prazo com hora ou período (de… até…), repetição, prioridade e etiquetas.
- Uma tela de Atenção que junta o que está atrasado, vence logo ou é importante.
- Avisos no app, no celular e um resumo diário por e-mail.
- Instalação como app no celular (PWA), tema claro e escuro, 2FA e exportação dos seus dados.
É gratuito, e o que existe hoje continua grátis.
Queria a opinião de vocês
- O que faz vocês trocarem de app de tarefas? E o que faz desistir de um?
- Para quem já tirou um projeto do Supabase ou de um BaaS parecido: valeu a pena manter o próprio backend?
- Se puderem utilizá-lo, qualquer bug ou estranheza me ajuda muito. Tem um formulário em https://www.tarefandos.com.br/suporte.
Obrigado por lerem até aqui!