Commit graph

105 commits

Author SHA1 Message Date
Gabriel Menezes
51b70e567a feat: adicionar página de bloco de notas com salvamento no banco e confirmação ao sair 2026-11-12 16:25:48 -04:00
Gabriel Menezes
2ca14c8421 feat(auth): aumentar validade do token de acesso para 1 semana 2026-11-10 17:03:05 -04:00
Gabriel Menezes
6d0cf3c851 fix(kanban): split task card user and timer controls into separate lines 2026-11-09 14:01:24 -04:00
Gabriel Menezes
1c99b78ed2 fix(kanban): allow visible columns to expand dynamically when columns are hidden 2026-11-09 13:57:55 -04:00
Gabriel Menezes
a865dea719 feat(tasks): migrate task statuses to db table with org scope and dynamic board columns 2026-11-09 11:43:37 -04:00
Gabriel Menezes
df368218fd fix(tasks): corrigir resolucao do responsavel e extracao de externalUrl com IA 2026-11-06 10:44:09 -04:00
Gabriel Menezes
3dff934d61 feat(org): adicionar visibilidade publica e privada com protecao em buscas e join requests 2026-11-05 15:22:13 -04:00
Gabriel Menezes
c613c71f1e fix(auth): tratar credenciais invalidas com HTTP 401 e habilitar auto-login no cadastro 2026-11-05 14:58:17 -04:00
Gabriel Menezes
b1441285a1 feat: criar workspace padrao no cadastro de usuario e impedir organizacoes com nomes duplicados 2026-11-05 14:45:19 -04:00
Gabriel Menezes
f1782171ff feat(ai): adicionar criacao de tarefas por linguagem natural e enriquecimento com Ollama/Qwen 2026-11-04 15:12:07 -04:00
Gabriel Menezes
8adcd6c417 fix(dashboard): center donut chart text dead-center inside donut hole 2026-11-02 13:17:00 -04:00
Gabriel Menezes
4dda0e0445 feat(dashboard): add interactive category worked time pie chart to dashboard and bi v2 2026-11-02 12:58:34 -04:00
Gabriel Menezes
718c211391 fix(dashboard): render custom period modal via portal with z-index to prevent stacking context overlap 2026-11-02 10:59:02 -04:00
Gabriel Menezes
49d010eb71 feat(dashboard): add comprehensive period selector and time tracking to dashboard and dashboard v2 2026-11-02 10:24:37 -04:00
Gabriel Menezes
977c7ffd7a feat(reports): add PDF report download via headless LibreOffice converter 2026-11-01 12:50:42 -04:00
Gabriel Menezes
b8c23d5faa feat(reports): add AI_TEXT section type powered by local Ollama qwen3.5 2026-11-01 12:19:58 -04:00
Gabriel Menezes
c00a5ff4b7 feat(reports): add SIGNATURE section type inserting user default signature into docx 2026-11-01 11:14:10 -04:00
Gabriel Menezes
cc317e274b refactor(reports): remove atividades as default built-in tag 2026-11-01 09:53:38 -04:00
Gabriel Menezes
fe1412de23 feat(profile): add user digital signatures with upload, canvas drawing, and cursive template fonts 2026-11-01 09:49:09 -04:00
Gabriel Menezes
a569f1d9b8 refactor(reports): remove tarefas, periodo and total_horas native tags 2026-11-01 09:33:27 -04:00
Gabriel Menezes
02fa938d28 feat(reports): show automatic period activities notice in generate and template modals 2026-10-31 19:42:23 -04:00
Gabriel Menezes
57165fdbe9 feat(reports): add edit template capability with updated sections and optional docx replacement 2026-10-31 15:29:26 -04:00
Gabriel Menezes
771fa61629 fix(reports): resolve 401 unauthorized by using central jwt token extraction and url builder 2026-10-31 15:17:06 -04:00
Gabriel Menezes
5fcb933399 fix(reports): move add section button to the bottom of the section list 2026-10-31 15:14:05 -04:00
Gabriel Menezes
7624cff094 feat(reports): configure date format per section when type is date 2026-10-31 12:10:33 -04:00
Gabriel Menezes
8054ca9a6d feat(reports): allow fully customizable sections with pre-filled fixed values 2026-10-31 11:54:49 -04:00
Gabriel Menezes
5b4135b125 feat(reports): add standard header section with manager, project name and configurable period format 2026-10-31 11:39:27 -04:00
Gabriel Menezes
55fd823b2d feat(reports): add docx template management and dynamic report generation module 2026-10-31 11:07:13 -04:00
Gabriel Menezes
e141ad0721 fix(ui): render select dropdown in portal with top-level z-index to avoid stacking issues 2026-10-22 10:47:47 -04:00
Gabriel Menezes
f8b8bc14b8 style(dashboard): simplify scope indicators to icons only without background color 2026-10-22 10:29:34 -04:00
Gabriel Menezes
b41e664d8a refactor(ui): modernize Select component with HeroUI v3 aesthetics and replace native selects 2026-10-22 10:25:33 -04:00
Gabriel Menezes
cec8a1f818 feat(tasks): add scope toggle bar for individual vs team tasks 2026-10-22 09:47:23 -04:00
Gabriel Menezes
d3174653b1 feat: add scope toggles for individual vs team metrics, add GEMINI.md guidelines 2026-10-22 09:41:58 -04:00
Gabriel Menezes
d1bfe4d1cb feat: migrate to frontend v2, add task external links, auto-assign logged user, and preferences support 2026-10-15 09:04:24 -04:00
Gabriel Menezes
33b24b62d5 fix: resolve token expiration clock skew and remove Keycloak docs 2026-10-09 10:20:06 -04:00
Gabriel Menezes
b05ff9651a feat(ui): make task filter bar collapsible 2026-10-09 09:45:55 -04:00
Gabriel Menezes
c4828a0a77 feat: adicionar abas de filtro por status na listagem de tarefas 2026-10-09 09:43:39 -04:00
Gabriel Menezes
ec9cf347ec feat: redesign task filter bar UI 2026-10-08 10:22:49 -04:00
Gabriel Menezes
b399992dc5 fix: resolve profile photo rendering and upload issues 2026-10-08 10:22:41 -04:00
Gabriel Menezes
69aa0d3d9e fix(domain): use single-level subdomains with hyphens for Cloudflare SSL compatibility 2026-10-07 15:18:11 -04:00
Gabriel Menezes
791d184954 chore: configure docker-compose for homelab with task2.beetech.dev domain
- Replace archived MinIO images with community-maintained pgsty images
- Change routing domain to task2.beetech.dev across frontend, backend, and minio
- Avoid port collisions with existing homelab services (postgres port 5434)
- Add .env and *.pem to .gitignore
- Remove legacy deploy/ directory and deploy-main.yml workflow
2026-10-07 14:56:34 -04:00
Gabriel Menezes
437dbbe052
refactor: extract shared chart components to DashboardCharts.tsx
refactor: extract shared chart components to DashboardCharts.tsx
2026-05-22 20:29:26 -04:00
Gabriel Santana de Menezes
2ecbe090b5 refactor: extract shared chart components to DashboardCharts.tsx
Extrai BarChart, ProjectMiniPieChart, ChartTooltip e helpers (getPeriodLabel, chartFormatMinutes)
de MemberDetailModal.tsx para um arquivo compartilhado, eliminando duplicação ao reutilizá-los
na dashboard do usuário. CategoryMiniPieChart permanece local por usar cores dinâmicas de categoria.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 16:42:57 -04:00
Gabriel Santana de Menezes
2a41e5cf86 fix: resolve TypeScript error in apiFetch headers
Type the defaultHeaders as Record<string, string> to fix TS2322 error
when spreading headers into fetch options.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 19:17:41 -04:00
Gabriel Santana de Menezes
ee3c42a17f fix: remove Content-Type header when sending FormData in apiFetch
The hardcoded 'Content-Type: application/json' header was conflicting
with multipart/form-data uploads. When body is FormData, we now omit
the Content-Type header to let the browser set the correct
'multipart/form-data; boundary=...' header.

