AeThex-Connect/packages/mobile/src/navigation/AppNavigator.tsx
MrPiglr 651cba733d
feat: Add sleek mobile-first design and Astro landing site
- Update design tokens with dark gaming theme (OLED-friendly)
  - Pure black backgrounds (#000000)
  - Cyan primary (#00d9ff) and neon green accent (#00ff88)
  - Glassmorphism effects and mobile-specific tokens

- Build complete React Native mobile app screens
  - HomeScreen: Chat list with dark cards and status indicators
  - MessagesScreen: Chat view with gradient bubbles and typing indicators
  - FriendsScreen: Friend list with online/offline sections and game presence
  - GamesScreen: GameForge projects with team channels
  - ProfileScreen: User profile with .aethex domain display
  - AppNavigator: Bottom tab navigation with glow effects

- Create Astro marketing landing site
  - Hero section with animated gradients and phone mockup
  - Features showcase (6 cards)
  - Pricing tiers (Free/Premium/Enterprise)
  - Download section for all platforms
  - Fully responsive dark theme

Design inspiration: BitChat, Root, Discord Dark, Telegram
Mobile-first approach with 48px touch targets and safe areas
2026-01-12 03:28:16 +00:00

120 lines
3.3 KiB
TypeScript

/**
* App Navigator
* Bottom tab navigation with sleek design
*/
import React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { NavigationContainer } from '@react-navigation/native';
import { StyleSheet, View, Text } from 'react-native';
import { theme } from '../theme';
// Screens
import HomeScreen from '../screens/HomeScreen';
import MessagesScreen from '../screens/MessagesScreen';
import GamesScreen from '../screens/GamesScreen';
import FriendsScreen from '../screens/FriendsScreen';
import ProfileScreen from '../screens/ProfileScreen';
const Tab = createBottomTabNavigator();
const TabIcon = ({ focused, emoji }: { focused: boolean; emoji: string }) => (
<View style={[styles.tabIcon, focused && styles.tabIconActive]}>
<Text style={styles.tabEmoji}>{emoji}</Text>
</View>
);
export default function AppNavigator() {
return (
<NavigationContainer
theme={{
dark: true,
colors: {
primary: theme.colors.primary,
background: theme.colors.background,
card: theme.colors.background,
text: theme.colors.text,
border: theme.colors.gray800,
notification: theme.colors.primary,
},
}}
>
<Tab.Navigator
screenOptions={{
headerShown: false,
tabBarStyle: styles.tabBar,
tabBarActiveTintColor: theme.colors.primary,
tabBarInactiveTintColor: theme.colors.gray600,
tabBarLabelStyle: styles.tabLabel,
}}
>
<Tab.Screen
name="Home"
component={HomeScreen}
options={{
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="🏠" />,
}}
/>
<Tab.Screen
name="Messages"
component={MessagesScreen}
options={{
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="💬" />,
tabBarBadge: 3, // Unread count
}}
/>
<Tab.Screen
name="Games"
component={GamesScreen}
options={{
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="🎮" />,
}}
/>
<Tab.Screen
name="Friends"
component={FriendsScreen}
options={{
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="👥" />,
}}
/>
<Tab.Screen
name="Profile"
component={ProfileScreen}
options={{
tabBarIcon: ({ focused }) => <TabIcon focused={focused} emoji="👤" />,
}}
/>
</Tab.Navigator>
</NavigationContainer>
);
}
const styles = StyleSheet.create({
tabBar: {
backgroundColor: theme.colors.background,
borderTopWidth: 1,
borderTopColor: theme.colors.gray900,
height: theme.layout.tabBarHeight,
paddingBottom: 8,
paddingTop: 8,
},
tabLabel: {
fontSize: theme.typography.fontSize.xs,
fontWeight: theme.typography.fontWeight.medium,
},
tabIcon: {
width: 40,
height: 40,
borderRadius: theme.borderRadius.md,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'transparent',
},
tabIconActive: {
backgroundColor: theme.colors.backgroundTertiary,
...theme.shadows.glow,
},
tabEmoji: {
fontSize: 24,
},
});