# mahe13185/nutrisense architecture

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

- Interactive diagram: https://gitdiagram.com/mahe13185/nutrisense
- Repository: https://github.com/mahe13185/nutrisense
- Video tour (about a minute): https://gitdiagram.com/mahe13185/nutrisense/video

## Overview

NutriSense guides users through a nutrition self-assessment, applies explainable rules to estimate nutrient-related risks, and presents explanations and recommendations. The README describes local browser storage as the privacy-first default, while sampled code also shows optional authenticated Supabase assessment persistence and history. Food exploration and methodology guidance are separate awareness features. Some page implementations and engine lines were not sampled, so their internal wiring is shown only where documented or directly evidenced.

Main entry points: [`app/assessment/page.tsx`](https://github.com/mahe13185/nutrisense/blob/main/app/assessment/page.tsx) (Assessment form), [`lib/supabaseStorage.ts`](https://github.com/mahe13185/nutrisense/blob/main/lib/supabaseStorage.ts) (Assessment storage), [`lib/auth-context.tsx`](https://github.com/mahe13185/nutrisense/blob/main/lib/auth-context.tsx) (Auth context), [`lib/assessmentEngine.ts`](https://github.com/mahe13185/nutrisense/blob/main/lib/assessmentEngine.ts) (Rule engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_journey["User journeys"]
  node_home["Landing page<br/>[page.tsx]"]
end

subgraph group_assessment["Assessment and results"]
  node_assessment_page["Assessment form<br/>[page.tsx]"]
  node_questions["Question data<br/>[questions.ts]"]
  node_engine["Rule engine"]
  node_results["Results dashboard<br/>[page.tsx]"]
end

subgraph group_knowledge["Nutrition knowledge"]
  node_nutrients["Nutrient data<br/>[nutrients.ts]"]
  node_food_explorer["Food explorer<br/>[page.tsx]"]
  node_food_data["Food catalog<br/>[foods.ts]"]
  node_guidelines_page["Guidelines<br/>[page.tsx]"]
  node_guidelines_data["Guidance content<br/>[guidelines.ts]"]
end

subgraph group_accounts["Accounts and persistence"]
  node_login["Login<br/>[page.tsx]"]
  node_signup["Sign up<br/>[page.tsx]"]
  node_auth["Auth context<br/>[auth-context.tsx]"]
  node_dashboard["User dashboard<br/>[page.tsx]"]
  node_history["Assessment history<br/>[page.tsx]"]
  node_profile["User profile<br/>[page.tsx]"]
  node_local_storage[("Browser storage<br/>[storage.ts]")]
  node_cloud_storage["Assessment storage<br/>[supabaseStorage.ts]"]
end

node_person(("User"))
node_supabase["Supabase<br/>[supabase.ts]"]
node_db[("Assessments database<br/>[schema.sql]")]

node_person -->|"opens"| node_home
node_home -->|"starts assessment"| node_assessment_page
node_assessment_page -->|"uses questions"| node_questions
node_assessment_page -->|"submits responses"| node_engine
node_engine -.->|"assesses nutrients"| node_nutrients
node_engine -->|"returns assessment"| node_assessment_page
node_assessment_page -->|"saves draft and result"| node_local_storage
node_results -->|"reads saved result"| node_local_storage
node_person -->|"views results"| node_results
node_person -->|"explores foods"| node_food_explorer
node_food_explorer -->|"filters foods"| node_food_data
node_person -->|"reads guidance"| node_guidelines_page
node_guidelines_page -->|"displays guidance"| node_guidelines_data
node_person -->|"signs in"| node_login
node_person -->|"creates account"| node_signup
node_login -->|"uses authentication"| node_auth
node_signup -->|"uses authentication"| node_auth
node_assessment_page -->|"checks user"| node_auth
node_assessment_page -.->|"optionally saves"| node_cloud_storage
node_cloud_storage -->|"queries assessments"| node_supabase
node_supabase -->|"reads and writes"| node_db
node_results -.->|"loads by ID"| node_cloud_storage
node_dashboard -.->|"loads history"| node_cloud_storage
node_history -.->|"loads history"| node_cloud_storage
node_dashboard -->|"uses user session"| node_auth
node_profile -->|"protects profile"| node_auth

click node_home "https://github.com/mahe13185/nutrisense/blob/main/app/page.tsx"
click node_assessment_page "https://github.com/mahe13185/nutrisense/blob/main/app/assessment/page.tsx"
click node_questions "https://github.com/mahe13185/nutrisense/blob/main/data/questions.ts"
click node_engine "https://github.com/mahe13185/nutrisense/blob/main/lib/assessmentEngine.ts"
click node_nutrients "https://github.com/mahe13185/nutrisense/blob/main/data/nutrients.ts"
click node_results "https://github.com/mahe13185/nutrisense/blob/main/app/results/page.tsx"
click node_food_explorer "https://github.com/mahe13185/nutrisense/blob/main/app/foods/page.tsx"
click node_food_data "https://github.com/mahe13185/nutrisense/blob/main/data/foods.ts"
click node_guidelines_page "https://github.com/mahe13185/nutrisense/blob/main/app/guidelines/page.tsx"
click node_guidelines_data "https://github.com/mahe13185/nutrisense/blob/main/data/guidelines.ts"
click node_login "https://github.com/mahe13185/nutrisense/blob/main/app/login/page.tsx"
click node_signup "https://github.com/mahe13185/nutrisense/blob/main/app/signup/page.tsx"
click node_auth "https://github.com/mahe13185/nutrisense/blob/main/lib/auth-context.tsx"
click node_dashboard "https://github.com/mahe13185/nutrisense/blob/main/app/dashboard/page.tsx"
click node_history "https://github.com/mahe13185/nutrisense/blob/main/app/history/page.tsx"
click node_profile "https://github.com/mahe13185/nutrisense/blob/main/app/profile/page.tsx"
click node_local_storage "https://github.com/mahe13185/nutrisense/blob/main/lib/storage.ts"
click node_cloud_storage "https://github.com/mahe13185/nutrisense/blob/main/lib/supabaseStorage.ts"
click node_supabase "https://github.com/mahe13185/nutrisense/blob/main/lib/supabase.ts"
click node_db "https://github.com/mahe13185/nutrisense/blob/main/supabase/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_home,node_person toneBlue
class node_assessment_page,node_questions,node_engine,node_results,node_db toneAmber
class node_nutrients,node_food_explorer,node_food_data,node_guidelines_page,node_guidelines_data toneMint
class node_login,node_signup,node_auth,node_dashboard,node_history,node_profile,node_local_storage,node_cloud_storage toneRose
class node_supabase toneTeal
```

## Components

### User journeys

- [Landing page](https://github.com/mahe13185/nutrisense/blob/main/app/page.tsx): `app/page.tsx`

### Assessment and results

- [Assessment form](https://github.com/mahe13185/nutrisense/blob/main/app/assessment/page.tsx): `app/assessment/page.tsx`
- [Question data](https://github.com/mahe13185/nutrisense/blob/main/data/questions.ts): `data/questions.ts`
- [Rule engine](https://github.com/mahe13185/nutrisense/blob/main/lib/assessmentEngine.ts): `lib/assessmentEngine.ts`
- [Results dashboard](https://github.com/mahe13185/nutrisense/blob/main/app/results/page.tsx): `app/results/page.tsx`

### Nutrition knowledge

- [Nutrient data](https://github.com/mahe13185/nutrisense/blob/main/data/nutrients.ts): `data/nutrients.ts`
- [Food explorer](https://github.com/mahe13185/nutrisense/blob/main/app/foods/page.tsx): `app/foods/page.tsx`
- [Food catalog](https://github.com/mahe13185/nutrisense/blob/main/data/foods.ts): `data/foods.ts`
- [Guidelines](https://github.com/mahe13185/nutrisense/blob/main/app/guidelines/page.tsx): `app/guidelines/page.tsx`
- [Guidance content](https://github.com/mahe13185/nutrisense/blob/main/data/guidelines.ts): `data/guidelines.ts`

### Accounts and persistence

- [Login](https://github.com/mahe13185/nutrisense/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [Sign up](https://github.com/mahe13185/nutrisense/blob/main/app/signup/page.tsx): `app/signup/page.tsx`
- [Auth context](https://github.com/mahe13185/nutrisense/blob/main/lib/auth-context.tsx): `lib/auth-context.tsx`
- [User dashboard](https://github.com/mahe13185/nutrisense/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Assessment history](https://github.com/mahe13185/nutrisense/blob/main/app/history/page.tsx): `app/history/page.tsx`
- [User profile](https://github.com/mahe13185/nutrisense/blob/main/app/profile/page.tsx): `app/profile/page.tsx`
- [Browser storage](https://github.com/mahe13185/nutrisense/blob/main/lib/storage.ts): `lib/storage.ts`
- [Assessment storage](https://github.com/mahe13185/nutrisense/blob/main/lib/supabaseStorage.ts): `lib/supabaseStorage.ts`

### Other components

- **User**
- [Supabase](https://github.com/mahe13185/nutrisense/blob/main/lib/supabase.ts): `lib/supabase.ts`
- [Assessments database](https://github.com/mahe13185/nutrisense/blob/main/supabase/schema.sql): `supabase/schema.sql`

## Connections

- User → Landing page: opens
- Landing page → Assessment form: starts assessment
- Assessment form → Question data: uses questions
- Assessment form → Rule engine: submits responses
- Rule engine → Nutrient data: assesses nutrients
- Rule engine → Assessment form: returns assessment
- Assessment form → Browser storage: saves draft and result
- Results dashboard → Browser storage: reads saved result
- User → Results dashboard: views results
- User → Food explorer: explores foods
- Food explorer → Food catalog: filters foods
- User → Guidelines: reads guidance
- Guidelines → Guidance content: displays guidance
- User → Login: signs in
- User → Sign up: creates account
- Login → Auth context: uses authentication
- Sign up → Auth context: uses authentication
- Assessment form → Auth context: checks user
- Assessment form → Assessment storage: optionally saves
- Assessment storage → Supabase: queries assessments
- Supabase → Assessments database: reads and writes
- Results dashboard → Assessment storage: loads by ID
- User dashboard → Assessment storage: loads history
- Assessment history → Assessment storage: loads history
- User dashboard → Auth context: uses user session
- User profile → Auth context: protects profile
