Blog
Feature
5 gennaio 20267 min

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.