Favoritos, asignación y archivos adjuntos — los detalles que lo cambian todo
Hay grandes características y hay "pequeñas" adiciones que hacen que el producto sea realmente utilizable.
Los favoritos
Marcar una tarea como favorita es un interruptor. Un booleano. Debería tomar 30 minutos. En la práctica: columna, RLS, filtro de feed, animación de estrella, sincronización en tiempo real. El rebote de la estrella me llevó más tiempo que la lógica de negocio.
La asignación de tareas
El modelo es una tabla de enlace collaborative.task_assignments. El verdadero desafío es la FilterBar con tres modos (Todo / Creadas por mí / Asignadas a mí) combinada con el filtro jerárquico de grupos.
Los archivos adjuntos — la elección arquitectónica
Dos enfoques posibles: JSONB (simple, rápido) o tablas relacionales (más trabajo, más escalable). Elegí las tablas relacionales (privat.task_attachments, privat.memo_attachments) para el rendimiento de las consultas, la eliminación en cascada limpia y las RLS individuales.
La trampa de las URLs firmadas
Supabase Storage genera URLs firmadas que caducan después de una hora. Mi solución: un StorageService.refreshAttachmentUrlsBatch() que regenera las URLs en lote a través de la storage_path. Este es el tipo de detalle invisible — cuando funciona, nadie lo nota. Cuando falla, todo el mundo lo ve.