Favoris, assignation et pièces jointes — les détails qui changent tout
Il y a les grandes features et il y a les "petits" ajouts qui rendent le produit vraiment utilisable.
Les favoris
Mettre une tâche en favori, c'est un toggle. Un booléen. Ça devrait prendre 30 minutes. En pratique : colonne, RLS, filtre feed, animation étoile, synchronisation Realtime. Le bounce de l'étoile m'a pris plus de temps que la logique métier.
L'assignation de tâches
Le modèle est une table de liaison collaborative.task_assignments. Le vrai défi c'est le FilterBar avec trois modes (Tout / Créées par moi / Assignées à moi) combiné avec le filtre hiérarchique de groupes.
Les pièces jointes — le choix architectural
Deux approches possibles : JSONB (simple, rapide) ou tables relationnelles (plus de travail, plus évolutif). J'ai choisi les tables relationnelles (privat.task_attachments, privat.memo_attachments) pour les performances de requêtage, la suppression en cascade propre et les RLS individuelles.
Le piège des URLs signées
Supabase Storage génère des URLs signées qui expirent après une heure. Ma solution : un StorageService.refreshAttachmentUrlsBatch() qui régénère les URLs en batch via le storage_path. C'est le genre de détail invisible — quand ça marche, personne ne le remarque. Quand ça casse, tout le monde le voit.