Blog
Feature
5 de enero de 20267 min

El Feed: la pantalla más compleja de TAMSIV

Cada aplicación tiene esa pantalla que concentra toda la complejidad. Para TAMSIV, es el Feed. Un flujo único que mezcla todo: actividad reciente, notificaciones, estadísticas de gamificación, insignias.

La RPC consolidada

Una única función PostgreSQL get_consolidated_feed agrega tareas, notas, eventos, gamificación y actividad de grupo. Un tipo unificado con item_type para el enrutamiento en el frontend.

Las primeras versiones: 3 segundos de carga. Después de la indexación y reescritura de los JOINs: 200ms.

El renderizado de React Native

Cada tipo de elemento tiene su componente: FeedTaskItem, FeedMemoItem, FeedGamificationItem, FeedGroupItem. Todo dentro de una FlatList de react-native-gesture-handler con getItemLayout.

El problema de las imágenes caducadas

Las URLs firmadas de Supabase caducan después de 60 minutos. Solución: almacenar la storage_path y actualizar las URLs a través de StorageService.refreshAttachmentUrlsBatch(). Llamada por lotes en lugar de N llamadas individuales.

La carga progresiva

Paginación infinita (20 elementos), pull-to-refresh, caché L1 en memoria + L2 en AsyncStorage. El feed se carga instantáneamente desde el caché y luego se actualiza en segundo plano. Esta pantalla me llevó tres semanas. También es de la que estoy más orgulloso.