Skip to content
opedroviskPublic

About

Aplicação desktop e web para auxiliar na produtividade pessoal.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

40 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

FocusVisk — Desktop

Release

Aplicação desktop de produtividade pessoal desenvolvida com WPF + Blazor Hybrid (.NET 8), com foco em gestão de tarefas, hábitos, Pomodoro, calendário, notas rápidas, busca global, controle financeiro e bloqueio de sites distratores durante sessões de foco.

🖥️ Branch atual: Desktop — versão nativa para Windows, com a v1.0 já lançada. Uma branch Web está planejada e compartilhará as camadas Core e Application desta mesma solução.


Sumário


Apresentação

O FocusVisk é uma ferramenta de produtividade pessoal para Windows que centraliza tudo o que o usuário precisa para manter o foco: um timer Pomodoro com bloqueio automático de sites, gerenciamento de tarefas com prioridades, subtarefas, tags e recorrência, um rastreador de hábitos com streaks, calendário com anotações, notas rápidas em Markdown organizadas por pastas, controle financeiro com metas de economia, busca global e um dashboard com estatísticas de desempenho da semana.

A interface é construída em Blazor Hybrid renderizada dentro de um WebView2 no WPF, o que permite um front-end web moderno (HTML/CSS) rodando como aplicação nativa sem depender de navegador externo. A aplicação também roda minimizada na bandeja do sistema, com notificações nativas do Windows para lembretes de tarefas agendadas e presença rica (Rich Presence) no Discord.


Branches do Projeto

Branch Plataforma Status Stack principal
Desktop Windows (WPF) ✅ v1.0 lançada — sujeita a novas implementações WPF + Blazor Hybrid + SQL Server
Web (planejado) Navegador 🔜 Futuro ASP.NET Core MVC + Razor + Vue.js 3

As camadas Core e Application serão compartilhadas entre as duas versões, garantindo que a lógica de negócio não seja duplicada.


Tecnologias

Camada Tecnologia
Framework .NET 8 (WPF)
UI Blazor Hybrid (Microsoft.AspNetCore.Components.WebView.Wpf)
ORM Entity Framework Core 8 (Code First + Migrations)
Banco de dados SQL Server / LocalDB
System Tray H.NotifyIcon.Wpf
Notificações Windows App Notifications (Toast nativo)
MVVM CommunityToolkit.Mvvm
Ícones Font Awesome 6 (local, offline)
Gráficos Chart.js (linha e rosca na aba Finanças)
Markdown Markdig (renderização das notas rápidas)
Discord Rich Presence DiscordRPC
Arquitetura Layered (Core · Application · Infrastructure · WPF)

Estrutura do Projeto

