- PRD: vollständige Produktspezifikation (5 Module, Scope, Akzeptanzkriterien) - ARCHITECTURE: Tech Stack, Ordnerstruktur, Multi-Tenancy, Push, Kosten - DATABASE_SCHEMA: Vollständiges SQL-Schema mit RLS Policies und Views - USER_STORIES: 40+ Stories nach Rolle (Admin, Mitglied, Azubi, Obermeister) - PERSONAS: 5 detaillierte Nutzerprofile mit Alltag, Zitaten und Erwartungen - BUSINESS_MODEL: Preistabellen, Unit Economics, Revenue-Projektionen, Distribution - ROADMAP: 6 Phasen, Sprint-Planung, Meilensteine und KPIs - COMPETITIVE_ANALYSIS: Wettbewerbsmatrix, USPs, Preispositionierung - API_DESIGN: Supabase Query Patterns, Edge Functions, Realtime Subscriptions - ONBOARDING_FLOWS: 7 User Flows von Setup bis Fehlerfall - GTM_STRATEGY: 3-Phasen-Vertrieb, Outreach-Sequenz, Einwandbehandlung - AZUBI_MODULE: Video-Feed, 1-Click-Apply, Chat, Berichtsheft, Quiz - DSGVO_KONZEPT: Rechtsgrundlagen, TOMs, AVV, Minderjährige, Incident Response - FEATURES_BACKLOG: 72 Features nach MoSCoW + Technische Schulden Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
79 lines
2.0 KiB
TypeScript
79 lines
2.0 KiB
TypeScript
import { Tabs } from 'expo-router'
|
|
import { useAuthStore } from '@/store/auth.store'
|
|
import { Redirect } from 'expo-router'
|
|
import { Platform } from 'react-native'
|
|
|
|
function TabIcon({ emoji }: { emoji: string }) {
|
|
return null // Replaced by tabBarIcon in options
|
|
}
|
|
|
|
export default function AppLayout() {
|
|
const session = useAuthStore((s) => s.session)
|
|
|
|
if (!session) {
|
|
return <Redirect href="/(auth)/login" />
|
|
}
|
|
|
|
return (
|
|
<Tabs
|
|
screenOptions={{
|
|
tabBarActiveTintColor: '#E63946',
|
|
tabBarInactiveTintColor: '#6b7280',
|
|
tabBarStyle: {
|
|
borderTopColor: '#e5e7eb',
|
|
backgroundColor: 'white',
|
|
paddingBottom: Platform.OS === 'ios' ? 8 : 4,
|
|
height: Platform.OS === 'ios' ? 82 : 60,
|
|
},
|
|
headerStyle: { backgroundColor: 'white' },
|
|
headerTitleStyle: { fontWeight: '700', color: '#111827' },
|
|
headerShadowVisible: false,
|
|
}}
|
|
>
|
|
<Tabs.Screen
|
|
name="news"
|
|
options={{
|
|
title: 'News',
|
|
tabBarIcon: ({ color }) => (
|
|
/* Replace with actual icons after @expo/vector-icons setup */
|
|
<TabIcon emoji="📰" />
|
|
),
|
|
headerShown: false,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="members"
|
|
options={{
|
|
title: 'Mitglieder',
|
|
tabBarIcon: () => <TabIcon emoji="👥" />,
|
|
headerShown: false,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="termine"
|
|
options={{
|
|
title: 'Termine',
|
|
tabBarIcon: () => <TabIcon emoji="📅" />,
|
|
headerShown: false,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="stellen"
|
|
options={{
|
|
title: 'Stellen',
|
|
tabBarIcon: () => <TabIcon emoji="🎓" />,
|
|
headerShown: false,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="profil"
|
|
options={{
|
|
title: 'Profil',
|
|
tabBarIcon: () => <TabIcon emoji="👤" />,
|
|
headerShown: false,
|
|
}}
|
|
/>
|
|
</Tabs>
|
|
)
|
|
}
|