# elgavigrieze/foodieapp architecture

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

- Interactive diagram: https://gitdiagram.com/elgavigrieze/foodieapp
- Repository: https://github.com/elgavigrieze/foodieapp

## Overview

FoodieApp is a Spring Boot meal-planning and nutrition tracker. Users manage products and meals, plan a week, then use the plan’s ingredients to build shopping lists; food logging tracks actual intake separately. AI photo analysis, recipe import, voice parsing, and barcode lookup offer alternate ways to capture food data. Fitness, household sharing, budget tracking, and brain-test scoring are distinct supporting capabilities. The graph follows README-described feature relationships and source-index references; most controllers and several services were not excerpted, so unsampled internal links are omitted or marked unverified.

Main entry points: [`src/main/java/com/foodie/model/db/MealPlan.java`](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/model/db/MealPlan.java) (Application data), [`src/main/java/com/foodie/service/MealPlanService.java`](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/MealPlanService.java) (Weekly plans), [`src/main/java/com/foodie/service/MealService.java`](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/MealService.java) (Meal management), [`src/main/java/com/foodie/service/ProductService.java`](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/ProductService.java) (Product library)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Food capture"]
  node_foodlog["Food log"]
  node_photo["Photo analysis"]
  node_voice["Voice logging"]
  node_barcode["Barcode lookup"]
  node_recipe["Recipe import"]
  node_matcher["Ingredient matching"]
end

subgraph group_planning["Meals and planning"]
  node_meal["Meal management<br/>[MealService.java]"]
  node_product["Product library"]
  node_mealplan["Weekly plans"]
  node_shopping["Shopping lists"]
  node_budget["Budget tracking<br/>[BudgetService.java]"]
end

subgraph group_tracking["Personal tracking"]
  node_fitness["Fitness tracking"]
  node_brain["Brain scoreboard<br/>[BrainService.java]"]
  node_recorder["Browser recorder"]
end

subgraph group_platform["Identity and data"]
  node_household["Households"]
  node_identity["User identity"]
  node_database[("Application data<br/>[MealPlan.java]")]
end

node_user(("User"))
node_ai{{"Cloudflare AI"}}
node_off{{"Open Food Facts"}}

node_user -->|"logs intake"| node_foodlog
node_user -->|"submits meal photo"| node_photo
node_photo -->|"estimates nutrition"| node_ai
node_user -->|"speaks food entry"| node_voice
node_user -->|"scans barcode"| node_barcode
node_barcode -->|"fetches product"| node_off
node_user -->|"imports recipe"| node_recipe
node_recipe -->|"extracts recipe"| node_ai
node_recipe -->|"matches ingredients"| node_matcher
node_matcher -->|"resolves products"| node_product
node_user -->|"manages meals"| node_meal
node_user -->|"manages products"| node_product
node_meal -->|"uses ingredients"| node_product
node_user -->|"plans meals"| node_mealplan
node_mealplan -->|"schedules meals"| node_meal
node_user -->|"views list"| node_shopping
node_mealplan -->|"generates list"| node_shopping
node_user -->|"tracks spending"| node_budget
node_user -->|"logs workouts"| node_fitness
node_user -->|"views scores"| node_brain
node_recorder -->|"posts results"| node_brain
node_user -->|"shares household"| node_household
node_identity -.->|"loads user"| node_database
node_foodlog -.->|"stores entries"| node_database
node_meal -.->|"stores meals"| node_database
node_product -.->|"stores products"| node_database
node_mealplan -->|"stores plans"| node_database
node_brain -.->|"stores scores"| node_database
node_household -.->|"stores households"| node_database

