initial
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
// 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 { Stack } from 'expo-router';
|
||||
|
||||
export default function AppLayout() {
|
||||
return <Stack screenOptions={{ headerShown: true }} />;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Chats list placeholder.
|
||||
// Milestone 1 TODO: render list of conversations, decrypt last-message preview,
|
||||
// navigate to a conversation screen on tap.
|
||||
|
||||
import { StyleSheet, Text, View } from 'react-native';
|
||||
|
||||
export default function Chats() {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text style={styles.text}>Chats — placeholder</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: { flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: '#0b0b0f' },
|
||||
text: { color: '#fff' },
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
// Root layout for Expo Router.
|
||||
// Wraps every screen. Place global providers here (Theme, Supabase/Auth context,
|
||||
// SafeAreaProvider, GestureHandlerRootView, etc.) once they exist.
|
||||
|
||||
import { Stack } from 'expo-router';
|
||||
import { StatusBar } from 'expo-status-bar';
|
||||
|
||||
export default function RootLayout() {
|
||||
return (
|
||||
<>
|
||||
<StatusBar style="auto" />
|
||||
<Stack screenOptions={{ headerShown: false }}>
|
||||
<Stack.Screen name="index" />
|
||||
<Stack.Screen name="(app)" />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// Landing / Login screen.
|
||||
//
|
||||
// Milestone 1 TODO:
|
||||
// - Show app logo + "Enter your email" field.
|
||||
// - On submit, call shared/auth requestMagicLink(email).
|
||||
// - Handle deep link return in app/_layout.tsx (or a dedicated auth callback route).
|
||||
|
||||
import { StyleSheet, Text, View } from 'react-native';
|
||||
|
||||
export default function Landing() {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text style={styles.title}>ChatApp</Text>
|
||||
<Text style={styles.subtitle}>Login placeholder — magic link flow goes here.</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
backgroundColor: '#0b0b0f',
|
||||
padding: 24,
|
||||
},
|
||||
title: { color: '#fff', fontSize: 28, fontWeight: '600' },
|
||||
subtitle: { color: '#9ca3af', marginTop: 8, textAlign: 'center' },
|
||||
});
|
||||
Reference in New Issue
Block a user