Разработка мобильного приложения для рецептов (кулинарных)
Рецептное приложение — обманчиво простая задача. Список рецептов, детальный экран, список покупок. Но пользователь открывает приложение на кухне, руки в муке, телефон на расстоянии вытянутой руки — и экран гаснет на 30-й секунде видео с инструкцией. Вот с этого и начнём.
Keep Screen Awake в режиме готовки
Когда пользователь на экране рецепта переходит в «режим готовки», экран не должен гаснет. iOS: UIApplication.shared.isIdleTimerDisabled = true при входе на экран, false при выходе. Android: window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) в ViewModel через DisposableEffect в Compose или в Fragment. Без этого — самая частая жалоба в отзывах.
Структура данных рецепта
Рецепт — не просто текст. Ингредиенты должны масштабироваться под количество порций, шаги — содержать таймеры, изображения и встроенное видео отдельных техник.
Модель ингредиента: quantity: Fraction, unit: MeasurementUnit, name: String, optional: Bool. Тип Fraction важен — «1 и 1/2 стакана» при умножении на 3 должно давать «4 и 1/2», не «4.5 стакана». Реализуем как numerator/denominator с упрощением через НОД.
Единицы измерения: поддерживаем конвертацию cups/tablespoons/teaspoons → ml → g (через Measurement<UnitVolume> на iOS, UnitConverter на Android). Пользователь выбирает систему (метрическая/имперская) в настройках — все рецепты пересчитываются автоматически.
Поиск и фильтрация
Поиск по названию — минимум. Полезный поиск: по ингредиентам («что приготовить из курицы и лимона»), по тегам (вегетарианское, без глютена), по времени готовки.
На iOS — CoreData с NSPredicate для сложных запросов. Полнотекстовый поиск через SQLite FTS5 если объём рецептов >500. На Android — Room с @Query и FTS4/FTS5 таблицей (@Fts4 entity). Flutter: sqflite + FTS или isar с встроенным поиском.
Фильтры комбинируются (И): время ≤ 30 мин + вегетарианское + есть в наличии. «Есть в наличии» — пользователь указывает, что лежит в холодильнике; приложение ищет рецепты, где все ингредиенты помечены как available.
Шаговые инструкции и встроенные таймеры
Каждый шаг рецепта может содержать таймер: «варить 8 минут». Парсим числа и единицы времени из текста шага при импорте. Тап на таймер — запускаем UNUserNotificationCenter уведомление через N секунд + локальный countdown.
Несколько таймеров одновременно: пользователь готовит три блюда. Хранение активных таймеров в UserDefaults/SharedPreferences с точным временем окончания — при восстановлении из фона пересчитываем оставшееся время.
Список покупок
Добавление ингредиентов из рецепта — одним тапом. Объединение дублей: «200г муки» из рецепта 1 + «150г муки» из рецепта 2 = «350г муки». Агрегация по единицам с конвертацией.
Группировка по категориям (молочное, овощи, мясо) — ручная или автоматическая через простой словарь. Синхронизация между устройствами: iCloud NSUbiquitousKeyValueStore (iOS) или Firebase Realtime Database.
Сроки
Приложение с каталогом, поиском, пошаговым режимом, таймерами и списком покупок — 3-5 недель. С пользовательскими рецептами, социальными функциями и синхронизацией — 6-8 недель.







