- 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
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>
Adiciona breakdown diário/mensal ao endpoint /dashboard do usuário:
- Novo record DashboardPeriodStats com year, month, day, finishedTasksCount e totalMinutesWorked
- DashboardUseCase agrupa history items por LocalDate para minutos e finishedAt para contagem de tarefas
- Lógica groupedBy: ≤62 dias → DAY, caso contrário → MONTH
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
Enforce maximum 5 files and 30 lines changed per PR to keep reviews
focused and maintainable. Split by layer (frontend, backend, config)
when exceeding limits.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
Updates MinIO credentials to meet minimum length requirements:
- MINIO_ROOT_USER: at least 3 characters (was 'minioadmin')
- MINIO_ROOT_PASSWORD: at least 8 characters (was 'minioadmin')
Now uses environment variables with sensible defaults that can be
overridden via .env file or GitHub Actions secrets.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>