FocusVisk/
├── FocusVisk.Core/               # Entidades e interfaces (futura extração)
│   ├── Models/
│   ├── Services/
│   └── Data/
├── FocusVisk.UI/                 # Componentes Blazor reutilizáveis (futuro)
│   ├── Components/
│   ├── Pages/
│   ├── Shared/
│   └── wwwroot/
└── FocusVisk.WPF/                # Projeto principal — aplicação desktop
    ├── Data/
    │   └── AppDbContext.cs        # DbContext (EF Core) + factory de design-time; seed de AppSettings
    ├── Models/
    │   ├── AppModels.cs           # CalendarNote, PomodoroSession, QuickNote (pasta e tag), AppSettings, Habit, HabitLog
    │   ├── FinanceTransaction.cs  # FinancaTransaction, SavingGoal e enums de tipo/categoria
    │   ├── SearchResult.cs        # Resultado unificado da busca global (tarefa, nota ou hábito)
    │   └── TodoItem.cs            # Tarefa com Priority, tag, recorrência, subtarefas e horário agendado
    ├── Native/
    │   └── ToastRegistration.cs   # Registro do AppUserModelID para notificações nativas do Windows
    ├── Pages/
    │   ├── Dashboard.razor        # Estatísticas, gráfico semanal, tarefas pendentes
    │   ├── TodoPage.razor         # Lista de tarefas com filtros, prioridades e subtarefas
    │   ├── PomodoroPage.razor     # Timer Pomodoro com controle de fase
    │   ├── CalendarPage.razor     # Calendário mensal com anotações por dia
    │   ├── NotesPage.razor        # Notas rápidas fixáveis
    │   ├── HabitsPage.razor       # Rastreador de hábitos com streaks e histórico mensal
    │   ├── FinancasPage.razor     # Transações, metas de economia, gráficos e calculadora
    │   └── SettingsPage.razor     # Configurações de Pomodoro, tema, bloqueio e inicialização
    ├── Services/
    │   ├── TaskService.cs         # CRUD de tarefas, subtarefas, recorrência e reset diário
    │   ├── PomodoroService.cs     # Timer com fases e persistência de sessões
    │   ├── CalendarService.cs     # CRUD de anotações de calendário
    │   ├── NotesService.cs        # CRUD de notas rápidas (pastas e tags)
    │   ├── HabitService.cs        # CRUD de hábitos, logs diários e cálculo de streak
    │   ├── FinancasService.cs     # CRUD de transações e metas de economia
    │   ├── FocusBlockerService.cs # Bloqueio de sites via arquivo hosts do Windows
    │   ├── AlertService.cs        # Verificação periódica e disparo de notificações de tarefas agendadas
    │   ├── StartupService.cs      # Ativa/desativa inicialização automática com o Windows
    │   ├── StatsService.cs        # Estatísticas e streak do dashboard
    │   ├── ThemeService.cs        # Persistência e aplicação de tema/cores
    │   ├── SearchService.cs       # Busca global unificada em tarefas, notas e hábitos
    │   ├── TagService.cs          # Agregação de tags usadas em tarefas e notas, com paleta de cores
    │   ├── ShortcutService.cs     # Ponte entre atalhos de teclado globais e os componentes Blazor
    │   ├── MarkdownRenderer.cs    # Conversão do conteúdo Markdown das notas para HTML
    │   ├── DataExportService.cs   # Exportação/importação de todos os dados em backup JSON
    │   └── DiscordService.cs      # Presença rica (Rich Presence) do FocusVisk no Discord
    ├── Shared/
    │   └── Sidebar.razor          # Navegação lateral
    ├── wwwroot/
    │   ├── css/app.css            # Estilos globais e variáveis CSS
    │   ├── js/app.js              # Interoperabilidade JS e gráficos (Chart.js) da aba Finanças
    │   ├── index.html             # Host da aplicação Blazor
    │   └── lib/fontawesome/       # Font Awesome 6 (offline)
    ├── App.xaml / App.xaml.cs     # Bootstrap, DI, configuração do DbContext e inicialização em segundo plano
    ├── MainWindow.xaml            # Janela principal com BlazorWebView e ícone de bandeja
    └── AppComponent.razor         # Componente raiz Blazor (Router)

Serviços

TaskService

CRUD completo de tarefas (TodoItem), incluindo subtarefas e tarefas recorrentes (diária, dias úteis, semanal ou mensal). Calcula em quais dias uma tarefa recorrente deve aparecer no calendário e reseta automaticamente as tarefas recorrentes concluídas quando chega uma nova ocorrência. Expõe o evento OnChanged para atualização reativa da UI. Cria um novo scope de DbContext por operação, compatível com o ciclo de vida Transient do contexto.

PomodoroService

Timer baseado em System.Timers.Timer com controle de fases (Focus → ShortBreak → LongBreak). Ao concluir uma sessão de foco, persiste automaticamente um PomodoroSession no banco. Expõe eventos OnTick e OnPhaseChanged para o componente Blazor.

CalendarService

CRUD de CalendarNote com queries por mês e por dia. Expõe OnChanged para reatividade.

NotesService

CRUD de QuickNote com suporte a fixação (IsPinned). Ordenação: fixadas primeiro, depois por UpdatedAt decrescente.

HabitService

CRUD de hábitos (Habit) e seus registros diários (HabitLog). Calcula streak de dias consecutivos, total de conclusões nos últimos 30 dias e histórico de um hábito para um mês específico.

FinancasService

CRUD completo de transações (FinancaTransaction) e metas de economia (SavingGoal), com consultas por mês e cálculo do saldo total e do saldo do período. Uma meta salva para um mês que já possui meta cadastrada atualiza o registro existente em vez de duplicá-lo. Expõe OnChanged para reatividade da UI, seguindo o mesmo padrão de scope por operação dos demais serviços.