click node_foodlog "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/controller/FoodLogController.java"
click node_photo "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/PhotoNutritionService.java"
click node_voice "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/VoiceLogService.java"
click node_barcode "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/BarcodeService.java"
click node_recipe "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/RecipeScraperService.java"
click node_matcher "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/RecipeIngredientMatcherService.java"
click node_meal "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/MealService.java"
click node_product "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/ProductService.java"
click node_mealplan "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/MealPlanService.java"
click node_shopping "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/ShoppingListService.java"
click node_budget "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/BudgetService.java"
click node_fitness "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/FitnessService.java"
click node_brain "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/BrainService.java"
click node_recorder "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/resources/static/js/brain-recorder.user.js"
click node_household "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/HouseholdService.java"
click node_identity "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/CurrentUserService.java"
click node_database "https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/model/db/MealPlan.java"

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_foodlog,node_photo,node_voice,node_barcode,node_recipe,node_matcher,node_user toneBlue
class node_meal,node_product,node_mealplan,node_shopping,node_budget toneAmber
class node_fitness,node_brain,node_recorder toneMint
class node_household,node_identity,node_database toneRose
class node_ai,node_off toneIndigo
```

## Components

### Food capture

- [Food log](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/controller/FoodLogController.java): `src/main/java/com/foodie/controller/FoodLogController.java`
- [Photo analysis](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/PhotoNutritionService.java): `src/main/java/com/foodie/service/PhotoNutritionService.java`
- [Voice logging](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/VoiceLogService.java): `src/main/java/com/foodie/service/VoiceLogService.java`
- [Barcode lookup](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/BarcodeService.java): `src/main/java/com/foodie/service/BarcodeService.java`
- [Recipe import](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/RecipeScraperService.java): `src/main/java/com/foodie/service/RecipeScraperService.java`
- [Ingredient matching](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/RecipeIngredientMatcherService.java): `src/main/java/com/foodie/service/RecipeIngredientMatcherService.java`

### Meals and planning

- [Meal management](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/MealService.java): `src/main/java/com/foodie/service/MealService.java`
- [Product library](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/ProductService.java): `src/main/java/com/foodie/service/ProductService.java`
- [Weekly plans](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/MealPlanService.java): `src/main/java/com/foodie/service/MealPlanService.java`
- [Shopping lists](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/ShoppingListService.java): `src/main/java/com/foodie/service/ShoppingListService.java`
- [Budget tracking](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/BudgetService.java): `src/main/java/com/foodie/service/BudgetService.java`

### Personal tracking

- [Fitness tracking](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/FitnessService.java): `src/main/java/com/foodie/service/FitnessService.java`
- [Brain scoreboard](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/BrainService.java): `src/main/java/com/foodie/service/BrainService.java`
- [Browser recorder](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/resources/static/js/brain-recorder.user.js): `src/main/resources/static/js/brain-recorder.user.js`

### Identity and data

- [Households](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/HouseholdService.java): `src/main/java/com/foodie/service/HouseholdService.java`
- [User identity](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/service/CurrentUserService.java): `src/main/java/com/foodie/service/CurrentUserService.java`
- [Application data](https://github.com/elgavigrieze/foodieapp/blob/master/src/main/java/com/foodie/model/db/MealPlan.java): `src/main/java/com/foodie/model/db/MealPlan.java`

### Other components

- **User**
- **Cloudflare AI**
- **Open Food Facts**

## Connections

- User → Food log: logs intake
- User → Photo analysis: submits meal photo
- Photo analysis → Cloudflare AI: estimates nutrition
- User → Voice logging: speaks food entry
- User → Barcode lookup: scans barcode
- Barcode lookup → Open Food Facts: fetches product
- User → Recipe import: imports recipe
- Recipe import → Cloudflare AI: extracts recipe
- Recipe import → Ingredient matching: matches ingredients (evidence: `src/main/java/com/foodie/controller/RecipeImportController.java`)
- Ingredient matching → Product library: resolves products (evidence: `src/main/java/com/foodie/service/RecipeIngredientMatcherService.java`)
- User → Meal management: manages meals
- User → Product library: manages products
- Meal management → Product library: uses ingredients (evidence: `src/main/java/com/foodie/service/MealService.java`)
- User → Weekly plans: plans meals
- Weekly plans → Meal management: schedules meals (evidence: `src/main/java/com/foodie/service/MealPlanService.java`)
- User → Shopping lists: views list
- Weekly plans → Shopping lists: generates list
- User → Budget tracking: tracks spending
- User → Fitness tracking: logs workouts
- User → Brain scoreboard: views scores
- Browser recorder → Brain scoreboard: posts results
- User → Households: shares household
- User identity → Application data: loads user
- Food log → Application data: stores entries
- Meal management → Application data: stores meals
- Product library → Application data: stores products
- Weekly plans → Application data: stores plans (evidence: `src/main/java/com/foodie/service/MealPlanService.java`)
- Brain scoreboard → Application data: stores scores
- Households → Application data: stores households
