feat: Implement mobile application and lead processing utilities.

This commit is contained in:
2026-02-19 14:21:51 +01:00
parent fca42db4d2
commit c53a71a5f9
120 changed files with 24080 additions and 851 deletions

View File

@@ -1,44 +1,106 @@
import { View, Text, TouchableOpacity } from 'react-native'
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'
import { useRouter, useLocalSearchParams } from 'expo-router'
import { SafeAreaView } from 'react-native-safe-area-context'
import { Ionicons } from '@expo/vector-icons'
export default function CheckEmailScreen() {
const router = useRouter()
const { email } = useLocalSearchParams<{ email: string }>()
return (
<SafeAreaView className="flex-1 bg-white">
<View className="flex-1 justify-center items-center px-6">
{/* Envelope Illustration */}
<View className="w-24 h-24 bg-brand-50 rounded-full items-center justify-center mb-6">
<Text className="text-5xl">📧</Text>
<SafeAreaView style={styles.safeArea}>
<View style={styles.content}>
<View style={styles.iconBox}>
<Ionicons name="checkmark-circle" size={46} color="#15803D" />
</View>
<Text className="text-2xl font-bold text-gray-900 text-center mb-3">
Schau in dein Postfach
</Text>
<Text className="text-gray-500 text-center leading-6 mb-2">
Wir haben einen Login-Link an
</Text>
<Text className="font-semibold text-gray-900 text-center mb-6">
{email}
</Text>
<Text className="text-gray-500 text-center leading-6">
Klicken Sie auf den Link in der E-Mail, um sich einzuloggen.
Der Link ist 24 Stunden gültig.
<Text style={styles.title}>E-Mail pruefen</Text>
<Text style={styles.body}>Wir haben einen Login-Link gesendet an:</Text>
<View style={styles.emailBox}>
<Text style={styles.emailText} numberOfLines={1}>{email}</Text>
</View>
<Text style={styles.hint}>
Bitte oeffnen Sie den Link in Ihrer E-Mail, um sich anzumelden.
</Text>
<View className="mt-10 space-y-3 w-full">
<TouchableOpacity
onPress={() => router.back()}
className="py-3 items-center"
>
<Text className="text-brand-500 font-medium">
Andere E-Mail verwenden
</Text>
</TouchableOpacity>
</View>
<TouchableOpacity
onPress={() => router.back()}
style={styles.backBtn}
activeOpacity={0.8}
>
<Ionicons name="chevron-back" size={16} color="#003B7E" />
<Text style={styles.backText}>Andere E-Mail verwenden</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
)
}
const styles = StyleSheet.create({
safeArea: {
flex: 1,
backgroundColor: '#FFFFFF',
},
content: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
paddingHorizontal: 28,
},
iconBox: {
width: 88,
height: 88,
backgroundColor: '#DCFCE7',
borderRadius: 44,
alignItems: 'center',
justifyContent: 'center',
marginBottom: 24,
},
title: {
fontSize: 24,
fontWeight: '800',
color: '#0F172A',
textAlign: 'center',
marginBottom: 10,
},
body: {
fontSize: 14,
color: '#64748B',
textAlign: 'center',
marginBottom: 6,
},
emailBox: {
backgroundColor: '#F8FAFC',
borderWidth: 1,
borderColor: '#E2E8F0',
borderRadius: 14,
paddingHorizontal: 16,
paddingVertical: 10,
marginBottom: 16,
},
emailText: {
fontSize: 15,
fontWeight: '700',
color: '#0F172A',
},
hint: {
fontSize: 13,
color: '#64748B',
textAlign: 'center',
lineHeight: 19,
paddingHorizontal: 8,
},
backBtn: {
flexDirection: 'row',
alignItems: 'center',
gap: 4,
marginTop: 28,
},
backText: {
fontSize: 14,
fontWeight: '700',
color: '#003B7E',
},
})