Favoritos, atribuição e anexos — os detalhes que mudam tudo
Existem os grandes recursos e existem as "pequenas" adições que tornam o produto realmente utilizável.
Os favoritos
Marcar uma tarefa como favorita é um alternador. Um booleano. Deveria levar 30 minutos. Na prática: coluna, RLS, filtro de feed, animação de estrela, sincronização em tempo real. O salto da estrela me levou mais tempo do que a lógica de negócios.
A atribuição de tarefas
O modelo é uma tabela de ligação collaborative.task_assignments. O verdadeiro desafio é o FilterBar com três modos (Todos / Criados por mim / Atribuídos a mim) combinado com o filtro hierárquico de grupos.
Os anexos — a escolha arquitetural
Duas abordagens possíveis: JSONB (simples, rápido) ou tabelas relacionais (mais trabalho, mais escalável). Escolhi as tabelas relacionais (privat.task_attachments, privat.memo_attachments) para o desempenho de consultas, exclusão em cascata limpa e RLS individuais.
A armadilha das URLs assinadas
O Supabase Storage gera URLs assinadas que expiram após uma hora. Minha solução: um StorageService.refreshAttachmentUrlsBatch() que regenera as URLs em lote via storage_path. É o tipo de detalhe invisível — quando funciona, ninguém percebe. Quando quebra, todo mundo vê.