Aplicação web construída em ASP.NET Core para ajudar estudantes a manter o foco, acompanhar o tempo de estudo e visualizar o histórico de sessões por usuário.
O sistema oferece um cronômetro moderno com barra de progresso circular, metas de estudo, classificação por tipo de atividade (badges) e um layout responsivo com suporte a tema claro/escuro (dark mode com foco em preto + verde).
- Cadastro de usuário com:
- Nome
- E-mail (único)
- Senha (armazenada como hash SHA256)
- Login/Logout usando sessão.
- Cada usuário enxerga apenas suas sessões de estudo.
- Cronômetro circular com barra de progresso (SVG):
- Exibe tempo decorrido em
hh:mm:ss. - Usa uma barra de progresso circular animada, com cor verde em destaque.
- Exibe tempo decorrido em
- Meta de tempo opcional:
- Campo para informar meta em minutos (ex.: 25, 50, 90).
- O progresso circular vai de 0% a 100% em função da meta.
- Tipos de atividade (badge):
- Foco
- Estudo
- Exercícios
- Videoaulas
- Pesquisas
- Documentações
- Campos adicionais:
- Assunto / Matéria (texto livre, opcional).
Ao clicar em Finalizar, o sistema:
- Calcula a duração em minutos.
- Gera
StartTimeeEndTimecom base na duração. - Salva a sessão no banco de dados atrelada ao usuário logado.
- Arquivo de áudio em
Sound/freesound_community-alarm-clock-short-6402.mp3. - Quando o cronômetro atinge 100% da meta preenchida:
- O som do alarme toca automaticamente.
- Um botão “Parar alarme” aparece, permitindo pausar/resetar o som.
- Página de histórico com layout em cards:
- Data da sessão.
- Horário de início e fim.
- Duração total em minutos.
- Meta configurada (quando existir).
- Badge/Tipo de atividade com cores diferentes (Foco, Estudo, Exercícios, etc).
- Cards com animações suaves (hover com elevação/zoom).
- Responsivo (grids em colunas para desktop e uma coluna só em mobile).
- Barra de pesquisa por assunto/matéria.
- Busca parcial (
Contains) – funciona mesmo digitando parte do nome. - Ícone de limpar filtro (X) reposicionado ao lado do campo.
- Dark mode como padrão, com paleta preto+verde:
- Fundo
#0b0c10. - Cards
#1f2326. - Destaques em verde neon
#20c997.
- Fundo
- Theme switcher no topo:
- Botão pequeno circular com ícone.
- Preferência salva em
localStorage.
- Usabilidade:
- Inputs, bordas e focos adaptados para ótima legibilidade no escuro.
- Cores ajustadas para textos secundários e ícones.
- .NET 8 (ASP.NET Core MVC)
- C# 12
- Entity Framework Core com provider:
Pomelo.EntityFrameworkCore.MySql(8.x) – MySQL
- MySQL como banco de dados relacional
- Bootstrap 5 + Bootstrap Icons
- JavaScript vanilla (para cronômetro, progress bar, alarme e dark mode)
Projecttest/
Controllers/
HomeController.cs # Cronômetro, histórico e fluxo principal
AccountController.cs # Cadastro, login e logout simples
Data/
ApplicationDbContext.cs # DbContext EF Core (Users, StudySessions)
Models/
User.cs # Entidade de usuário
StudySession.cs # Entidade de sessão de estudo
Views/
Home/
Index.cshtml # Cronômetro + meta + badge + alarme
History.cshtml # Cards do histórico + filtro
Account/
Login.cshtml
Register.cshtml
Shared/
_Layout.cshtml # Layout geral, navbar, dark mode, recursos estáticos
Sound/
freesound_community-alarm-clock-short-6402.mp3 # Som do alarme
wwwroot/
... # Bootstrap, JS, CSS gerados
appsettings.json
appsettings.Development.json (IGNORADO no Git)
Program.cs
Projecttest.csproj
Models/User.cs:
public class User
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string PasswordHash { get; set; } = string.Empty;
public ICollection<StudySession> StudySessions { get; set; } = new List<StudySession>();
}Models/StudySession.cs:
public class StudySession
{
public int Id { get; set; }
public int UserId { get; set; }
public User User { get; set; } = null!;
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public int DurationMinutes { get; set; }
public string? Subject { get; set; }
public int? TargetMinutes { get; set; }
public string? Badge { get; set; } // Foco, Estudo, Exercícios, Videoaulas, Pesquisas, Documentações
}- .NET 8 SDK instalado
- MySQL Server em execução (local ou remoto)
- Acesso a um usuário MySQL (por exemplo,
root)
git clone https://github.com/<seu-usuario>/Projecttest.git
cd ProjecttestCrie o banco:
CREATE DATABASE studyfocusdb
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;Aplique as migrations do Entity Framework Core:
cd Projecttest
dotnet ef database updateappsettings.json(versionado, exemplo):
{
"ConnectionStrings": {
"DefaultConnection": "server=localhost;database=studyfocusdb;user=root;password=CHANGEME;"
}
}appsettings.Development.json(local, ignorado pelo Git):
{
"ConnectionStrings": {
"DefaultConnection": "server=localhost;database=studyfocusdb;user=root;password=SUA_SENHA_REAL_AQUI;"
}
}Certifique-se de:
- Ajustar
SUA_SENHA_REAL_AQUIcom a senha correta do seu MySQL. - Garantir que
appsettings.Development.jsonestá listado no.gitignore.
Na pasta Projecttest/ (onde está o .csproj):
dotnet runA aplicação deve subir em algo como:
https://localhost:7067
- Acessar
/Account/Registere criar uma conta. - Fazer login em
/Account/Login. - Ir para a página inicial (
/Home/Index):- Escolher tipo de atividade (badge).
- (Opcional) Definir assunto e meta em minutos.
- Iniciar/Pausar/Finalizar o cronômetro.
- Ao atingir a meta:
- O círculo completa 100%.
- O som de alarme é disparado.
- Um botão “Parar alarme” permite silenciar o som.
- Acessar
/Home/Historypara ver o histórico em cards:- Filtrar por texto (assunto).
- Visualizar badges coloridas por tipo de atividade.
- Ver meta e duração real.
- Senhas de usuários são salvas como hash (não em texto plano).
- A string de conexão real do banco fica apenas em
appsettings.Development.json(ignorado pelo Git). Program.cslança exceção se a connection string não estiver configurada, evitando rodar em produção sem configuração adequada.
- Implementar ASP.NET Identity completo (roles, recuperação de senha, etc.).
- Adicionar gráficos (por exemplo, tempo de estudo por dia/semana usando Chart.js).
- Notificações de desktop quando a meta de estudo é alcançada.
- Suporte a múltiplos timers/projetos por usuário.
- Internacionalização (pt-BR / en-US).