docs: update README, env example, and design docs
- backend/.env.example: add GEMINI_API_KEY and PEXELS_API_KEY placeholders - backend/Makefile: add test-integration to PHONY targets - backend/README.md: document external API keys, import/translate commands - docs/Design.md, docs/Tech.md: reflect Iteration 1 implementation and future plans Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
119
docs/Design.md
119
docs/Design.md
@@ -953,98 +953,93 @@
|
||||
|
||||
---
|
||||
|
||||
## 9. Каталог рецептов
|
||||
## 9. AI-рекомендации рецептов
|
||||
|
||||
Поиск и просмотр рецептов с фильтрацией и персональными рекомендациями.
|
||||
Персонализированные рецепты, сгенерированные Gemini на основе продуктов пользователя, цели и предпочтений. Статического каталога нет — каждый запрос даёт новую подборку.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ Рецепты │
|
||||
│ Рецепты [🔄] │
|
||||
├─────────────────────────────────────┤
|
||||
│ ┌─────────────────────────────────┐ │
|
||||
│ │ 🔍 Найти рецепт... │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [Из моих продуктов] [Фильтры ▾] │
|
||||
│ Для вас сегодня │
|
||||
│ На основе ваших продуктов │
|
||||
│ │
|
||||
│ Для вас │
|
||||
│ ┌──────────┐ ┌──────────┐ → │
|
||||
│ │ [фото] │ │ [фото] │ │
|
||||
│ │ Том Ям │ │ Пад Тай │ │
|
||||
│ │ ★4.8 │ │ ★4.6 │ │
|
||||
│ │ 320 ккал │ │ 450 ккал │ │
|
||||
│ │ Есть всё✓│ │ -2 прод. │ │
|
||||
│ └──────────┘ └──────────┘ │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ [фото блюда] │ │
|
||||
│ │ │ │
|
||||
│ │ Куриная грудка с овощами │ │
|
||||
│ │ ≈ 420 ккал · 35 мин · Лёгко│ │
|
||||
│ │ Б: 48г Ж: 12г У: 18г │ │
|
||||
│ │ [♡] │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ Готовили недавно │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ [фото блюда] │ │
|
||||
│ │ │ │
|
||||
│ │ Рисовый суп с яйцом │ │
|
||||
│ │ ≈ 310 ккал · 20 мин · Лёгко│ │
|
||||
│ │ Б: 18г Ж: 8г У: 42г │ │
|
||||
│ │ [♡] │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ [фото блюда] │ │
|
||||
│ │ │ │
|
||||
│ │ Морковный суп-пюре │ │
|
||||
│ │ ≈ 180 ккал · 25 мин · Лёгко│ │
|
||||
│ │ Б: 4г Ж: 7г У: 26г │ │
|
||||
│ │ [♡] │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ + ещё 2 рецепта │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ Сохранённые рецепты │
|
||||
│ ┌────────┐ ┌────────┐ ┌────────┐ │
|
||||
│ │[фото] │ │[фото] │ │[фото] │ │
|
||||
│ │Карбон. │ │Борщ │ │Цезарь │ │
|
||||
│ │♡ saved │ │♡ saved │ │♡ saved │ │
|
||||
│ └────────┘ └────────┘ └────────┘ │
|
||||
│ │
|
||||
│ Все рецепты │
|
||||
│ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ [фото] │ │ [фото] │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ Ризотто │ │ Борщ │ │
|
||||
│ │ ★4.5 │ │ ★4.9 │ │
|
||||
│ │ 480 ккал │ │ 350 ккал │ │
|
||||
│ │ 50 мин │ │ 90 мин │ │
|
||||
│ │ Сложная │ │ Средняя │ │
|
||||
│ └──────────┘ └──────────┘ │
|
||||
│ │
|
||||
│ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ ... │ │ ... │ │
|
||||
│ └──────────┘ └──────────┘ │
|
||||
│ [Все сохранённые →] │
|
||||
│ │
|
||||
├─────────────────────────────────────┤
|
||||
│ [Главная] [Продукты] [Меню] [Рецепты] [Профиль] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Панель фильтров (раскрывается по тапу «Фильтры ▾»)
|
||||
### Скелетон при загрузке (2–4 сек)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ Фильтры [Сброс]│
|
||||
│ Рецепты │
|
||||
├─────────────────────────────────────┤
|
||||
│ │
|
||||
│ Приём пищи │
|
||||
│ [Завтрак] [Обед] [Ужин] [Перекус] │
|
||||
│ Подбираем рецепты... │
|
||||
│ │
|
||||
│ Кухня │
|
||||
│ [Русская] [Азиатская] [Европейская] │
|
||||
│ [Средиземноморская] [Американская] │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░ │ │
|
||||
│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░ │ │
|
||||
│ │ ░░░░░░░░ ░░░░░ ░░░░░░░░ │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░ │ │
|
||||
│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░ │ │
|
||||
│ │ ░░░░░░░░ ░░░░░ ░░░░░░░░ │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ Сложность │
|
||||
│ [Простая] [Средняя] [Сложная] │
|
||||
│ │
|
||||
│ Время приготовления │
|
||||
│ [до 15 мин] [до 30 мин] [до 60 мин]│
|
||||
│ [более 60 мин] │
|
||||
│ │
|
||||
│ Калорийность (на порцию) │
|
||||
│ ○────────────● до 500 ккал │
|
||||
│ │
|
||||
│ Диета │
|
||||
│ [Вегетар.] [Безглютен.] [Низкокал.] │
|
||||
│ [Кето] [Без лактозы] │
|
||||
│ │
|
||||
│ ┌───────────────────────────────┐ │
|
||||
│ │ Показать 24 рецепта │ │
|
||||
│ └───────────────────────────────┘ │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Элементы и поведение
|
||||
|
||||
- **Строка поиска:** текстовый поиск по названию рецепта и ингредиентам.
|
||||
- **Кнопка «Из моих продуктов»:** toggle-фильтр. При включении показывает только рецепты, которые можно приготовить из имеющихся продуктов (полностью или частично). Рецепты сортируются по доле имеющихся ингредиентов. На каждой карточке — пометка: «Есть всё ✓» или «-N прод.».
|
||||
- **Кнопка «Фильтры»:** раскрывает панель фильтров (bottom sheet). Фильтры — chip-кнопки с множественным выбором. Слайдер для калорийности. Кнопка «Показать N рецептов» — применяет фильтры и закрывает панель. Кнопка «Сброс» — очищает все фильтры.
|
||||
- **Секция «Для вас»:** горизонтальная карусель. Персональные рекомендации на основе: предпочтений кухонь, истории оценок, имеющихся продуктов (особенно с истекающим сроком). Алгоритм: продукты с истекающим сроком > полное совпадение ингредиентов > предпочтения кухни > высокий рейтинг.
|
||||
- **Секция «Готовили недавно»:** горизонтальный ряд из последних 5 приготовленных рецептов. Быстрый доступ для повтора. Не показывается, если нет истории.
|
||||
- **Секция «Все рецепты»:** сетка 2 колонки. Каждая карточка — фото, название, рейтинг (звёзды), калорийность, время, сложность. Тап — переход в карточку рецепта.
|
||||
- **Бесконечный скролл:** подгрузка рецептов по мере прокрутки.
|
||||
- **Кнопка [🔄] «Обновить»:** принудительная перегенерация рекомендаций. Gemini + Pexels вызываются заново. Skeleton показывается на время генерации (2–4 сек).
|
||||
- **Карточка рецепта:** фото (Pexels), название, приблизительное КБЖУ (помечено «≈»), время приготовления, сложность. Тап → карточка рецепта.
|
||||
- **Кнопка [♡]:** сохранить рецепт. Рецепт записывается в `saved_recipes`. Иконка заполняется, haptic feedback.
|
||||
- **Секция «Сохранённые рецепты»:** горизонтальный ряд последних сохранённых. Кнопка «Все сохранённые →» переходит на экран всех сохранённых. Не показывается, если нет сохранённых.
|
||||
- **Автоматическая генерация:** при открытии вкладки (если с последней генерации прошло > 30 мин или изменились продукты).
|
||||
- **КБЖУ «≈»:** пиктограмма «~» перед числами; тап → tooltip «Приблизительно, рассчитано AI».
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user