Blog
Feature
5 janvier 20267 min

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.