FocusBlockerService

Bloqueia e desbloqueia sites distratores manipulando o arquivo C:\Windows\System32\drivers\etc\hosts. Insere um bloco demarcado com comentários (# === FOCUS FocusVisk START/END ===) para isolamento seguro. Requer execução como Administrador para escrever no arquivo.

AlertService

Roda em segundo plano verificando periodicamente tarefas com horário agendado (ScheduledTime) e dispara notificações nativas (toast) do Windows quando chega o horário, incluindo tarefas recorrentes.

StartupService

Ativa ou desativa a inicialização automática do FocusVisk junto com o Windows, gravando/removendo a entrada correspondente no registro (HKCU...Run). Quando ativado, o app abre direto minimizado na bandeja do sistema, sem exibir a janela.

StatsService

Agrega estatísticas para o dashboard: sessões do dia, sessões da semana, tarefas concluídas hoje, tarefas pendentes, streak de dias consecutivos (até 365 dias) e gráfico de barras dos últimos 7 dias.

ThemeService

Persiste e aplica preferências visuais (tema claro/escuro/customizado, cor de destaque, cores de fundo). Gera as variáveis CSS dinâmicas injetadas na aplicação Blazor via BuildCssVariables().

SearchService

Busca global unificada: consulta tarefas, notas e hábitos por título/descrição e retorna resultados combinados (SearchResult) já ordenados e prontos para exibição na paleta de busca (Ctrl+K).

TagService

Agrega as tags cadastradas em tarefas e notas, sem duplicatas, e atribui uma cor consistente a cada tag a partir de uma paleta fixa de badges.

ShortcutService

Faz a ponte entre os atalhos de teclado globais capturados no JS host e os componentes Blazor, expondo o evento OnNewTaskRequested para abrir a criação de tarefa a partir do atalho Ctrl+N.

MarkdownRenderer

Converte o conteúdo Markdown das notas rápidas em HTML (via Markdig) para a pré-visualização exibida na aba Notas.

DataExportService

Exporta todos os dados do usuário (tarefas, notas, hábitos, transações, metas, sessões Pomodoro, anotações de calendário e configurações) para um arquivo JSON de backup, e permite reimportar esse backup substituindo os dados atuais.

DiscordService

Inicializa e atualiza a presença rica (Rich Presence) do FocusVisk no Discord, mostrando o que o usuário está fazendo na aplicação (ex: em sessão de foco) e o tempo decorrido.


Funcionalidades

Dashboard

  • Cards com sessões do dia, streak de dias seguidos, tarefas concluídas hoje e tarefas pendentes
  • Gráfico de barras das sessões Pomodoro dos últimos 7 dias
  • Listagem rápida de tarefas pendentes

Tarefas

  • Cadastro com título, descrição, prioridade (Low / Medium / High), tag colorida, prazo e subtarefas
  • Recorrência diária, em dias úteis, semanal ou mensal, com exibição opcional no calendário
  • Horário agendado com notificação nativa do Windows no momento configurado
  • Filtros por status (todas, pendentes, concluídas) e prioridade
  • Toggle de conclusão (inclusive de subtarefas) e exclusão
  • Reset automático de tarefas recorrentes concluídas ao chegar uma nova ocorrência
  • Criação rápida via atalho de teclado Ctrl+N

Busca Global

  • Paleta de busca acionada pelo atalho Ctrl+K em qualquer tela
  • Busca unificada em tarefas, notas e hábitos, com resultados agrupados por tipo
  • Navegação por teclado e atalho direto para o item encontrado

Hábitos

  • Cadastro de hábitos com ícone e cor customizáveis
  • Marcação diária de conclusão, com cálculo de streak de dias consecutivos
  • Histórico visual por mês e contagem de conclusões nos últimos 30 dias
  • Arquivamento e exclusão de hábitos

Pomodoro

  • Timer configurável com fases de foco, pausa curta e pausa longa
  • Skip e reset de fase
  • Persistência automática de sessões concluídas
  • Integração com FocusBlockerService para bloquear sites durante o foco
  • Início/pausa rápidos via atalho de teclado Ctrl+Shift+P
  • Presença atualizada em tempo real no Discord durante as sessões

Calendário

  • Navegação mensal
  • Anotações por dia com cor customizável
  • Exibição de tarefas (inclusive recorrentes) nos dias em que ocorrem

Notas Rápidas

  • Criação e edição inline com suporte a Markdown (negrito, itálico, listas, código) e pré-visualização renderizada
  • Organização em pastas e por tags coloridas
  • Fixação de notas ao topo

Finanças

  • Lançamento de entradas e saídas com título, valor, categoria e descrição opcional
  • Cards de saldo total, entradas do mês, saídas do mês e saldo líquido do mês
  • Meta de economia mensal com barra de progresso e aviso ao atingir o valor definido
  • Gráficos de evolução do saldo (últimos 7 dias) e de gastos por categoria no mês
  • Histórico de transações com filtros (tudo, entradas, saídas, mês atual) e exclusão
  • Calculadora rápida embutida (botão flutuante) para conferência de valores

Configurações

  • Duração das fases do Pomodoro
  • Ativar/desativar bloqueio de sites e editar lista de sites bloqueados
  • Alternância entre tema claro e escuro
  • Customização de cor de destaque e cores de fundo
  • Ativar/desativar inicialização automática com o Windows (em segundo plano, direto na bandeja)
  • Exportar todos os dados para um arquivo JSON de backup
  • Importar um backup JSON, substituindo os dados atuais

System Tray

  • Aplicação minimiza para a bandeja do sistema
  • Menu de contexto com opções de restauração e encerramento
  • Ao iniciar com o Windows, abre direto minimizado, sem exibir a janela

Notificações

  • Toasts nativos do Windows para tarefas com horário agendado, com som e suporte a recorrência

Pré-requisitos

  • Windows 10/11 (x64)
  • .NET 8 SDK — download
  • Visual Studio 2022 (17.8+) com workload ASP.NET and web development e Windows desktop development
  • SQL Server ou SQL Server Express LocalDB (incluído com o Visual Studio)

Observações Importantes

  • Bloqueio de sites: o FocusBlockerService manipula o arquivo hosts do Windows e requer que o aplicativo seja executado como Administrador. Sem permissão elevada, o bloqueio é ignorado com uma exceção tratada.
  • Banco de dados: o schema é criado/migrado automaticamente na inicialização via db.Database.Migrate(). Migrations novas são aplicadas sem perda de dados existentes.
  • Finanças: valores monetários são armazenados como decimal(18,2) e exibidos no formato brasileiro (R$, cultura pt-BR). A meta de economia é única por mês/ano — salvar uma nova meta em um mês que já possui uma existente atualiza o valor em vez de criar um novo registro.
  • Notificações: exigem que o app esteja registrado como fonte de notificações do Windows (feito automaticamente na inicialização via ToastRegistration); em alguns casos pode ser necessário permitir notificações do FocusVisk nas configurações do Windows.
  • Inicialização automática: ao ativar "Iniciar com o Windows" nas configurações, o app é registrado no Run do registro com um argumento que faz com que ele abra direto em segundo plano, sem exibir a janela principal.
  • WebView2: o Microsoft.AspNetCore.Components.WebView.Wpf inclui o runtime do WebView2 automaticamente via NuGet; não é necessário instalar separadamente.
  • Font Awesome: os ícones são carregados localmente a partir de wwwroot/lib/fontawesome, sem dependência de CDN externo.
  • Backup de dados: o DataExportService exporta todo o banco de dados do usuário em um único arquivo JSON; a importação substitui integralmente os dados atuais, então recomenda-se fazer um export antes de importar um backup antigo.
  • Discord Rich Presence: requer o cliente do Discord aberto na máquina para exibir o status; caso não esteja disponível, a aplicação segue funcionando normalmente sem a integração.
  • v1.0 lançada: a versão Desktop já está estável e disponível na aba Releases. O projeto foi idealizado para auxiliar no meu aprendizado e continuará recebendo novas implementações.

About

Aplicação desktop e web para auxiliar na produtividade pessoal.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages