managarten/nutriphi/apps/mobile/app/(tabs)/_layout.tsx
Till-JS 6537863696 feat(nutriphi): migrate from Supabase to PostgreSQL + Hetzner S3
- Add nutriphi-database package with Drizzle ORM
  - meals and nutrition_goals schemas
  - PostgreSQL 16 Docker setup
  - Drizzle Kit configuration

- Migrate backend from Supabase to Drizzle
  - Add DatabaseModule with connection pooling
  - Add StorageService for Hetzner Object Storage (S3-compatible)
  - Update MealsService with Drizzle queries
  - Add /api/meals/upload endpoint for image upload + analysis

- Update web app to use backend for uploads
  - Remove Supabase Storage direct upload
  - Update uploadService to send images to backend
  - Remove Supabase dependencies from package.json
  - Simplify hooks.server.ts

- Add Coolify deployment configuration
  - Dockerfile for production build
  - docker-compose.coolify.yml

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 17:52:14 +01:00

45 lines
1.3 KiB
TypeScript

import { Tabs } from 'expo-router';
import { TabBarIcon } from '../../components/TabBarIcon';
import { CameraModal } from '../../components/camera/CameraModal';
import { useAppStore } from '../../store/AppStore';
import { useTheme } from '../../hooks/useTheme';
export default function TabLayout() {
const { showCameraModal, cameraMode } = useAppStore();
const { isDark } = useTheme();
return (
<>
<Tabs
screenOptions={{
tabBarActiveTintColor: '#6366f1',
tabBarStyle: {
backgroundColor: isDark ? '#1f2937' : 'white',
borderTopWidth: 1,
borderTopColor: isDark ? '#374151' : '#e5e7eb',
},
}}>
<Tabs.Screen
name="index"
options={{
title: 'Meals',
tabBarIcon: ({ color }) => (
<TabBarIcon sfSymbol="fork.knife" fallbackIcon="cutlery" color={color} />
),
}}
/>
<Tabs.Screen
name="two"
options={{
title: 'Stats',
tabBarIcon: ({ color }) => (
<TabBarIcon sfSymbol="chart.bar" fallbackIcon="bar-chart" color={color} />
),
}}
/>
</Tabs>
{showCameraModal && <CameraModal mode={cameraMode || 'camera'} />}
</>
);
}