Розробка мобільного додатку для рецептів (кулінарних)
Рецептне додаток — обманчиво проста задача. Список рецептів, детальний екран, список покупок. Але користувач відкриває додаток на кухні, руки в муці, телефон на відстані витягнутої руки — й екран гаснет на 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 тижнів.







