# kyu-bai/macrosync architecture

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

- Interactive diagram: https://gitdiagram.com/kyu-bai/macrosync
- Repository: https://github.com/kyu-bai/macrosync

## Overview

MacroSync is a mobile fitness and nutrition app. Users authenticate, complete personal-goal onboarding, then track meals, hydration, weight, and workouts from the dashboard; they can also scan food, request recipes, use a location-aware food radar, and chat with an AI fitness assistant. The React Native app calls a FastAPI backend for account and tracking operations and Gemini-powered features, with Supabase as the documented data and auth service. Edges are limited to README statements and source-index/import or excerpt evidence; unsampled screen wiring is not asserted.

Main entry points: [`Frontend/App.js`](https://github.com/kyu-bai/macrosync/blob/main/Frontend/App.js) (App navigator), [`Backend/index.py`](https://github.com/kyu-bai/macrosync/blob/main/Backend/index.py) (FastAPI routes), [`Frontend/src/screens/config/api.js`](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/config/api.js) (API configuration), [`Frontend/src/screens/onboarding/StepThree.jsx`](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/onboarding/StepThree.jsx) (Goal onboarding)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile experience"]
  node_app["App navigator<br/>[App.js]"]
  node_auth["Authentication<br/>[useAuthLogin.js]"]
  node_signup["Sign-up flow<br/>[useAuthSignUp.js]"]
  node_settings["Settings<br/>[Settings.jsx]"]
  node_notifications["Notifications"]
end

subgraph group_personalization["Setup and preferences"]
  node_onboarding["Goal onboarding<br/>[StepThree.jsx]"]
  node_baseline["Baseline setup"]
  node_goals["Goal setup<br/>[useStepTwoGoals.js]"]
  node_dietary["Dietary setup"]
  node_localization["Language context"]
end

subgraph group_tracking["Tracking and discovery"]
  node_dashboard["Dashboard tracking<br/>[Dashboard.jsx]"]
  node_workout["Workout player<br/>[Workout.jsx]"]
  node_foodscan["Food scanner<br/>[FoodScanner.jsx]"]
  node_recipes["Recipes and radar<br/>[DietRecipes.jsx]"]
  node_chatbot["AI chatbot<br/>[ChatbotAI.jsx]"]
end

subgraph group_backend["API and services"]
  node_apiurl["API configuration<br/>[api.js]"]
  node_offline[("Offline storage<br/>[OfflineStorage.js]")]
  node_api["FastAPI routes<br/>[index.py]"]
  node_translations["Translation catalog"]
  node_supabase[("Supabase")]
  node_gemini["Gemini AI"]
  node_resend["Resend email"]
end

node_user(("User"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_auth
node_auth -->|"requests"| node_apiurl
node_signup -->|"requests"| node_apiurl
node_app -->|"routes to"| node_onboarding
node_onboarding -->|"uses"| node_baseline
node_onboarding -->|"uses"| node_goals
node_onboarding -->|"uses"| node_dietary
node_app -->|"routes to"| node_dashboard
node_app -->|"renders"| node_workout
node_app -->|"reads cache"| node_offline
node_dashboard -->|"queues offline"| node_offline
node_dashboard -->|"requests"| node_apiurl
node_workout -->|"requests"| node_apiurl
node_app -->|"routes to"| node_foodscan
node_app -->|"routes to"| node_recipes
node_app -->|"routes to"| node_chatbot
node_foodscan -->|"analyzes image"| node_api
node_recipes -->|"generates recipe"| node_api
node_chatbot -->|"sends message"| node_api
node_apiurl -->|"targets"| node_api
node_settings -->|"configures"| node_notifications
node_settings -->|"uses"| node_localization
node_localization -->|"fetches translations"| node_apiurl
node_api -->|"reads and writes"| node_supabase
node_api -->|"uses AI"| node_gemini
node_api -->|"sends OTP"| node_resend
node_api -.->|"serves catalog"| node_translations

click node_app "https://github.com/kyu-bai/macrosync/blob/main/Frontend/App.js"
click node_auth "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useAuthLogin.js"
click node_signup "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useAuthSignUp.js"
click node_onboarding "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/onboarding/StepThree.jsx"
click node_baseline "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useStepOneBaseline.js"
click node_goals "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useStepTwoGoals.js"
click node_dietary "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useStepThreeDietary.js"
click node_dashboard "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/Dashboard.jsx"
click node_workout "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/Workout.jsx"
click node_foodscan "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/FoodScanner.jsx"
click node_recipes "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/DietRecipes.jsx"
click node_chatbot "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/ChatbotAI.jsx"
click node_settings "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/Settings.jsx"
click node_notifications "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/services/NotificationService.js"
click node_localization "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/context/LanguageContext.jsx"
click node_apiurl "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/config/api.js"
click node_offline "https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/services/OfflineStorage.js"
click node_api "https://github.com/kyu-bai/macrosync/blob/main/Backend/index.py"
click node_translations "https://github.com/kyu-bai/macrosync/blob/main/Backend/translations_data.py"

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,node_auth,node_signup,node_settings,node_notifications,node_user toneBlue
class node_onboarding,node_baseline,node_goals,node_dietary,node_localization toneAmber
class node_dashboard,node_workout,node_foodscan,node_recipes,node_chatbot toneMint
class node_apiurl,node_offline,node_api,node_translations,node_supabase,node_gemini,node_resend toneRose
```

## Components

### Mobile experience

- [App navigator](https://github.com/kyu-bai/macrosync/blob/main/Frontend/App.js): `Frontend/App.js`
- [Authentication](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useAuthLogin.js): `Frontend/src/hooks/useAuthLogin.js`
- [Sign-up flow](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useAuthSignUp.js): `Frontend/src/hooks/useAuthSignUp.js`
- [Settings](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/Settings.jsx): `Frontend/src/screens/main/Settings.jsx`
- [Notifications](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/services/NotificationService.js): `Frontend/src/services/NotificationService.js`

### Setup and preferences

- [Goal onboarding](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/onboarding/StepThree.jsx): `Frontend/src/screens/onboarding/StepThree.jsx`
- [Baseline setup](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useStepOneBaseline.js): `Frontend/src/hooks/useStepOneBaseline.js`
- [Goal setup](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useStepTwoGoals.js): `Frontend/src/hooks/useStepTwoGoals.js`
- [Dietary setup](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/hooks/useStepThreeDietary.js): `Frontend/src/hooks/useStepThreeDietary.js`
- [Language context](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/context/LanguageContext.jsx): `Frontend/src/context/LanguageContext.jsx`

### Tracking and discovery

- [Dashboard tracking](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/Dashboard.jsx): `Frontend/src/screens/main/Dashboard.jsx`
- [Workout player](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/Workout.jsx): `Frontend/src/screens/main/Workout.jsx`
- [Food scanner](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/FoodScanner.jsx): `Frontend/src/screens/main/FoodScanner.jsx`
- [Recipes and radar](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/DietRecipes.jsx): `Frontend/src/screens/main/DietRecipes.jsx`
- [AI chatbot](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/main/ChatbotAI.jsx): `Frontend/src/screens/main/ChatbotAI.jsx`

### API and services

- [API configuration](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/screens/config/api.js): `Frontend/src/screens/config/api.js`
- [Offline storage](https://github.com/kyu-bai/macrosync/blob/main/Frontend/src/services/OfflineStorage.js): `Frontend/src/services/OfflineStorage.js`
- [FastAPI routes](https://github.com/kyu-bai/macrosync/blob/main/Backend/index.py): `Backend/index.py`
- [Translation catalog](https://github.com/kyu-bai/macrosync/blob/main/Backend/translations_data.py): `Backend/translations_data.py`
- **Supabase**
- **Gemini AI**
- **Resend email**

### Other components

- **User**

## Connections

- User → App navigator: uses (evidence: `README.md`)
- App navigator → Authentication: routes to (evidence: `Frontend/App.js`)
- Authentication → API configuration: requests (evidence: `Frontend/src/hooks/useAuthLogin.js`)
- Sign-up flow → API configuration: requests (evidence: `Frontend/src/hooks/useAuthSignUp.js`)
- App navigator → Goal onboarding: routes to (evidence: `Frontend/App.js`)
- Goal onboarding → Baseline setup: uses
- Goal onboarding → Goal setup: uses
- Goal onboarding → Dietary setup: uses (evidence: `Frontend/src/screens/onboarding/StepThree.jsx`)
- App navigator → Dashboard tracking: routes to (evidence: `Frontend/App.js`)
- App navigator → Workout player: renders (evidence: `Frontend/App.js`)
- App navigator → Offline storage: reads cache (evidence: `Frontend/App.js`)
- Dashboard tracking → Offline storage: queues offline (evidence: `Frontend/src/screens/main/Dashboard.jsx`)
- Dashboard tracking → API configuration: requests (evidence: `Frontend/src/screens/main/Dashboard.jsx`)
- Workout player → API configuration: requests (evidence: `Frontend/src/screens/main/Workout.jsx`)
- App navigator → Food scanner: routes to (evidence: `Frontend/App.js`)
- App navigator → Recipes and radar: routes to (evidence: `Frontend/App.js`)
- App navigator → AI chatbot: routes to (evidence: `Frontend/App.js`)
- Food scanner → FastAPI routes: analyzes image (evidence: `README.md`)
- Recipes and radar → FastAPI routes: generates recipe (evidence: `README.md`)
- AI chatbot → FastAPI routes: sends message (evidence: `Frontend/src/screens/main/ChatbotAI.jsx`)
- API configuration → FastAPI routes: targets (evidence: `Frontend/src/screens/config/api.js`)
- Settings → Notifications: configures (evidence: `Frontend/src/screens/main/Settings.jsx`)
- Settings → Language context: uses (evidence: `Frontend/src/screens/main/Settings.jsx`)
- Language context → API configuration: fetches translations (evidence: `Frontend/src/context/LanguageContext.jsx`)
- FastAPI routes → Supabase: reads and writes (evidence: `README.md`)
- FastAPI routes → Gemini AI: uses AI (evidence: `README.md`)
- FastAPI routes → Resend email: sends OTP (evidence: `README.md`)
- FastAPI routes → Translation catalog: serves catalog (evidence: `Backend/index.py`)
