scry/app/(tabs)/_layout.tsx
Chris Kruining 83ab4df537
Migrate from .NET MAUI to Expo + Convex
Complete rewrite of Scry using TypeScript stack:

- Expo/React Native with Expo Router (file-based routing)
- Convex backend (serverless functions + real-time database)
- Adaptive camera system (expo-camera in Expo Go, Vision Camera in production)
- React Native Skia + fast-opencv for image processing
- GDPR-compliant auth setup with Zitadel OIDC (pending configuration)

Key features:
- Card recognition pipeline ported to TypeScript
- Perceptual hashing (192-bit color pHash)
- CLAHE preprocessing for lighting normalization
- Local SQLite cache with Convex sync
- Collection management with offline support

Removes all .NET/MAUI code (src/, test/, tools/).

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
2026-02-09 16:16:34 +01:00

58 lines
1.6 KiB
TypeScript

import React from "react";
import FontAwesome from "@expo/vector-icons/FontAwesome";
import { Tabs } from "expo-router";
import { useColorScheme } from "@/components/useColorScheme";
import Colors from "@/constants/Colors";
function TabBarIcon(props: {
name: React.ComponentProps<typeof FontAwesome>["name"];
color: string;
}) {
return <FontAwesome size={24} style={{ marginBottom: -3 }} {...props} />;
}
export default function TabLayout() {
const colorScheme = useColorScheme();
return (
<Tabs
screenOptions={{
tabBarActiveTintColor: Colors[colorScheme ?? "light"].tint,
tabBarInactiveTintColor: "#888",
tabBarStyle: {
backgroundColor: colorScheme === "dark" ? "#1a1a1a" : "#fff",
borderTopColor: colorScheme === "dark" ? "#333" : "#eee",
},
headerStyle: {
backgroundColor: colorScheme === "dark" ? "#1a1a1a" : "#fff",
},
headerTintColor: colorScheme === "dark" ? "#fff" : "#000",
}}
>
<Tabs.Screen
name="index"
options={{
title: "Collection",
tabBarIcon: ({ color }) => (
<TabBarIcon name="th-large" color={color} />
),
}}
/>
<Tabs.Screen
name="scan"
options={{
title: "Scan",
headerShown: false,
tabBarIcon: ({ color }) => <TabBarIcon name="camera" color={color} />,
}}
/>
<Tabs.Screen
name="settings"
options={{
title: "Settings",
tabBarIcon: ({ color }) => <TabBarIcon name="cog" color={color} />,
}}
/>
</Tabs>
);
}