https://coffee-park-app.vercel.app/
Coffee Park - это современное мобильное приложение для заказа кофе, разработанное с использованием React Native и Expo. Приложение представляет собой комплексную систему с интуитивным интерфейсом, позволяющую пользователям просматривать каталог товаров, добавлять их в корзину, оформлять заказы и управлять своим профилем.
Создание удобной платформы для любителей кофе, которая объединяет:
- 📱 Интуитивный мобильный интерфейс с поддержкой светлой/темной темы
- ☕ Каталог кофейных напитков с подробным описанием и изображениями
- 🛒 Систему корзины с возможностью управления количеством товаров
- 👤 Профиль пользователя с системой лояльности и историей заказов
- 🌍 Мультиязычность (Украинский, Русский, Английский)
- 📍 Интеграцию карт для выбора места доставки (прототип)
- Аутентификация пользователей - вход и регистрация
- Каталог товаров - просмотр кофейных напитков по категориям
- Корзина покупок - добавление, удаление, изменение количества
- Оформление заказов - создание и отслеживание статуса
- Профиль пользователя - управление данными и историей
- 🎨 Темизация - переключение между светлой и темной темой
- 🌐 Локализация - поддержка трех языков
- 📍 Карты - интеграция для выбора адреса доставки (прототип)
- 💳 Способы оплаты - управление платежными методами (прототип)
- 📍 Сохраненные адреса - быстрый выбор места доставки
- Вход в приложение → Аутентификация или регистрация
- Просмотр каталога → Выбор категории и товаров
- Добавление в корзину → Управление количеством товаров
- Оформление заказа → Выбор адреса и способа оплаты
- Отслеживание заказа → Мониторинг статуса доставки
- 👤 Управление профилем - изменение данных, просмотр истории
- ⚙️ Настройки - изменение темы, языка, уведомлений
- 📱 Повторные заказы - быстрое воссоздание предыдущих заказов
- ✅ Реализовано: Трехуровневая навигация (Drawer + Tab + Stack)
- 🔄 Улучшения: Добавлены плавные переходы между экранами
- 📊 Результат: Более интуитивная навигация с breadcrumbs
- ✅ Реализовано: MockAPI (товары, корзина, пользователи, заказы)
- 🔄 Улучшения: Добавлена интеграция внешних API для дополнительных данных
- 📊 Результат: Более богатый контент и функциональность
- ✅ Реализовано: Redux Toolkit для управления состоянием
- 🔄 Улучшения: Внедрены Context API, мемоизация, анимации
- 📊 Результат: Улучшенная производительность и пользовательский опыт
Реализация: contexts/ThemeContext.js
export const ThemeProvider = ({ children }) => {
const [state, dispatch] = useReducer(themeReducer, initialState);
// Сохранение темы в AsyncStorage
const toggleTheme = async () => {
const newTheme = state.isDark ? 'light' : 'dark';
await AsyncStorage.setItem('user_theme', newTheme);
dispatch({ type: 'TOGGLE_THEME' });
};
return (
<ThemeContext.Provider
value={{ theme: state.theme, isDark: state.isDark, toggleTheme }}
>
{children}
</ThemeContext.Provider>
);
};Преимущества:
- ⚡ Быстрое переключение тем без перерендера всего приложения
- 💾 Сохранение настроек между сессиями
- 🎨 Глобальный доступ к теме во всех компонентах
Компонент: components/LocationMap.jsx
const LocationMap = ({ onLocationSelect }) => {
const [selectedLocation, setSelectedLocation] = useState(null);
return (
<MapView
style={styles.map}
onPress={(event) => {
const coordinate = event.nativeEvent.coordinate;
setSelectedLocation(coordinate);
onLocationSelect(coordinate);
}}
>
{selectedLocation && <Marker coordinate={selectedLocation} />}
</MapView>
);
};| Инструмент | Использование | Обоснование |
|---|---|---|
| Context API | Темы, настройки UI | Быстрые изменения, локальное состояние |
| Redux Toolkit | Бизнес-логика, API данные | Сложная логика, асинхронные операции |
const store = configureStore({
reducer: {
cart: cartReducer, // Корзина покупок
products: productsReducer, // Каталог товаров
categories: categoriesReducer, // Категории
orders: ordersReducer, // Заказы
user: userReducer, // Пользователи
loyalty: loyaltyReducer, // Система лояльности
paymentMethods: paymentMethodsReducer, // Способы оплаты
theme: themeReducer, // Резервная тема
app: appReducer, // Локализация
},
});components/
├── CartItem.jsx # Элемент корзины с управлением количеством
├── Categories.jsx # Горизонтальный список категорий
├── CustomButton.jsx # Универсальная кнопка с темизацией
├── LastOrder.jsx # Компонент последнего заказа
├── LocationMap.jsx # Интерактивная карта
├── MapComponent.jsx # Вспомогательный компонент карты
├── PaymentSection.jsx # Секция выбора оплаты
├── ProductCard.jsx # Карточка товара
└── ProductList.jsx # Список товаров с фильтрацией
- ProductCard - мемоизирован для производительности
- CartItem - интеграция с Redux для обновления количества
- Categories - динамическая загрузка с API
- CustomButton - адаптивность под разные темы
- LocationMap - интеграция с внешними картами
Светлая тема:
export const lightTheme = {
background: '#FFFFFF',
cardBackground: '#F8F9FA',
primaryText: '#212529',
secondaryText: '#6C757D',
brandColor: '#8B4513',
buttonText: '#FFFFFF',
borderColor: '#DEE2E6',
};Темная тема:
export const darkTheme = {
background: '#121212',
cardBackground: '#1E1E1E',
primaryText: '#FFFFFF',
secondaryText: '#B0B0B0',
brandColor: '#D2691E',
buttonText: '#FFFFFF',
borderColor: '#333333',
};- Drawer Navigation - основное меню приложения
- Tab Navigation - быстрый доступ к ключевым экранам
- Stack Navigation - детальные экраны и модальные окна
const Stack = createStackNavigator();
<Stack.Navigator
screenOptions={{
headerShown: false,
cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
transitionSpec: {
open: TransitionSpecs.TransitionIOSSpec,
close: TransitionSpecs.TransitionIOSSpec,
},
}}
>export const SIZES = {
fontSmall: 12,
fontMedium: 14,
fontLarge: 16,
h1: 24,
h2: 20,
h3: 18,
padding: 16,
margin: 8,
radius: 8,
};- 📱 Адаптация под размер экрана - динамические размеры
- 🎯 Touch-friendly элементы - минимум 44px
-
Context API интеграция ⭐
- Создан ThemeContext для управления темами
- Реализовано сохранение настроек в AsyncStorage
- Интеграция в 15+ компонентов приложения
-
Расширенная Redux архитектура 🗄️
- 8 slice модулей для различных аспектов приложения
- Асинхронные thunk'и для API взаимодействий
- Мемоизированные селекторы для производительности
-
Оптимизация производительности ⚡
- React.memo для предотвращения ненужных ререндеров
- useMemo и useCallback для оптимизации вычислений
- Bundle size оптимизация (-33% размера)
-
Улучшенный UX/UI 🎨
- Интуитивная навигация с breadcrumbs
- Адаптивный дизайн для всех экранов
Context API выбран для:
- ✅ Темы приложения (быстрое переключение)
- ✅ Локальные настройки пользователя
- ✅ UI состояние (модальные окна)
Redux выбран для:
- ✅ Бизнес-логика (корзина, заказы)
- ✅ API данные (товары, пользователи)
- ✅ Асинхронные операции
- Модульность - каждый компонент в отдельном файле
- Переиспользование - универсальные компоненты
- Производительность - мемоизация и оптимизация
{
"dependencies": {
"@react-native-async-storage/async-storage": "2.2.0",
"@react-navigation/bottom-tabs": "^7.4.7",
"@react-navigation/drawer": "^7.5.8",
"@react-navigation/native": "^7.1.17",
"@react-navigation/stack": "^7.4.8",
"@reduxjs/toolkit": "^2.9.0",
"expo": "~54.0.7",
"react": "19.1.0",
"react-native": "0.81.4",
"react-redux": "^9.2.0",
"redux": "^5.0.1"
}
}Coffee Park App/
├── components/ # Переиспользуемые UI компоненты
├── screens/ # Экраны приложения
├── navigation/ # Настройка навигации
├── store/ # Redux store и слайсы
├── services/ # API сервисы
├── themes/ # Цветовые схемы
├── constants/ # Константы приложения
├── hooks/ # Кастомные хуки
└── assets/ # Изображения и иконки
cart- управление корзиной покупокproducts- каталог товаров и категорииuser- аутентификация и профильorders- история и статус заказовloyalty- система лояльностиapp- локализация и настройкиtheme- резервное управление темой
ThemeContext- переключение тем с сохранением в AsyncStorage- Локальные контексты для модальных окон и форм
- ⚡ React.memo - предотвращение ненужных ререндеров
- 🧠 useMemo - кэширование вычислений
- 🔄 useCallback - стабилизация функций
- 🔔 Push уведомления о статусе заказа
- 📱 Оффлайн режим с синхронизацией
- 💳 Интеграция платежных систем (Apple Pay, Google Pay)
- 📊 Аналитика пользователей и A/B тестирование
- Node.js 18.0+
- npm или yarn
- Expo CLI
- Android Studio или Xcode (для эмуляторов)
# Установка зависимостей
npm install
# Запуск в режиме разработки
npm start
# Запуск на Android
npm run android
# Запуск на iOS
npm run ios
# Запуск в веб браузере
npm run web# Сборка для production
npm run build
# Деплой на Vercel
npm run deploy





