# flaviecousin/cooking_book architecture

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

- Interactive diagram: https://gitdiagram.com/flaviecousin/cooking_book
- Repository: https://github.com/flaviecousin/cooking_book

## Overview

Cooking Book is an offline Android recipe notebook. The documented user flow is to browse and filter the recipe grid, open a recipe, and create or edit recipes through a shared form; recipes persist locally and can be exported as PNG or PDF for system sharing. The graph follows the README’s MVVM and navigation descriptions. Source excerpts were not provided, so details beyond the documented wiring and the paths visible in the tree are represented conservatively.

Main entry points: [`app/src/main/java/com/example/cookingbook/ui/data/Recette.kt`](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Recette.kt) (Recipe model), [`app/src/main/java/com/example/cookingbook/ui/components/ShareAction.kt`](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/components/ShareAction.kt) (Share action), [`app/src/main/java/com/example/cookingbook/ui/screens/RecipeGridScreen.kt`](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/RecipeGridScreen.kt) (Recipe grid), [`app/src/main/java/com/example/cookingbook/ui/models/RecetteViewModel.kt`](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/models/RecetteViewModel.kt) (Recipe ViewModel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_navigation["App navigation"]
  node_activity["MainActivity<br/>[MainActivity.kt]"]
end

subgraph group_recipe_ui["Recipe experience"]
  node_grid["Recipe grid"]
  node_detail["Recipe detail<br/>[RecipeScreen.kt]"]
  node_form["Add/edit form<br/>[AddScreen.kt]"]
  node_components["Compose components"]
end

subgraph group_recipe_data["Recipe data"]
  node_viewmodel["Recipe ViewModel"]
  node_filter_model["Filter ViewModel"]
  node_repository["Recipe repository"]
  node_dao["Room DAO<br/>[RecetteRequests.kt]"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
  node_recipe_model["Recipe model<br/>[Recette.kt]"]
  node_ingredient_model["Ingredient model<br/>[Ingredient.kt]"]
  node_preparation_model["Preparation model<br/>[Preparation.kt]"]
  node_category_model["Category model<br/>[Categorie.kt]"]
  node_converters["List converters<br/>[Converters.kt]"]
end

subgraph group_sharing["Export and sharing"]
  node_share_action["Share action<br/>[ShareAction.kt]"]
  node_share_format["Share formats<br/>[ShareFormat.kt]"]
  node_capture["Compose capture"]
  node_android_share["Android share sheet"]
end

node_cook(("Cook"))

node_cook -->|"opens app"| node_activity
node_activity -->|"starts navigation"| node_grid
node_cook -->|"browses and filters"| node_grid
node_grid -->|"filters recipes"| node_filter_model
node_grid -->|"observes recipes"| node_viewmodel
node_cook -->|"opens recipe"| node_detail
node_detail -->|"loads recipe"| node_viewmodel
node_cook -->|"creates or edits"| node_form
node_form -->|"saves recipe"| node_viewmodel
node_viewmodel -->|"requests data"| node_repository
node_repository -->|"queries and updates"| node_dao
node_dao -->|"uses Room"| node_database
node_database -->|"stores recipes"| node_recipe_model
node_recipe_model -->|"contains ingredients"| node_ingredient_model
node_recipe_model -->|"contains steps"| node_preparation_model
node_recipe_model -->|"has category"| node_category_model
node_converters -->|"converts lists"| node_ingredient_model
node_converters -->|"converts lists"| node_preparation_model
node_cook -->|"requests export"| node_share_action
node_share_action -->|"selects format"| node_share_format
node_share_action -->|"captures content"| node_capture
node_share_action -->|"shares export"| node_android_share

click node_activity "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/MainActivity.kt"
click node_grid "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/RecipeGridScreen.kt"
click node_detail "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/RecipeScreen.kt"
click node_form "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/AddScreen.kt"
click node_components "https://github.com/flaviecousin/cooking_book/tree/main/app/src/main/java/com/example/cookingbook/ui/components"
click node_viewmodel "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/models/RecetteViewModel.kt"
click node_filter_model "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/models/FilterTextViewModel.kt"
click node_repository "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/RecetteRepository.kt"
click node_dao "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/RecetteRequests.kt"
click node_database "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/AppDatabase.kt"
click node_recipe_model "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Recette.kt"
click node_ingredient_model "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Ingredient.kt"
click node_preparation_model "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Preparation.kt"
click node_category_model "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Categorie.kt"
click node_converters "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Converters.kt"
click node_share_action "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/components/ShareAction.kt"
click node_share_format "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/components/ShareFormat.kt"
click node_capture "https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/utils/CapturableContent.kt"

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_activity toneBlue
class node_grid,node_detail,node_form,node_components toneAmber
class node_viewmodel,node_filter_model,node_repository,node_dao,node_database,node_recipe_model,node_ingredient_model,node_preparation_model,node_category_model,node_converters toneMint
class node_share_action,node_share_format,node_capture,node_android_share toneRose
class node_cook toneIndigo
```

## Components

### App navigation

- [MainActivity](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/MainActivity.kt): `app/src/main/java/com/example/cookingbook/MainActivity.kt`

### Recipe experience

- [Recipe grid](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/RecipeGridScreen.kt): `app/src/main/java/com/example/cookingbook/ui/screens/RecipeGridScreen.kt`
- [Recipe detail](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/RecipeScreen.kt): `app/src/main/java/com/example/cookingbook/ui/screens/RecipeScreen.kt`
- [Add/edit form](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/screens/AddScreen.kt): `app/src/main/java/com/example/cookingbook/ui/screens/AddScreen.kt`
- [Compose components](https://github.com/flaviecousin/cooking_book/tree/main/app/src/main/java/com/example/cookingbook/ui/components): `app/src/main/java/com/example/cookingbook/ui/components`

### Recipe data

- [Recipe ViewModel](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/models/RecetteViewModel.kt): `app/src/main/java/com/example/cookingbook/ui/models/RecetteViewModel.kt`
- [Filter ViewModel](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/models/FilterTextViewModel.kt): `app/src/main/java/com/example/cookingbook/ui/models/FilterTextViewModel.kt`
- [Recipe repository](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/RecetteRepository.kt): `app/src/main/java/com/example/cookingbook/ui/data/RecetteRepository.kt`
- [Room DAO](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/RecetteRequests.kt): `app/src/main/java/com/example/cookingbook/ui/data/RecetteRequests.kt`
- [Room database](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/AppDatabase.kt): `app/src/main/java/com/example/cookingbook/ui/data/AppDatabase.kt`
- [Recipe model](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Recette.kt): `app/src/main/java/com/example/cookingbook/ui/data/Recette.kt`
- [Ingredient model](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Ingredient.kt): `app/src/main/java/com/example/cookingbook/ui/data/Ingredient.kt`
- [Preparation model](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Preparation.kt): `app/src/main/java/com/example/cookingbook/ui/data/Preparation.kt`
- [Category model](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Categorie.kt): `app/src/main/java/com/example/cookingbook/ui/data/Categorie.kt`
- [List converters](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/data/Converters.kt): `app/src/main/java/com/example/cookingbook/ui/data/Converters.kt`

### Export and sharing

- [Share action](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/components/ShareAction.kt): `app/src/main/java/com/example/cookingbook/ui/components/ShareAction.kt`
- [Share formats](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/components/ShareFormat.kt): `app/src/main/java/com/example/cookingbook/ui/components/ShareFormat.kt`
- [Compose capture](https://github.com/flaviecousin/cooking_book/blob/main/app/src/main/java/com/example/cookingbook/ui/utils/CapturableContent.kt): `app/src/main/java/com/example/cookingbook/ui/utils/CapturableContent.kt`
- **Android share sheet**

### Other components

- **Cook**

## Connections

- Cook → MainActivity: opens app
- MainActivity → Recipe grid: starts navigation
- Cook → Recipe grid: browses and filters
- Recipe grid → Filter ViewModel: filters recipes
- Recipe grid → Recipe ViewModel: observes recipes
- Cook → Recipe detail: opens recipe
- Recipe detail → Recipe ViewModel: loads recipe
- Cook → Add/edit form: creates or edits
- Add/edit form → Recipe ViewModel: saves recipe
- Recipe ViewModel → Recipe repository: requests data
- Recipe repository → Room DAO: queries and updates
- Room DAO → Room database: uses Room
- Room database → Recipe model: stores recipes
- Recipe model → Ingredient model: contains ingredients
- Recipe model → Preparation model: contains steps
- Recipe model → Category model: has category
- List converters → Ingredient model: converts lists
- List converters → Preparation model: converts lists
- Cook → Share action: requests export
- Share action → Share formats: selects format
- Share action → Compose capture: captures content
- Share action → Android share sheet: shares export
