Aplicação desktop simples e eficiente para gerenciamento de tarefas
Desenvolvido para manter você focado no que realmente importa: **resolver suas tarefas**
Diferencial | Tecnologias | Funcionalidades | Sincronização | Arquitetura | Testes | Changelog
Enquanto outras ferramentas de gerenciamento de tarefas oferecem inúmeras funcionalidades e configurações complexas, o Simple Task Board Manager foi desenvolvido com um propósito claro: manter o foco na resolução de tarefas, não no uso da ferramenta.
- ⚡ Zero Configuração: Instale e use imediatamente - sem setups complexos
- 🎯 Interface Minimalista: Apenas o essencial para gerenciar tarefas eficientemente
- ⏱️ Economia de Tempo: Menos tempo configurando, mais tempo produzindo
- 🧠 Foco na Tarefa: Interface limpa que não distrai do objetivo principal
- 💾 Persistência Local: Seus dados ficam seguros no seu computador
"A melhor ferramenta é aquela que você esquece que está usando"
Este projeto foi desenvolvido com tecnologias modernas e estáveis:
- ☕ Java 25 - Linguagem principal com recursos modernos
- 🍃 Spring Boot 3.5.2 - Framework para injeção de dependências e configuração
- 💾 H2 Database 2.3.232 - Banco de dados local em arquivo (
~/myboards) - 🖥️ JavaFX 25.0.3 + CalendarFX - Interface gráfica moderna, com calendário integrado
- 🔧 Gradle 9.6.0 - Sistema de build e gerenciamento de dependências
- 📊 Micrometer 1.15.2 - Observabilidade e métricas
- 🧪 JUnit 5 + Mockito - Testes unitários e de integração
- 🔌 Google Tasks API - Integração com Google Tasks
- 📋 Boards Visuais: Organize suas tarefas em colunas visuais (A Fazer, Em Andamento, Concluído)
- 🎴 Cards Interativos: Crie e edite cards com duplo clique (edição in-place)
- 🔄 Drag & Drop: Mova tarefas entre colunas com arrastar e soltar
- 📊 Progresso Visual: Acompanhe o progresso com percentuais automáticos
- ⚡ Início Rápido: Sem configurações complexas - abra e use
- 💾 Persistência Automática: Dados salvos automaticamente no banco local
- 🎨 Interface Limpa: Design minimalista que não distrai
- 📱 Responsivo: Interface adaptável a diferentes tamanhos de tela
- 🔍 Busca e Filtros: Filtre boards por grupo e por status
- 📅 Datas e Prazos: Agendamento, vencimento e calendário integrado
- 🗂️ Grupos e Tipos de Card: Organize boards em grupos e personalize tipos de card com unidades de progresso próprias
- 🔌 Google Tasks: Envie tarefas para o Google Tasks
- ☁️ Sincronização entre Dispositivos: Use seus boards em vários computadores via pasta de nuvem (detalhes)
Use o mesmo board em vários computadores através de uma pasta sincronizada por Dropbox, Google Drive ou OneDrive — sem depender das APIs dos provedores.
- Abra Preferências e habilite a sincronização;
- Escolha uma pasta sincronizada pelo seu provedor de nuvem (em modo espelho / "sempre manter neste dispositivo");
- Escolha o modo: Manual (botão ☁ Sincronizar na barra de ferramentas) ou Automático ao abrir e fechar.
Os dados são publicados como snapshot na subpasta SimpleTaskBoard/ da pasta
escolhida. Ao abrir o aplicativo, dados mais novos da nuvem são importados
automaticamente — com backup local prévio.
- O banco em uso nunca fica na pasta de nuvem: o que é sincronizado é um snapshot consistente, validado por hash SHA-256 contra downloads parciais;
- Conflitos nunca são resolvidos silenciosamente: se dois computadores alteraram os dados ao mesmo tempo, um diálogo oferece três opções seguras — manter os dados do computador (a versão da nuvem é arquivada), usar os dados da nuvem (com backup local) ou decidir depois;
- Backups automáticos: backup físico do banco antes de cada importação e histórico das últimas gerações de snapshot na nuvem;
- Aviso em tempo real: se outro computador enviar dados enquanto o app está aberto, você é avisado de que a importação ocorre na próxima abertura.
📖 Arquitetura da sincronização
O projeto evoluiu de uma arquitetura simples para uma solução robusta e escalável, mantendo sempre o foco na simplicidade de uso.
- HibernateJDBC → JPA: Estrutura de banco de dados simplificada
- Injeção de Dependência: Spring gerencia o ciclo de vida dos componentes
- Arquitetura Modular: Componentes desacoplados e reutilizáveis
- Configuração Automática: Spring Boot configura automaticamente o ambiente
- JavaFX Components: Interface baseada em componentes FXML reutilizáveis
- Padrão Observer: Comunicação desacoplada entre componentes via callbacks
- UX Aprimorada: Edição in-place, drag & drop, feedback visual
- A atualização do Java 21 para o Java 25 gerou um desafio técnico interessante, além de atualizar versão da JDK utilizada no projeto, foi necessário atualizar a versão das bibliotecas utilizadas, tais como:
- JavaFx atualizada para versão 25.0.3.
- Gradle atualizado para versão 9.6.0.
- Atualizada a versão do shadow e do lombok.
- Snapshots consistentes: export online-safe via
SCRIPT TOdo H2 — o banco em uso nunca é copiado - Detecção de conflitos sem timestamps: contador de geração monotônico + hashes SHA-256, imune a diferenças de relógio entre máquinas
- Escrita atômica na nuvem: arquivo temporário +
ATOMIC_MOVE, o cliente de nuvem nunca vê dados parciais - Import seguro no startup: único momento com o banco fechado, com validação de hash e backup físico prévio
- 🔧 Manutenibilidade: Código organizado e fácil de manter
- 🧪 Testabilidade: Arquitetura que facilita testes unitários e de integração
- 📈 Escalabilidade: Fácil adição de novas funcionalidades
- 🛡️ Robustez: Tratamento de erros e validações adequadas
Para garantir qualidade e estabilidade, o projeto conta com uma suíte abrangente de testes:
- Services: Validação da lógica de negócio isolada
- Repositories: Testes de acesso a dados
- Validators: Verificação de regras de validação
- Spring Context: Testes que carregam o contexto completo
- Database Integration: Validação da persistência com H2
- API Integration: Testes de integração com Google Tasks API
- Sincronização: Round-trip export → wipe → import com contagem de linhas em todas as tabelas, conflitos, resoluções e restore entre versões de schema
- JUnit 5: Framework moderno de testes
- Mockito: Mocking de dependências
- Spring Boot Test: Utilitários para testes de integração
- Download: Baixe o instalador na página de releases
- Instale: Execute o instalador e siga as instruções
- Execute: Abra o aplicativo e comece a usar imediatamente
- Produza: Foque nas suas tarefas, não na ferramenta
O sistema garante que seus dados sejam preservados durante atualizações:
- Backup completo e transacionalmente consistente via
SCRIPT TOdo H2 (.sql.gz) - Backup físico automático do banco antes de cada importação de sincronização
- Backups salvos em
~/myboards/backups/, com política de retenção - Scripts manuais de backup para Linux/Mac e Windows
- Migrações idempotentes executadas no início da aplicação preservam os dados existentes durante atualizações
- Verificação de integridade automática na inicialização
# 1. Backup (antes da atualização)
./scripts/backup-database.sh
# 2. Instalar nova versão
# O instalador preserva ~/myboards/
# 3. Verificar integridade
./scripts/check-database.sh📖 Guia Completo de Atualização
O jpackage não faz cross-compile: cada comando precisa ser executado na própria plataforma de destino, gerando o pacote em build/dist/.
# Windows (gera .exe) — requer WiX Toolset instalado
./gradlew jpackage
# Linux
./gradlew jpackageLinux # app-image (pasta autocontida, sem instalador)
./gradlew jpackageLinuxDeb # pacote .deb — requer dpkg-deb (Debian/Ubuntu)
./gradlew jpackageLinuxRpm # pacote .rpm — requer rpmbuild (Fedora/RHEL, ou pacote rpm no Debian/Ubuntu)macOS ainda não possui task de empacotamento configurada no
build.gradle.kts.
# Clone o repositório
git clone https://github.com/lucasgch/simple-task-board-manager.git
# Compile e execute
./gradlew bootRun- Snapshots na nuvem: export/import do banco via pasta sincronizada por Dropbox, Google Drive ou OneDrive, sem APIs dos provedores
- Modo manual ou automático: botão ☁ Sincronizar na barra de ferramentas, ou export ao fechar e import ao abrir
- Resolução de conflitos: diálogo com três opções seguras — nada é apagado (versão preterida arquivada na nuvem ou em backup local)
- Proteções: validação por hash SHA-256 contra downloads parciais, backup físico antes de cada import, histórico de gerações na nuvem e detecção de cópias em conflito criadas pelos provedores
- Aviso em tempo real: notificação quando outro computador envia dados enquanto o app está aberto
- Controles de Movimentação: Adicionados botões ↑/↓ para mover cards dentro da mesma coluna
- Posicionamento Otimizado: Controles de movimentação posicionados no canto superior direito do card
- Feedback Visual: Remoção de alertas redundantes - interface atualizada automaticamente após movimentação
- Tooltips Informativos: Dicas visuais nos botões de movimentação
- Validação de Dados: Corrigido erro de validação que impedia atualização da interface
- Atualização em Tempo Real: Interface agora atualiza automaticamente após movimentação de cards
- Lógica de Movimentação: Corrigida query SQL para encontrar cards adjacentes corretamente
- Comunicação entre Controllers: Melhorada notificação entre CardViewController e BoardViewController
- Interface Mais Limpa: Removidos alertas desnecessários para movimentação bem-sucedida
- Feedback Imediato: Usuário vê mudanças instantaneamente na interface
- Experiência Fluida: Movimentação de cards sem interrupções na interface
- Sistema de Progresso: Cards agora exibem progresso visual com percentuais
- Controles de Edição: Interface de edição in-place com spinners para progresso
- Validação em Tempo Real: Validação automática de valores de progresso
- Status Dinâmico: Status do card baseado na coluna atual
- Arquitetura Modular: Componentes reutilizáveis e desacoplados
- Persistência Robusta: Sistema de backup e migração de dados
- Interface Responsiva: Adaptação a diferentes tamanhos de tela
- Interface Kanban: Boards visuais com colunas organizacionais
- Drag & Drop: Movimentação intuitiva de cards entre colunas
- Persistência Local: Banco de dados H2 para armazenamento local
- Arquitetura Spring Boot: Base sólida para desenvolvimento futuro
Contribuições são bem-vindas! Mantenha sempre o foco na simplicidade e produtividade do usuário.
Este projeto está sob a licença GNU General Public License v3.0. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ para manter você focado no que realmente importa: suas tarefas.