Il Feed: la schermata più complessa di TAMSIV
Ogni app ha quella schermata che concentra tutta la complessità. Per TAMSIV, è il Feed. Un flusso unico che mescola tutto: attività recenti, notifiche, statistiche di gamification, badge.
La RPC consolidata
Una singola funzione PostgreSQL get_consolidated_feed aggrega attività, memo, eventi, gamification e attività di gruppo. Un tipo unificato con item_type per il routing lato frontend.
Le prime versioni: 3 secondi di caricamento. Dopo indicizzazione e riscrittura dei JOIN: 200ms.
Il rendering React Native
Ogni tipo di elemento ha il suo componente: FeedTaskItem, FeedMemoItem, FeedGamificationItem, FeedGroupItem. Il tutto in una FlatList di react-native-gesture-handler con getItemLayout.
Il problema delle immagini scadute
Gli URL firmati Supabase scadono dopo 60 minuti. Soluzione: memorizzare il storage_path e aggiornare gli URL tramite StorageService.refreshAttachmentUrlsBatch(). Chiamata batch anziché N chiamate individuali.
Il caricamento progressivo
Paginazione infinita (20 elementi), pull-to-refresh, cache L1 memoria + L2 AsyncStorage. Il feed si carica istantaneamente dalla cache e poi si aggiorna in background. Questa schermata mi ha richiesto tre settimane. È anche quella di cui sono più orgoglioso.