Clarify that commits should never go directly to main. All work must go through
feature branches and pull requests for review and traceability.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Calculate elapsed time server-side and return it to client. Timer now adds
elapsedSeconds from server to local increments since response received, instead
of calculating from startAt with potentially mismatched browser clock.
Backend changes:
- TaskHistoryItem: add getElapsedSeconds() to calculate time since startAt
- TaskHistoryItemOutput: add elapsedSeconds field
- CreateTaskResponse.TaskHistoryItemResponse: add elapsedSeconds field
- CreateTaskMapper: map elapsedSeconds in toTaskHistoryItemOutput()
Frontend changes:
- TaskTimer: track responseTimestamp when running item changes
- Calculate: accumulatedSeconds + elapsedSeconds + (now - responseTimestamp)
- Remove parseISO import (no longer needed)
- TaskHistoryItem type: add optional elapsedSeconds field
This fixes the issue where timer doesn't update until task is stopped if
server and browser clocks are out of sync.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Remove user membership filter from task query — show all org tasks, not just user's accessible ones
- Add color and icon fields to projects with DB migration and entity updates
- Fetch org members and projects upfront for filters, not just from task results
- Convert project and status filters to chips like categories, with color/icon display
- Add icon and color picker to project creation form
Backend changes:
- TaskRepositoryImpl: remove (pu.email = ?2 or tu.email = ?2) from WHERE clause
- TaskRepository interface: remove email param from findAccessibleTasksFiltered
- ListAllTasksUseCase: adjust call without email
- CreateProjectUseCase: accept color and icon params
- ProjectController: update request/response records, map new fields
- ProjectEntityMapper: map color/icon in both directions
- Add V3 migration for color/icon columns
Frontend changes:
- TaskListPage: fetch org members and projects on org change
- TaskFilterBar: replace dropdowns with chips for projects and status
- ProjectsPage: add color picker and icon picker to form
- Project type: add optional color/icon fields
- TaskAssignee: allow photo to be nullable
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Ensure running seconds never go negative by using Math.max(0, ...)
This prevents the timer from showing negative values when there's a
clock skew between client and server.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Backend:
- Adicionar métodos de contagem/agregação aos repositórios (UserRepository, OrganizationRepository, TaskRepository)
- Implementar nova use case PublicStatsUseCase que retorna estatísticas públicas (usuários, organizações, tarefas completas, horas registradas)
- Criar novo controller público GET /public/stats sem autenticação
- Configurar CDI factory PublicStatsUseCaseConfig
Frontend:
- Criar nova landing page pública (LandingPage.tsx) com seções:
* Hero com CTAs (Começar grátis / Ver demo)
* 4 cards de funcionalidades principais (dashboard, produtividade, rastreamento, Kanban)
* Seção "Como funciona" com 3 passos
* Showcase visual do dashboard com leaderboard fake
* Estatísticas reais da plataforma (consumidas do backend)
* CTA final e footer
- Criar serviço publicStatsService para consumir o endpoint público
- Adicionar rota /landing na router
- Design alinhado com o sistema de cores e tipografia existente (Plus Jakarta Sans, Tailwind v4)
Stats reais são animadas ao fazer scroll (Framer Motion counter).
Com o domínio task.beetech.dev servindo o frontend na raiz, o base
'/frontend/' gerava referencias quebradas nos assets. Muda para '/'.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
O modal de onboarding era disparado tanto na LoginPage quanto no AppShell
com navegação conflitante, fazendo ele fechar e reabrir ao escolher uma
opção. Agora o login sem org redireciona para /organizations, o AppShell
redireciona usuários sem org para lá, e o modal é exibido uma única vez
pela OrganizationsPage.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adiciona conceito de Categoria por organização (nome, cor e ícone lucide),
com CRUD restrito a OWNER/ADMIN. Tasks ganham categoria opcional, filtros
multiselect de status e categoria nas listagens, badges nos cards, e
gráficos de pizza de tempo por categoria nos dashboards pessoal, da
organização e no modal de detalhes do membro.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Substitui LocalDateTime.now() por Instant.now() no issuedAt — a string
produzida por LocalDateTime não contém timezone e era interpretada como
hora local pelo browser, fazendo o frontend calcular expiresAt errado e
nunca deslogar o usuário quando o token vencia.
- Cria TokenConstants com ACCESS_TOKEN_EXPIRY_SECONDS e
REFRESH_TOKEN_EXPIRY_SECONDS, eliminando os valores hardcoded em
LoginUseCase e RefreshTokenUseCase.
- Remove imports não utilizados em AuthController.
closes#24
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Backend: adiciona ListMyTasksInput, ListMyTasksRequest (@BeanParam) com
parâmetros text, projectId e status; novo método findTasksByUserFiltered
no repositório com query dinâmica via Panache; mapper atualizado;
CLAUDE.md documenta regra de DTO Request para 3+ parâmetros.
Frontend: componente reutilizável TaskFilterBar (texto, projeto, status)
integrado em TaskListPage e TaskBoardPage; getMyTasks() aceita filtros
repassados como query params ao backend.
closes#26
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Propagava o campo history do CreateTaskRequest até o use case e persistência.
O mapeamento em TaskControllerMapper ignorava o history; CreateTaskInput não
tinha o campo; e CreateTaskUseCase não aplicava os itens à entidade antes
de salvar.
Closes#22
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove leading slash from smallrye-health.root-path so the health
endpoint resolves to /backend/q/status (relative to non-app root)
instead of the unreachable absolute path /status
- Clean up docker-compose traefik labels (remove stale comments)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>