Blog
Feature
5. Januar 20267 min

Der Feed: Der komplexeste Bildschirm von TAMSIV

Jede App hat diesen Bildschirm, der die gesamte Komplexität konzentriert. Für TAMSIV ist es der Feed. Ein einziger Stream, der alles mischt: aktuelle Aktivitäten, Benachrichtigungen, Gamification-Statistiken, Abzeichen.

Die konsolidierte RPC

Eine einzige PostgreSQL-Funktion get_consolidated_feed aggregiert Aufgaben, Memos, Ereignisse, Gamification und Gruppenaktivitäten. Ein vereinheitlichter Typ mit item_type für das Routing auf der Frontend-Seite.

Die ersten Versionen: 3 Sekunden Ladezeit. Nach Indexierung und Umschreiben der JOINs: 200 ms.

Das Rendering mit React Native

Jeder Elementtyp hat seine Komponente: FeedTaskItem, FeedMemoItem, FeedGamificationItem, FeedGroupItem. Alles in einer FlatList von react-native-gesture-handler mit getItemLayout.

Das Problem abgelaufener Bilder

Die signierten Supabase-URLs laufen nach 60 Minuten ab. Lösung: den storage_path speichern und die URLs über StorageService.refreshAttachmentUrlsBatch() aktualisieren. Batch-Aufruf statt N individueller Aufrufe.

Das progressive Laden

Unendliche Paginierung (20 Elemente), Pull-to-Refresh, L1-Speicher-Cache + L2-AsyncStorage. Der Feed lädt sofort aus dem Cache und aktualisiert sich dann im Hintergrund. Dieser Bildschirm hat mich drei Wochen gekostet. Es ist auch der, auf den ich am stolzesten bin.