diff --git a/apps/mobile/app/(app)/_layout.tsx b/apps/mobile/app/(app)/_layout.tsx
index e6b0685..fedb0bd 100644
--- a/apps/mobile/app/(app)/_layout.tsx
+++ b/apps/mobile/app/(app)/_layout.tsx
@@ -1,9 +1,14 @@
-// Authenticated app group layout.
-// Gate on session: if no session, redirect to `/`.
-// Add tab bar / drawer nav here once we have more than one screen.
+import { Redirect, Stack } from 'expo-router';
-import { Stack } from 'expo-router';
+import { useAuth } from '../../lib/authContext';
+// Guard for the authenticated route group. While the AuthProvider is
+// hydrating from AsyncStorage we render nothing (a brief blank frame)
+// rather than flashing the login screen and then snapping into the chat
+// list — that's a worse UX than a 200ms blank.
export default function AppLayout() {
+ const { session, loading } = useAuth();
+ if (loading) return null;
+ if (!session) return ;
return ;
}