Fixes 415 Unsupported Media Type error on photo uploads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 19:07:31 -04:00
Gabriel Santana de Menezes
59a5c61585 feat: add MinIO image server and profile photo upload
Infrastructure: MinIO service added to docker-compose (prod + dev) with
minio-init container that creates the avatars bucket with public read
policy. Traefik routes minio.task.beetech.dev → port 9000.

Backend: native MinIO SDK integration via MinioStorageService;
UploadUserPhotoUseCase validates 5 MB limit and image content-type;
new POST /auth/profile/photo endpoint (multipart). All hardcoded
ui-avatars.com fallback URLs removed from 6 use cases — backend now
returns null when user has no photo.

Frontend: ProfilePage gains clickable avatar with camera overlay,
file picker, preview, and photo upload on save. UserAvatar gains
onError handler for broken URLs and xs size. OrganizationAdminPage
replaces hardcoded ui-avatars.com with UserAvatar component.

CI/CD: deploy-main.yml passes 5 new MinIO secrets to the server and
writes them to .env.production.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 18:01:59 -04:00
Gabriel Santana de Menezes
769791b25c feat: add user profile page with name and email editing
Backend: new UpdateUserProfileUseCase with email uniqueness validation,
PUT /auth/profile endpoint. Frontend: ProfilePage with avatar initials,
inline success/error feedback, and refreshUser() sync after save.
Avatar dropdown in AppShell gains a "Meu Perfil" link.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 15:03:45 -04:00
Gabriel Santana de Menezes
5a71aba13f refactor: extract shared task page logic into useTaskPage hook
Eliminates code duplication between TaskListPage and TaskBoardPage by
extracting common state, effects, and handlers into a custom hook. Also
fixes bug where TaskBoardPage's mergeProjects was omitting color/icon.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 10:41:07 -04:00
Gabriel Santana de Menezes
119d896a59 feat: add "Mostrar apenas as minhas" checkbox to task filters
Adds a pre-checked checkbox next to the employee filter that
automatically filters tasks to the logged-in user on page load.
Unchecking restores the free-select dropdown behavior.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:51:40 -04:00
Gabriel Santana de Menezes
f01d72c2bb Fix task timer desync between server and browser clocks
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>
2026-05-18 10:59:16 -04:00