mirror of
https://github.com/Sosokker/chefhai.git
synced 2025-12-19 05:54:08 +01:00
create home page
This commit is contained in:
parent
d074115a71
commit
23cf0f7997
10
app/(tabs)/forum.tsx
Normal file
10
app/(tabs)/forum.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { View, Text } from 'react-native';
|
||||||
|
|
||||||
|
export default function ForumScreen() {
|
||||||
|
return (
|
||||||
|
<View className="flex-1 items-center justify-center bg-white">
|
||||||
|
<Text className="text-2xl font-bold">Forum Screen</Text>
|
||||||
|
<Text className="mt-2 text-gray-500">Discussions and community posts will appear here</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
10
app/(tabs)/profile.tsx
Normal file
10
app/(tabs)/profile.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { View, Text } from 'react-native';
|
||||||
|
|
||||||
|
export default function ProfileScreen() {
|
||||||
|
return (
|
||||||
|
<View className="flex-1 items-center justify-center bg-white">
|
||||||
|
<Text className="text-2xl font-bold">Profile Screen</Text>
|
||||||
|
<Text className="mt-2 text-gray-500">Your profile information will appear here</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
10
app/(tabs)/recipes.tsx
Normal file
10
app/(tabs)/recipes.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { View, Text } from 'react-native';
|
||||||
|
|
||||||
|
export default function RecipesScreen() {
|
||||||
|
return (
|
||||||
|
<View className="flex-1 items-center justify-center bg-white">
|
||||||
|
<Text className="text-2xl font-bold">Recipes Screen</Text>
|
||||||
|
<Text className="mt-2 text-gray-500">Your recipes will appear here</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
140
app/recipe-detail.tsx
Normal file
140
app/recipe-detail.tsx
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { View, Text, Image, TouchableOpacity, ScrollView, SafeAreaView, StatusBar } from 'react-native';
|
||||||
|
import { Feather, FontAwesome5 } from '@expo/vector-icons';
|
||||||
|
import { useLocalSearchParams, router } from 'expo-router';
|
||||||
|
|
||||||
|
export default function RecipeDetailScreen() {
|
||||||
|
const { title, image } = useLocalSearchParams();
|
||||||
|
|
||||||
|
const recipeTitle = title || "Pad Kra Pao Moo Sab with Eggs";
|
||||||
|
const recipeImage = typeof image === 'string' ? image : "/placeholder.svg?height=400&width=400&query=thai basil stir fry with egg and rice";
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SafeAreaView className="flex-1 bg-white">
|
||||||
|
<StatusBar barStyle="dark-content" />
|
||||||
|
|
||||||
|
<ScrollView className="flex-1" showsVerticalScrollIndicator={false}>
|
||||||
|
{/* Header with back and share buttons */}
|
||||||
|
<View className="flex-row justify-between items-center px-4 pt-4 absolute z-10 w-full">
|
||||||
|
<TouchableOpacity
|
||||||
|
className="bg-[#ffd60a] p-3 rounded-lg"
|
||||||
|
onPress={() => router.back()}
|
||||||
|
>
|
||||||
|
<Feather name="arrow-left" size={24} color="#bb0718" />
|
||||||
|
</TouchableOpacity>
|
||||||
|
|
||||||
|
<TouchableOpacity className="bg-white p-3 rounded-lg">
|
||||||
|
<Feather name="send" size={24} color="#ffd60a" />
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Recipe Image */}
|
||||||
|
<View className="items-center justify-center pt-16 pb-6">
|
||||||
|
<Image
|
||||||
|
source={{ uri: recipeImage }}
|
||||||
|
className="w-72 h-72 rounded-full"
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Recipe Title and Description */}
|
||||||
|
<View className="px-6">
|
||||||
|
<Text className="text-4xl font-bold">{recipeTitle}</Text>
|
||||||
|
<Text className="text-gray-600 mt-2 text-lg">
|
||||||
|
Pad kra pao, also written as pad gaprao, is a popular Thai stir fry of ground meat and holy basil.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
{/* Recipe Info */}
|
||||||
|
<View className="flex-row justify-between mt-8">
|
||||||
|
<View>
|
||||||
|
<Text className="text-2xl font-bold">Skills</Text>
|
||||||
|
<Text className="text-gray-600 mt-1">Easy</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View>
|
||||||
|
<Text className="text-2xl font-bold">Time</Text>
|
||||||
|
<Text className="text-gray-600 mt-1">30 Mins</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View>
|
||||||
|
<Text className="text-2xl font-bold">Ingredients</Text>
|
||||||
|
<Text className="text-gray-600 mt-1">10+</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View>
|
||||||
|
<Text className="text-2xl font-bold">Calories</Text>
|
||||||
|
<Text className="text-gray-600 mt-1">300 kCal</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Ingredients */}
|
||||||
|
<Text className="text-3xl font-bold mt-12">Ingredients</Text>
|
||||||
|
<ScrollView
|
||||||
|
horizontal
|
||||||
|
showsHorizontalScrollIndicator={false}
|
||||||
|
className="mt-6 mb-4"
|
||||||
|
contentContainerStyle={{ paddingLeft: 4, paddingRight: 20 }}
|
||||||
|
>
|
||||||
|
<View className="flex-row space-x-6">
|
||||||
|
<View className="w-24 h-24 bg-gray-300 rounded-lg" />
|
||||||
|
<View className="w-24 h-24 bg-gray-300 rounded-lg" />
|
||||||
|
<View className="w-24 h-24 bg-gray-300 rounded-lg" />
|
||||||
|
<View className="w-24 h-24 bg-gray-300 rounded-lg" />
|
||||||
|
<View className="w-24 h-24 bg-gray-300 rounded-lg" />
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
{/* Nutrition Info */}
|
||||||
|
<View className="bg-[#ffd60a] rounded-lg p-6 mt-10">
|
||||||
|
<View className="flex-row justify-between">
|
||||||
|
<View className="items-center">
|
||||||
|
<View className="w-16 h-16 rounded-full border-4 border-[#397e36] items-center justify-center">
|
||||||
|
<Text className="text-xl font-bold">0</Text>
|
||||||
|
<Text className="text-xs">/32g</Text>
|
||||||
|
</View>
|
||||||
|
<Text className="mt-2 font-semibold">Fat</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="items-center">
|
||||||
|
<View className="w-16 h-16 rounded-full border-4 border-[#397e36] items-center justify-center">
|
||||||
|
<Text className="text-xl font-bold">0</Text>
|
||||||
|
<Text className="text-xs">/32g</Text>
|
||||||
|
</View>
|
||||||
|
<Text className="mt-2 font-semibold">Fiber</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="items-center">
|
||||||
|
<View className="w-16 h-16 rounded-full border-4 border-[#a07d1a] items-center justify-center">
|
||||||
|
<Text className="text-xl font-bold">0</Text>
|
||||||
|
<Text className="text-xs">/32g</Text>
|
||||||
|
</View>
|
||||||
|
<Text className="mt-2 font-semibold">Protein</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="items-center">
|
||||||
|
<View className="w-16 h-16 rounded-full border-4 border-[#c87a20] items-center justify-center">
|
||||||
|
<Text className="text-xl font-bold">0</Text>
|
||||||
|
<Text className="text-xs">/32g</Text>
|
||||||
|
</View>
|
||||||
|
<Text className="mt-2 font-semibold">Carbs</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Bottom Spacing */}
|
||||||
|
<View className="h-28" />
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
{/* Cook Button */}
|
||||||
|
<View className="absolute bottom-0 left-0 right-0">
|
||||||
|
<View className="bg-[#bb0718] py-4 items-center">
|
||||||
|
<View className="flex-row items-center">
|
||||||
|
<Text className="text-[#ffd60a] text-2xl font-bold mr-2">Let's Cook!</Text>
|
||||||
|
<FontAwesome5 name="utensils" size={24} color="#ffd60a" />
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<View className="bg-[#ffd60a] h-16" style={{ borderTopLeftRadius: 0, borderTopRightRadius: 0, borderBottomLeftRadius: 50, borderBottomRightRadius: 50 }} />
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
babel.config.js
Normal file
9
babel.config.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
module.exports = function (api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: [
|
||||||
|
["babel-preset-expo", { jsxImportSource: "nativewind" }],
|
||||||
|
"nativewind/babel",
|
||||||
|
],
|
||||||
|
};
|
||||||
|
};
|
||||||
3
global.css
Normal file
3
global.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
6
metro.config.js
Normal file
6
metro.config.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
const { getDefaultConfig } = require("expo/metro-config");
|
||||||
|
const { withNativeWind } = require('nativewind/metro');
|
||||||
|
|
||||||
|
const config = getDefaultConfig(__dirname)
|
||||||
|
|
||||||
|
module.exports = withNativeWind(config, { input: './global.css' })
|
||||||
1
nativewind-env.d.ts
vendored
Normal file
1
nativewind-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/// <reference types="nativewind/types" />
|
||||||
16
tailwind.config.js
Normal file
16
tailwind.config.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
module.exports = {
|
||||||
|
// NOTE: Update this to include the paths to all of your component files.
|
||||||
|
content: ["./app/**/*.{js,jsx,ts,tsx}"],
|
||||||
|
presets: [require("nativewind/preset")],
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
primary: "#ffd60a",
|
||||||
|
secondary: "#f9be25",
|
||||||
|
accent: "#bb0718",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user