feat(mobile): Netralax landing screen with runtime version + nav smoke test
This commit is contained in:
+32
-12
@@ -1,17 +1,29 @@
|
|||||||
// Landing / Login screen.
|
import * as Application from 'expo-application';
|
||||||
|
import { Link } from 'expo-router';
|
||||||
|
import { Pressable, StyleSheet, Text, View } from 'react-native';
|
||||||
|
|
||||||
|
// Phase 0 landing screen. Just enough to prove the app boots and routes:
|
||||||
|
// * Netralax brand wordmark (replaces the previous "ChatApp" string).
|
||||||
|
// * Runtime version from expo-application so we can spot stale builds
|
||||||
|
// on a TestFlight tester's device at a glance.
|
||||||
|
// * Placeholder nav link into (app)/chats — exercises Expo Router so a
|
||||||
|
// routing regression shows up here instead of mid-Phase-1.
|
||||||
//
|
//
|
||||||
// Milestone 1 TODO:
|
// Phase 1 replaces this with the actual magic-link login form.
|
||||||
// - 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() {
|
export default function Landing() {
|
||||||
|
const version = Application.nativeApplicationVersion ?? '0.0.0';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<Text style={styles.title}>ChatApp</Text>
|
<Text style={styles.title}>Netralax</Text>
|
||||||
<Text style={styles.subtitle}>Login placeholder — magic link flow goes here.</Text>
|
<Text style={styles.subtitle}>Phase 0 — Deployment-Fundament</Text>
|
||||||
|
<Text style={styles.version}>v{version}</Text>
|
||||||
|
|
||||||
|
<Link href="/(app)/chats" asChild>
|
||||||
|
<Pressable style={styles.button}>
|
||||||
|
<Text style={styles.buttonText}>Weiter (Smoke-Test)</Text>
|
||||||
|
</Pressable>
|
||||||
|
</Link>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -24,6 +36,14 @@ const styles = StyleSheet.create({
|
|||||||
backgroundColor: '#0b0b0f',
|
backgroundColor: '#0b0b0f',
|
||||||
padding: 24,
|
padding: 24,
|
||||||
},
|
},
|
||||||
title: { color: '#fff', fontSize: 28, fontWeight: '600' },
|
title: { color: '#fff', fontSize: 32, fontWeight: '700', letterSpacing: 1 },
|
||||||
subtitle: { color: '#9ca3af', marginTop: 8, textAlign: 'center' },
|
subtitle: { color: '#9ca3af', marginTop: 8, marginBottom: 4 },
|
||||||
|
version: { color: '#6b7280', fontSize: 12, marginBottom: 32 },
|
||||||
|
button: {
|
||||||
|
backgroundColor: '#5865f2',
|
||||||
|
paddingHorizontal: 24,
|
||||||
|
paddingVertical: 14,
|
||||||
|
borderRadius: 12,
|
||||||
|
},
|
||||||
|
buttonText: { color: '#fff', fontWeight: '600', fontSize: 15 },
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user