# alsrepo/web_fit architecture

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

## Overview

FitNotes Analytics Dashboard imports FitNotes CSV workout logs into DuckDB, then serves mobile-first views for workout summaries, calendar days, detailed sessions and exercise history. The documented analysis includes strength progression and estimated 1RM, cardio projections, training volume and muscle activation maps. The sampled code confirms database-backed services and the API entry point; router and frontend-page wiring is represented at subsystem level where their source was not sampled.

Main entry points: [`backend/app/api/routers/dashboard.py`](https://github.com/alsrepo/web_fit/blob/develop/backend/app/api/routers/dashboard.py) (Dashboard endpoints), [`backend/app/database.py`](https://github.com/alsrepo/web_fit/blob/develop/backend/app/database.py) (DuckDB access and views), [`frontend/src/routes`](https://github.com/alsrepo/web_fit/tree/develop/frontend/src/routes) (Dashboard views), [`frontend/src/lib/services/client.js`](https://github.com/alsrepo/web_fit/blob/develop/frontend/src/lib/services/client.js) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web interface"]
  node_web_routes["Dashboard views"]
  node_dashboard_widgets["Dashboard cards"]
  node_detail_widgets["Session and muscle views"]
  node_history_widgets["Exercise charts"]
  node_api_service["API client<br/>[client.js]"]
end

subgraph group_api["API layer"]
  node_api_entry["FastAPI application<br/>[main.py]"]
  node_fitnotes_api["FitNotes endpoints<br/>[fitnotes.py]"]
  node_dashboard_api["Dashboard endpoints<br/>[dashboard.py]"]
  node_response_models["Analytics response models<br/>[dashboard.py]"]
end

subgraph group_analytics["Workout analytics"]
  node_dashboard_logic["Dashboard summaries"]
  node_calendar_logic["Calendar queries"]
  node_day_logic["Day detail and muscles"]
  node_exercise_logic["Exercise history and projections"]
end

subgraph group_storage["Import and storage"]
  node_csv_ingest["CSV ingestion<br/>[csv_service.py]"]
  node_db_access["DuckDB access and views<br/>[database.py]"]
  node_workout_db[("Workout analytics store<br/>[database.py]")]
end

node_athlete(("Athlete"))
node_workout_csv["FitNotes CSV"]

node_athlete -->|"uses"| node_web_routes
node_workout_csv -->|"uploads"| node_fitnotes_api
node_web_routes -->|"renders"| node_dashboard_widgets
node_web_routes -->|"renders"| node_detail_widgets
node_web_routes -->|"renders"| node_history_widgets
node_dashboard_widgets -->|"requests data"| node_api_service
node_detail_widgets -->|"requests data"| node_api_service
node_history_widgets -->|"requests data"| node_api_service
node_api_service -->|"HTTP requests"| node_api_entry
node_api_entry -->|"dispatches"| node_fitnotes_api
node_api_entry -->|"dispatches"| node_dashboard_api
node_fitnotes_api -->|"ingests CSV"| node_csv_ingest
node_csv_ingest -->|"writes logs"| node_db_access
node_dashboard_api -->|"queries summaries"| node_dashboard_logic
node_dashboard_api -->|"queries calendar"| node_calendar_logic
node_dashboard_api -->|"queries day detail"| node_day_logic
node_dashboard_api -->|"queries history"| node_exercise_logic
node_dashboard_logic -->|"queries"| node_db_access
node_calendar_logic -->|"queries"| node_db_access
node_day_logic -->|"queries"| node_db_access
node_exercise_logic -->|"queries"| node_db_access
node_db_access -->|"opens and initializes"| node_workout_db
node_dashboard_api -->|"validates responses"| node_response_models

click node_web_routes "https://github.com/alsrepo/web_fit/tree/develop/frontend/src/routes"
click node_dashboard_widgets "https://github.com/alsrepo/web_fit/tree/develop/frontend/src/lib/components/dashboard"
click node_detail_widgets "https://github.com/alsrepo/web_fit/tree/develop/frontend/src/lib/components/detalle"
click node_history_widgets "https://github.com/alsrepo/web_fit/tree/develop/frontend/src/lib/components/historico"
click node_api_service "https://github.com/alsrepo/web_fit/blob/develop/frontend/src/lib/services/client.js"
click node_api_entry "https://github.com/alsrepo/web_fit/blob/develop/backend/app/main.py"
click node_fitnotes_api "https://github.com/alsrepo/web_fit/blob/develop/backend/app/api/routers/fitnotes.py"
click node_dashboard_api "https://github.com/alsrepo/web_fit/blob/develop/backend/app/api/routers/dashboard.py"
click node_csv_ingest "https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/csv_service.py"
click node_dashboard_logic "https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/dashboard_service.py"
click node_calendar_logic "https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/calendar_service.py"
click node_day_logic "https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/day_detail_service.py"
click node_exercise_logic "https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/exercise_service.py"
click node_db_access "https://github.com/alsrepo/web_fit/blob/develop/backend/app/database.py"
click node_workout_db "https://github.com/alsrepo/web_fit/blob/develop/backend/app/database.py"
click node_response_models "https://github.com/alsrepo/web_fit/blob/develop/backend/app/models/dashboard.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_web_routes,node_dashboard_widgets,node_detail_widgets,node_history_widgets,node_api_service toneBlue
class node_api_entry,node_fitnotes_api,node_dashboard_api,node_response_models toneAmber
class node_dashboard_logic,node_calendar_logic,node_day_logic,node_exercise_logic toneMint
class node_csv_ingest,node_db_access,node_workout_db toneRose
class node_athlete,node_workout_csv toneIndigo
```

## Components

### Web interface

- [Dashboard views](https://github.com/alsrepo/web_fit/tree/develop/frontend/src/routes): `frontend/src/routes`
- [Dashboard cards](https://github.com/alsrepo/web_fit/tree/develop/frontend/src/lib/components/dashboard): `frontend/src/lib/components/dashboard`
- [Session and muscle views](https://github.com/alsrepo/web_fit/tree/develop/frontend/src/lib/components/detalle): `frontend/src/lib/components/detalle`
- [Exercise charts](https://github.com/alsrepo/web_fit/tree/develop/frontend/src/lib/components/historico): `frontend/src/lib/components/historico`
- [API client](https://github.com/alsrepo/web_fit/blob/develop/frontend/src/lib/services/client.js): `frontend/src/lib/services/client.js`

### API layer

- [FastAPI application](https://github.com/alsrepo/web_fit/blob/develop/backend/app/main.py): `backend/app/main.py`
- [FitNotes endpoints](https://github.com/alsrepo/web_fit/blob/develop/backend/app/api/routers/fitnotes.py): `backend/app/api/routers/fitnotes.py`
- [Dashboard endpoints](https://github.com/alsrepo/web_fit/blob/develop/backend/app/api/routers/dashboard.py): `backend/app/api/routers/dashboard.py`
- [Analytics response models](https://github.com/alsrepo/web_fit/blob/develop/backend/app/models/dashboard.py): `backend/app/models/dashboard.py`

### Workout analytics

- [Dashboard summaries](https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/dashboard_service.py): `backend/app/services/dashboard_service.py`
- [Calendar queries](https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/calendar_service.py): `backend/app/services/calendar_service.py`
- [Day detail and muscles](https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/day_detail_service.py): `backend/app/services/day_detail_service.py`
- [Exercise history and projections](https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/exercise_service.py): `backend/app/services/exercise_service.py`

### Import and storage

- [CSV ingestion](https://github.com/alsrepo/web_fit/blob/develop/backend/app/services/csv_service.py): `backend/app/services/csv_service.py`
- [DuckDB access and views](https://github.com/alsrepo/web_fit/blob/develop/backend/app/database.py): `backend/app/database.py`
- [Workout analytics store](https://github.com/alsrepo/web_fit/blob/develop/backend/app/database.py): `backend/app/database.py`

### Other components

- **Athlete**
- **FitNotes CSV**

## Connections

- Athlete → Dashboard views: uses
- FitNotes CSV → FitNotes endpoints: uploads
- Dashboard views → Dashboard cards: renders
- Dashboard views → Session and muscle views: renders
- Dashboard views → Exercise charts: renders
- Dashboard cards → API client: requests data
- Session and muscle views → API client: requests data
- Exercise charts → API client: requests data
- API client → FastAPI application: HTTP requests
- FastAPI application → FitNotes endpoints: dispatches
- FastAPI application → Dashboard endpoints: dispatches
- FitNotes endpoints → CSV ingestion: ingests CSV
- CSV ingestion → DuckDB access and views: writes logs
- Dashboard endpoints → Dashboard summaries: queries summaries
- Dashboard endpoints → Calendar queries: queries calendar
- Dashboard endpoints → Day detail and muscles: queries day detail
- Dashboard endpoints → Exercise history and projections: queries history
- Dashboard summaries → DuckDB access and views: queries
- Calendar queries → DuckDB access and views: queries
- Day detail and muscles → DuckDB access and views: queries
- Exercise history and projections → DuckDB access and views: queries
- DuckDB access and views → Workout analytics store: opens and initializes
- Dashboard endpoints → Analytics response models: validates responses
