# dalaixlmao/whoomz architecture

> Architecture diagram of the GitHub repository dalaixlmao/whoomz, 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/dalaixlmao/whoomz
- Repository: https://github.com/dalaixlmao/whoomz

## Overview

Whoomz is a fitness-tracking product with a FastAPI backend and Android/iOS Flutter platform shells. The principal workflow is a user sending fitness data or a coaching message to the API, which supports food, workout, and weight tracking and AI chat; a scheduled job also creates daily progress notes. The graph includes the documented route capabilities, but most route/service implementations and mobile application code were not sampled, so their internal wiring is left unspecified.

Main entry points: [`backend/app/main.py`](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/main.py) (FastAPI app), [`backend/app/services/chat_service.py`](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/chat_service.py) (Chat service), [`backend/app/services/scheduler_service.py`](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/scheduler_service.py) (Daily job), [`backend/app/services/ai/service.py`](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/ai/service.py) (AI service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and clients"]
  node_mobile["Mobile shells"]
  node_api["FastAPI app<br/>[main.py]"]
  node_health["Health route<br/>[health.py]"]
end

subgraph group_tracking["Fitness tracking"]
  node_food["Food logs<br/>[food_logs.py]"]
  node_workouts["Workouts<br/>[workouts.py]"]
  node_weight["Weight logs<br/>[weight_logs.py]"]
  node_foodservice["Food service"]
  node_workoutservice["Workout service<br/>[workout_service.py]"]
  node_weightservice["Weight service"]
end

subgraph group_coaching["AI coaching"]
  node_chat["Chat route<br/>[chat.py]"]
  node_chatservice["Chat service<br/>[chat_service.py]"]
  node_voice["Voice route<br/>[voice.py]"]
  node_voiceservice["Voice service<br/>[voice_service.py]"]
  node_ai["AI service<br/>[service.py]"]
  node_providers["AI providers"]
end

subgraph group_identity["Identity"]
  node_authroute["Auth route<br/>[auth.py]"]
  node_authservice["Auth service<br/>[auth_service.py]"]
end

subgraph group_summaries["Progress summaries"]
  node_schedulerroute["Scheduler route<br/>[scheduler.py]"]
  node_scheduler["Daily job"]
  node_notesroute["Daily notes<br/>[daily_notes.py]"]
  node_noteservice["Notes service"]
end

node_user(("User"))
node_supabase[("Supabase")]
node_authprovider["Supabase Auth"]

node_user -->|"uses"| node_mobile
node_mobile -->|"sends requests"| node_api
node_api -->|"routes"| node_health
node_api -->|"routes"| node_food
node_api -->|"routes"| node_workouts
node_api -->|"routes"| node_weight
node_api -->|"routes"| node_chat
node_api -->|"routes"| node_voice
node_api -->|"routes"| node_authroute
node_api -->|"routes"| node_schedulerroute
node_api -->|"routes"| node_notesroute
node_foodservice -->|"reads/writes"| node_supabase
node_workoutservice -->|"reads/writes"| node_supabase
node_weightservice -->|"reads/writes"| node_supabase
node_chatservice -->|"streams"| node_ai
node_chatservice -->|"logs food"| node_foodservice
node_chatservice -->|"logs workouts"| node_workoutservice
node_chatservice -->|"fetches context"| node_supabase
node_voiceservice -->|"streams"| node_ai
node_ai -->|"delegates"| node_providers
node_authservice -->|"authenticates"| node_authprovider
node_api -->|"schedules job"| node_scheduler
node_scheduler -->|"reads activity"| node_supabase
node_scheduler -->|"generates note"| node_ai
node_scheduler -->|"inserts note"| node_noteservice
node_noteservice -->|"reads/writes"| node_supabase

click node_mobile "https://github.com/dalaixlmao/whoomz/tree/main/frontend"
click node_api "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/main.py"
click node_health "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/health.py"
click node_food "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/food_logs.py"
click node_workouts "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/workouts.py"
click node_weight "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/weight_logs.py"
click node_foodservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/food_log_service.py"
click node_workoutservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/workout_service.py"
click node_weightservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/weight_log_service.py"
click node_chat "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/chat.py"
click node_chatservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/chat_service.py"
click node_voice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/voice.py"
click node_voiceservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/voice_service.py"
click node_ai "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/ai/service.py"
click node_providers "https://github.com/dalaixlmao/whoomz/tree/main/backend/app/services/ai"
click node_authroute "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/auth.py"
click node_authservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/auth_service.py"
click node_schedulerroute "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/scheduler.py"
click node_scheduler "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/scheduler_service.py"
click node_notesroute "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/daily_notes.py"
click node_noteservice "https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/daily_note_service.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_mobile,node_api,node_health,node_user toneBlue
class node_food,node_workouts,node_weight,node_foodservice,node_workoutservice,node_weightservice,node_supabase toneAmber
class node_chat,node_chatservice,node_voice,node_voiceservice,node_ai,node_providers toneMint
class node_authroute,node_authservice toneRose
class node_schedulerroute,node_scheduler,node_notesroute,node_noteservice,node_authprovider toneIndigo
```

## Components

### API and clients

- [Mobile shells](https://github.com/dalaixlmao/whoomz/tree/main/frontend): `frontend`
- [FastAPI app](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/main.py): `backend/app/main.py`
- [Health route](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/health.py): `backend/app/routers/health.py`

### Fitness tracking

- [Food logs](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/food_logs.py): `backend/app/routers/food_logs.py`
- [Workouts](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/workouts.py): `backend/app/routers/workouts.py`
- [Weight logs](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/weight_logs.py): `backend/app/routers/weight_logs.py`
- [Food service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/food_log_service.py): `backend/app/services/food_log_service.py`
- [Workout service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/workout_service.py): `backend/app/services/workout_service.py`
- [Weight service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/weight_log_service.py): `backend/app/services/weight_log_service.py`

### AI coaching

- [Chat route](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/chat.py): `backend/app/routers/chat.py`
- [Chat service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/chat_service.py): `backend/app/services/chat_service.py`
- [Voice route](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/voice.py): `backend/app/routers/voice.py`
- [Voice service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/voice_service.py): `backend/app/services/voice_service.py`
- [AI service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/ai/service.py): `backend/app/services/ai/service.py`
- [AI providers](https://github.com/dalaixlmao/whoomz/tree/main/backend/app/services/ai): `backend/app/services/ai`

### Identity

- [Auth route](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/auth.py): `backend/app/routers/auth.py`
- [Auth service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/auth_service.py): `backend/app/services/auth_service.py`

### Progress summaries

- [Scheduler route](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/scheduler.py): `backend/app/routers/scheduler.py`
- [Daily job](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/scheduler_service.py): `backend/app/services/scheduler_service.py`
- [Daily notes](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/routers/daily_notes.py): `backend/app/routers/daily_notes.py`
- [Notes service](https://github.com/dalaixlmao/whoomz/blob/main/backend/app/services/daily_note_service.py): `backend/app/services/daily_note_service.py`

### Other components

- **User**
- **Supabase**
- **Supabase Auth**

## Connections

- User → Mobile shells: uses
- Mobile shells → FastAPI app: sends requests
- FastAPI app → Health route: routes
- FastAPI app → Food logs: routes
- FastAPI app → Workouts: routes
- FastAPI app → Weight logs: routes
- FastAPI app → Chat route: routes
- FastAPI app → Voice route: routes
- FastAPI app → Auth route: routes
- FastAPI app → Scheduler route: routes
- FastAPI app → Daily notes: routes
- Food service → Supabase: reads/writes
- Workout service → Supabase: reads/writes
- Weight service → Supabase: reads/writes
- Chat service → AI service: streams
- Chat service → Food service: logs food
- Chat service → Workout service: logs workouts
- Chat service → Supabase: fetches context
- Voice service → AI service: streams
- AI service → AI providers: delegates
- Auth service → Supabase Auth: authenticates
- FastAPI app → Daily job: schedules job
- Daily job → Supabase: reads activity
- Daily job → AI service: generates note
- Daily job → Notes service: inserts note
- Notes service → Supabase: reads/writes
