# fowce/fridge-recipes architecture

> Architecture diagram of the GitHub repository fowce/fridge-recipes, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fowce/fridge-recipes
- Repository: https://github.com/fowce/fridge-recipes

## Overview

«Холодильник рецептов» — приложение для ведения общего списка продуктов и подбора блюд по их наличию. Пользователь добавляет или изменяет продукты на экране холодильника; экран рецептов загружает категории, рецепты и холодильник, затем фильтрует блюда по категории, названию и доступности. Страница рецепта показывает ингредиенты, шаги, видео и недостающие продукты. Данные читаются и изменяются через сервисы Supabase; доступность вычисляется отдельно с учётом количества и единиц. FridgePage и часть компонентов не были представлены в исходниках, поэтому их внутренние связи показаны только там, где это следует из описанных возможностей и API компонентов.

Main entry points: [`src/pages/RecipesPage.tsx`](https://github.com/fowce/fridge-recipes/blob/main/src/pages/RecipesPage.tsx) (Список рецептов), [`src/pages/FridgePage.tsx`](https://github.com/fowce/fridge-recipes/blob/main/src/pages/FridgePage.tsx) (Экран холодильника), [`src/pages/RecipeDetailsPage.tsx`](https://github.com/fowce/fridge-recipes/blob/main/src/pages/RecipeDetailsPage.tsx) (Детали рецепта), [`src/App.tsx`](https://github.com/fowce/fridge-recipes/blob/main/src/App.tsx) (Маршрутизация)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Приложение"]
  node_app["Маршрутизация<br/>[App.tsx]"]
end

subgraph group_fridge["Холодильник"]
  node_fridge_page["Экран холодильника<br/>[FridgePage.tsx]"]
  node_product_form["Форма продукта<br/>[ProductForm.tsx]"]
  node_product_list["Список продуктов<br/>[ProductList.tsx]"]
end

subgraph group_recipes["Рецепты"]
  node_recipes_page["Список рецептов<br/>[RecipesPage.tsx]"]
  node_category_filter["Фильтр категорий<br/>[CategoryFilter.tsx]"]
  node_recipe_card["Карточка рецепта<br/>[RecipeCard.tsx]"]
  node_recipe_details["Детали рецепта"]
end

subgraph group_data["Данные и логика"]
  node_product_service["Сервис продуктов<br/>[products.ts]"]
  node_recipe_service["Сервис рецептов<br/>[recipes.ts]"]
  node_availability["Проверка наличия"]
  node_supabase_client["Клиент Supabase<br/>[supabase.ts]"]
  node_db_types["Типы данных<br/>[database.ts]"]
  node_database[("Схема PostgreSQL")]
end

node_user(("Пользователь"))
node_supabase[("Supabase")]

node_user -->|"открывает"| node_app
node_app -->|"маршрутизирует"| node_fridge_page
node_app -->|"маршрутизирует"| node_recipes_page
node_app -->|"маршрутизирует"| node_recipe_details
node_fridge_page -->|"показывает"| node_product_form
node_fridge_page -->|"показывает"| node_product_list
node_product_form -->|"передаёт ввод"| node_fridge_page
node_product_list -->|"передаёт изменения"| node_fridge_page
node_fridge_page -->|"управляет продуктами"| node_product_service
node_recipes_page -->|"загружает рецепты"| node_recipe_service
node_recipes_page -->|"загружает холодильник"| node_product_service
node_recipes_page -->|"показывает"| node_category_filter
node_recipes_page -->|"показывает"| node_recipe_card
node_recipes_page -->|"проверяет наличие"| node_availability
node_recipes_page -->|"открывает рецепт"| node_recipe_details
node_recipe_details -->|"загружает рецепт"| node_recipe_service
node_recipe_details -->|"загружает холодильник"| node_product_service
node_recipe_details -->|"проверяет наличие"| node_availability
node_product_service -->|"запрашивает данные"| node_supabase_client
node_recipe_service -->|"запрашивает данные"| node_supabase_client
node_supabase_client -->|"выполняет запросы"| node_supabase
node_supabase -->|"читает и изменяет"| node_database

click node_app "https://github.com/fowce/fridge-recipes/blob/main/src/App.tsx"
click node_fridge_page "https://github.com/fowce/fridge-recipes/blob/main/src/pages/FridgePage.tsx"
click node_product_form "https://github.com/fowce/fridge-recipes/blob/main/src/components/ProductForm.tsx"
click node_product_list "https://github.com/fowce/fridge-recipes/blob/main/src/components/ProductList.tsx"
click node_recipes_page "https://github.com/fowce/fridge-recipes/blob/main/src/pages/RecipesPage.tsx"
click node_category_filter "https://github.com/fowce/fridge-recipes/blob/main/src/components/CategoryFilter.tsx"
click node_recipe_card "https://github.com/fowce/fridge-recipes/blob/main/src/components/RecipeCard.tsx"
click node_recipe_details "https://github.com/fowce/fridge-recipes/blob/main/src/pages/RecipeDetailsPage.tsx"
click node_product_service "https://github.com/fowce/fridge-recipes/blob/main/src/services/products.ts"
click node_recipe_service "https://github.com/fowce/fridge-recipes/blob/main/src/services/recipes.ts"
click node_availability "https://github.com/fowce/fridge-recipes/blob/main/src/utils/recipeAvailability.ts"
click node_supabase_client "https://github.com/fowce/fridge-recipes/blob/main/src/lib/supabase.ts"
click node_db_types "https://github.com/fowce/fridge-recipes/blob/main/src/types/database.ts"
click node_database "https://github.com/fowce/fridge-recipes/blob/main/supabase/migrations/20260701180000_initial_schema.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app toneBlue
class node_fridge_page,node_product_form,node_product_list,node_supabase toneAmber
class node_recipes_page,node_category_filter,node_recipe_card,node_recipe_details toneMint
class node_product_service,node_recipe_service,node_availability,node_supabase_client,node_db_types,node_database toneRose
class node_user toneIndigo
```

## Components

### Приложение

- [Маршрутизация](https://github.com/fowce/fridge-recipes/blob/main/src/App.tsx): `src/App.tsx`

### Холодильник

- [Экран холодильника](https://github.com/fowce/fridge-recipes/blob/main/src/pages/FridgePage.tsx): `src/pages/FridgePage.tsx`
- [Форма продукта](https://github.com/fowce/fridge-recipes/blob/main/src/components/ProductForm.tsx): `src/components/ProductForm.tsx`
- [Список продуктов](https://github.com/fowce/fridge-recipes/blob/main/src/components/ProductList.tsx): `src/components/ProductList.tsx`

### Рецепты

- [Список рецептов](https://github.com/fowce/fridge-recipes/blob/main/src/pages/RecipesPage.tsx): `src/pages/RecipesPage.tsx`
- [Фильтр категорий](https://github.com/fowce/fridge-recipes/blob/main/src/components/CategoryFilter.tsx): `src/components/CategoryFilter.tsx`
- [Карточка рецепта](https://github.com/fowce/fridge-recipes/blob/main/src/components/RecipeCard.tsx): `src/components/RecipeCard.tsx`
- [Детали рецепта](https://github.com/fowce/fridge-recipes/blob/main/src/pages/RecipeDetailsPage.tsx): `src/pages/RecipeDetailsPage.tsx`

### Данные и логика

- [Сервис продуктов](https://github.com/fowce/fridge-recipes/blob/main/src/services/products.ts): `src/services/products.ts`
- [Сервис рецептов](https://github.com/fowce/fridge-recipes/blob/main/src/services/recipes.ts): `src/services/recipes.ts`
- [Проверка наличия](https://github.com/fowce/fridge-recipes/blob/main/src/utils/recipeAvailability.ts): `src/utils/recipeAvailability.ts`
- [Клиент Supabase](https://github.com/fowce/fridge-recipes/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`
- [Типы данных](https://github.com/fowce/fridge-recipes/blob/main/src/types/database.ts): `src/types/database.ts`
- [Схема PostgreSQL](https://github.com/fowce/fridge-recipes/blob/main/supabase/migrations/20260701180000_initial_schema.sql): `supabase/migrations/20260701180000_initial_schema.sql`

### Other components

- **Пользователь**
- **Supabase**

## Connections

- Пользователь → Маршрутизация: открывает
- Маршрутизация → Экран холодильника: маршрутизирует
- Маршрутизация → Список рецептов: маршрутизирует
- Маршрутизация → Детали рецепта: маршрутизирует
- Экран холодильника → Форма продукта: показывает
- Экран холодильника → Список продуктов: показывает
- Форма продукта → Экран холодильника: передаёт ввод
- Список продуктов → Экран холодильника: передаёт изменения
- Экран холодильника → Сервис продуктов: управляет продуктами
- Список рецептов → Сервис рецептов: загружает рецепты
- Список рецептов → Сервис продуктов: загружает холодильник
- Список рецептов → Фильтр категорий: показывает
- Список рецептов → Карточка рецепта: показывает
- Список рецептов → Проверка наличия: проверяет наличие
- Список рецептов → Детали рецепта: открывает рецепт
- Детали рецепта → Сервис рецептов: загружает рецепт
- Детали рецепта → Сервис продуктов: загружает холодильник
- Детали рецепта → Проверка наличия: проверяет наличие
- Сервис продуктов → Клиент Supabase: запрашивает данные
- Сервис рецептов → Клиент Supabase: запрашивает данные
- Клиент Supabase → Supabase: выполняет запросы
- Supabase → Схема PostgreSQL: читает и изменяет
