Le Feed : l'écran le plus complexe de TAMSIV
Chaque app a cet écran qui concentre toute la complexité. Pour TAMSIV, c'est le Feed. Un flux unique qui mélange tout : activité récente, notifications, stats de gamification, badges.
La RPC consolidée
Une seule fonction PostgreSQL get_consolidated_feed agrège tâches, mémos, événements, gamification et activité de groupe. Un type unifié avec item_type pour le routing côté frontend.
Les premières versions : 3 secondes de chargement. Après indexation et réécriture des JOINs : 200ms.
Le rendering React Native
Chaque type d'élément a son composant : FeedTaskItem, FeedMemoItem, FeedGamificationItem, FeedGroupItem. Le tout dans une FlatList de react-native-gesture-handler avec getItemLayout.
Le problème des images expirées
Les signed URLs Supabase expirent après 60 minutes. Solution : stocker le storage_path et rafraîchir les URLs via StorageService.refreshAttachmentUrlsBatch(). Batch call plutôt que N appels individuels.
Le chargement progressif
Pagination infinie (20 éléments), pull-to-refresh, cache L1 mémoire + L2 AsyncStorage. Le feed se charge instantanément depuis le cache puis se met à jour en arrière-plan. Cet écran m'a pris trois semaines. C'est aussi celui dont je suis le plus fier.