# vudigapranav/fridge architecture

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

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

## Overview

FRIDGe helps a household track kitchen inventory, scan items, find recipes constrained by that inventory, and cook them while tracking freshness and estimated calories. The main flow runs from the Expo client through the API to inventory-aware recipe generation and back to recipe detail or Cook Mode. The README documents the validation, calorie, and deduction safeguards; sampled excerpts do not show the implementation of most route handlers or stores, so uncertain internal wiring is omitted.

Main entry points: [`api/src/app.ts`](https://github.com/vudigapranav/fridge/blob/main/api/src/app.ts) (Express app), [`app/app`](https://github.com/vudigapranav/fridge/tree/main/app/app) (App screens), [`api/src/ai/suggestions.ts`](https://github.com/vudigapranav/fridge/blob/main/api/src/ai/suggestions.ts) (Suggestion engine), [`app/src/lib/api.ts`](https://github.com/vudigapranav/fridge/blob/main/app/src/lib/api.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Mobile client"]
  node_screens["App screens"]
  node_detail["Recipe detail<br/>[index.tsx]"]
  node_cookmode["Cook Mode<br/>[cook.tsx]"]
  node_authstore["Auth store<br/>[auth.ts]"]
  node_inventory["Inventory store<br/>[inventory.ts]"]
  node_recipes["Recipes store<br/>[recipes.ts]"]
  node_clientapi["API client<br/>[api.ts]"]
end

subgraph group_api["API service"]
  node_approuter["Express app<br/>[app.ts]"]
  node_authroutes["Auth routes<br/>[auth.ts]"]
  node_itemroutes["Item routes<br/>[items.ts]"]
  node_scanroutes["Scan routes<br/>[scan.ts]"]
  node_catalogroutes["Catalog routes<br/>[catalog.ts]"]
  node_suggestionroutes["Suggestion routes<br/>[suggestions.ts]"]
  node_reciperoutes["Recipe routes<br/>[recipes.ts]"]
  node_vision["Image processing<br/>[image.ts]"]
end

subgraph group_recipe["Recipe intelligence"]
  node_suggestionsvc["Suggestion engine<br/>[suggestions.ts]"]
  node_validation["Inventory validation<br/>[validate.ts]"]
  node_calories["Calorie ranges<br/>[calories.ts]"]
  node_deduction["Inventory deduction<br/>[deduct.ts]"]
end

subgraph group_data["Persistence and catalog"]
  node_catalog[("Ingredient catalog<br/>[catalog.ts]")]
  node_prisma["Prisma access<br/>[prisma.ts]"]
end

node_household(("Household user"))
node_postgres[("Postgres")]
node_openai{{"OpenAI"}}

node_household -->|"uses"| node_screens
node_screens -->|"manages session"| node_authstore
node_screens -->|"views inventory"| node_inventory
node_screens -->|"requests recipes"| node_recipes
node_detail -->|"loads recipe"| node_recipes
node_detail -->|"starts cooking"| node_cookmode
node_authstore -->|"requests auth"| node_clientapi
node_inventory -->|"requests inventory"| node_clientapi
node_recipes -->|"requests recipes"| node_clientapi
node_clientapi -->|"sends JSON"| node_approuter
node_approuter -->|"dispatches"| node_authroutes
node_approuter -->|"dispatches"| node_itemroutes
node_approuter -->|"dispatches"| node_scanroutes
node_approuter -->|"dispatches"| node_catalogroutes
node_approuter -->|"dispatches"| node_suggestionroutes
node_approuter -->|"dispatches"| node_reciperoutes
node_authroutes -->|"reads and writes"| node_prisma
node_itemroutes -->|"accesses data"| node_prisma
node_catalogroutes -->|"serves catalog"| node_catalog
node_scanroutes -->|"processes image"| node_vision
node_scanroutes -.->|"sends image"| node_openai
node_suggestionroutes -->|"requests suggestions"| node_suggestionsvc
node_suggestionsvc -.->|"requests structured recipes"| node_openai
node_suggestionsvc -->|"checks recipes"| node_validation
node_suggestionroutes -->|"computes ranges"| node_calories
node_reciperoutes -->|"deducts ingredients"| node_deduction
node_suggestionsvc -->|"matches ingredients"| node_catalog
node_validation -->|"checks quantities"| node_catalog
node_calories -->|"uses nutrition data"| node_catalog
node_deduction -->|"updates inventory"| node_prisma
node_prisma -->|"reads and writes"| node_postgres

click node_screens "https://github.com/vudigapranav/fridge/tree/main/app/app"
click node_detail "https://github.com/vudigapranav/fridge/blob/main/app/app/recipe/%5Bid%5D/index.tsx"
click node_cookmode "https://github.com/vudigapranav/fridge/blob/main/app/app/recipe/%5Bid%5D/cook.tsx"
click node_authstore "https://github.com/vudigapranav/fridge/blob/main/app/src/store/auth.ts"
click node_inventory "https://github.com/vudigapranav/fridge/blob/main/app/src/store/inventory.ts"
click node_recipes "https://github.com/vudigapranav/fridge/blob/main/app/src/store/recipes.ts"
click node_clientapi "https://github.com/vudigapranav/fridge/blob/main/app/src/lib/api.ts"
click node_approuter "https://github.com/vudigapranav/fridge/blob/main/api/src/app.ts"
click node_authroutes "https://github.com/vudigapranav/fridge/blob/main/api/src/routes/auth.ts"
click node_itemroutes "https://github.com/vudigapranav/fridge/blob/main/api/src/routes/items.ts"
click node_scanroutes "https://github.com/vudigapranav/fridge/blob/main/api/src/routes/scan.ts"
click node_catalogroutes "https://github.com/vudigapranav/fridge/blob/main/api/src/routes/catalog.ts"
click node_suggestionroutes "https://github.com/vudigapranav/fridge/blob/main/api/src/routes/suggestions.ts"
click node_reciperoutes "https://github.com/vudigapranav/fridge/blob/main/api/src/routes/recipes.ts"
click node_vision "https://github.com/vudigapranav/fridge/blob/main/api/src/lib/image.ts"
click node_suggestionsvc "https://github.com/vudigapranav/fridge/blob/main/api/src/ai/suggestions.ts"
click node_validation "https://github.com/vudigapranav/fridge/blob/main/api/src/ai/validate.ts"
click node_calories "https://github.com/vudigapranav/fridge/blob/main/api/src/lib/calories.ts"
click node_deduction "https://github.com/vudigapranav/fridge/blob/main/api/src/lib/deduct.ts"
click node_catalog "https://github.com/vudigapranav/fridge/blob/main/api/src/data/catalog.ts"
click node_prisma "https://github.com/vudigapranav/fridge/blob/main/api/src/lib/prisma.ts"

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_screens,node_detail,node_cookmode,node_authstore,node_inventory,node_recipes,node_clientapi,node_household toneBlue
class node_approuter,node_authroutes,node_itemroutes,node_scanroutes,node_catalogroutes,node_suggestionroutes,node_reciperoutes,node_vision,node_postgres toneAmber
class node_suggestionsvc,node_validation,node_calories,node_deduction toneMint
class node_catalog,node_prisma toneRose
class node_openai toneIndigo
```

## Components

### Mobile client

- [App screens](https://github.com/vudigapranav/fridge/tree/main/app/app): `app/app`
- [Recipe detail](https://github.com/vudigapranav/fridge/blob/main/app/app/recipe/%5Bid%5D/index.tsx): `app/app/recipe/[id]/index.tsx`
- [Cook Mode](https://github.com/vudigapranav/fridge/blob/main/app/app/recipe/%5Bid%5D/cook.tsx): `app/app/recipe/[id]/cook.tsx`
- [Auth store](https://github.com/vudigapranav/fridge/blob/main/app/src/store/auth.ts): `app/src/store/auth.ts`
- [Inventory store](https://github.com/vudigapranav/fridge/blob/main/app/src/store/inventory.ts): `app/src/store/inventory.ts`
- [Recipes store](https://github.com/vudigapranav/fridge/blob/main/app/src/store/recipes.ts): `app/src/store/recipes.ts`
- [API client](https://github.com/vudigapranav/fridge/blob/main/app/src/lib/api.ts): `app/src/lib/api.ts`

### API service

- [Express app](https://github.com/vudigapranav/fridge/blob/main/api/src/app.ts): `api/src/app.ts`
- [Auth routes](https://github.com/vudigapranav/fridge/blob/main/api/src/routes/auth.ts): `api/src/routes/auth.ts`
- [Item routes](https://github.com/vudigapranav/fridge/blob/main/api/src/routes/items.ts): `api/src/routes/items.ts`
- [Scan routes](https://github.com/vudigapranav/fridge/blob/main/api/src/routes/scan.ts): `api/src/routes/scan.ts`
- [Catalog routes](https://github.com/vudigapranav/fridge/blob/main/api/src/routes/catalog.ts): `api/src/routes/catalog.ts`
- [Suggestion routes](https://github.com/vudigapranav/fridge/blob/main/api/src/routes/suggestions.ts): `api/src/routes/suggestions.ts`
- [Recipe routes](https://github.com/vudigapranav/fridge/blob/main/api/src/routes/recipes.ts): `api/src/routes/recipes.ts`
- [Image processing](https://github.com/vudigapranav/fridge/blob/main/api/src/lib/image.ts): `api/src/lib/image.ts`

### Recipe intelligence

- [Suggestion engine](https://github.com/vudigapranav/fridge/blob/main/api/src/ai/suggestions.ts): `api/src/ai/suggestions.ts`
- [Inventory validation](https://github.com/vudigapranav/fridge/blob/main/api/src/ai/validate.ts): `api/src/ai/validate.ts`
- [Calorie ranges](https://github.com/vudigapranav/fridge/blob/main/api/src/lib/calories.ts): `api/src/lib/calories.ts`
- [Inventory deduction](https://github.com/vudigapranav/fridge/blob/main/api/src/lib/deduct.ts): `api/src/lib/deduct.ts`

### Persistence and catalog

- [Ingredient catalog](https://github.com/vudigapranav/fridge/blob/main/api/src/data/catalog.ts): `api/src/data/catalog.ts`
- [Prisma access](https://github.com/vudigapranav/fridge/blob/main/api/src/lib/prisma.ts): `api/src/lib/prisma.ts`

### Other components

- **Household user**
- **Postgres**
- **OpenAI**

## Connections

- Household user → App screens: uses
- App screens → Auth store: manages session
- App screens → Inventory store: views inventory
- App screens → Recipes store: requests recipes
- Recipe detail → Recipes store: loads recipe
- Recipe detail → Cook Mode: starts cooking
- Auth store → API client: requests auth
- Inventory store → API client: requests inventory
- Recipes store → API client: requests recipes
- API client → Express app: sends JSON
- Express app → Auth routes: dispatches
- Express app → Item routes: dispatches
- Express app → Scan routes: dispatches
- Express app → Catalog routes: dispatches
- Express app → Suggestion routes: dispatches
- Express app → Recipe routes: dispatches
- Auth routes → Prisma access: reads and writes
- Item routes → Prisma access: accesses data
- Catalog routes → Ingredient catalog: serves catalog
- Scan routes → Image processing: processes image
- Scan routes → OpenAI: sends image
- Suggestion routes → Suggestion engine: requests suggestions
- Suggestion engine → OpenAI: requests structured recipes
- Suggestion engine → Inventory validation: checks recipes
- Suggestion routes → Calorie ranges: computes ranges
- Recipe routes → Inventory deduction: deducts ingredients
- Suggestion engine → Ingredient catalog: matches ingredients
- Inventory validation → Ingredient catalog: checks quantities
- Calorie ranges → Ingredient catalog: uses nutrition data
- Inventory deduction → Prisma access: updates inventory
- Prisma access → Postgres: reads and writes
