# jef-sure/fit-visualizer architecture

> Architecture diagram of the GitHub repository jef-sure/fit-visualizer, 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/jef-sure/fit-visualizer
- Repository: https://github.com/jef-sure/fit-visualizer
- Video tour (about a minute): https://gitdiagram.com/jef-sure/fit-visualizer/video

## Overview

FIT Visualizer is a VS Code extension for viewing local FIT activities, analyzing training history, and optionally using Copilot for AI analysis. Its main workflow opens or indexes FIT files, parses and stores activity data, then presents charts, maps, segments, and comparisons in an interactive editor. The README also documents manual activities, heart-rate profiles, calibration, and bulk re-analysis. The sampled source supports the editor/chart and storage relationships; some deeper service wiring is inferred only from documented capabilities, so uncertain links are omitted.

Main entry points: [`activity-webview.js`](https://github.com/jef-sure/fit-visualizer/blob/main/activity-webview.js) (Activity editor), [`extension.js`](https://github.com/jef-sure/fit-visualizer/blob/main/extension.js) (Extension services), [`database-schema.js`](https://github.com/jef-sure/fit-visualizer/blob/main/database-schema.js) (Local activity database), [`commands.js`](https://github.com/jef-sure/fit-visualizer/blob/main/commands.js) (Commands and editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["VS Code Entry"]
  node_commands["Commands and editor<br/>[commands.js]"]
  node_extension["Extension services<br/>[extension.js]"]
end

subgraph group_activity["Activity Processing"]
  node_fitparser["FIT parsing<br/>[fit-files.js]"]
  node_activitymetrics["Activity summary"]
  node_segmentation["Segmentation and calibration<br/>[extension.js]"]
  node_manual["Manual activities<br/>[manual-activity.js]"]
end

subgraph group_presentation["Activity Explorer"]
  node_webview["Activity editor"]
  node_charts["Chart model and rendering<br/>[chart-model.js]"]
  node_chartdata["Chart data mapping<br/>[chart-data.js]"]
  node_chartsvg["SVG chart rendering<br/>[chart-svg.js]"]
  node_glossary["Localized glossary<br/>[glossary.js]"]
  node_localization["UI localization<br/>[ui-strings.js]"]
end

subgraph group_insights["Training Insights"]
  node_heartzones["Heart-rate zones<br/>[heart-rate.js]"]
  node_ai["AI analysis and comparison<br/>[analysis.js]"]
  node_history["History and records<br/>[extension.js]"]
end

subgraph group_persistence["Local Data"]
  node_database[("Local activity database<br/>[database-schema.js]")]
end

node_cyclist(("Cyclist"))
node_vscode["VS Code"]
node_fit["FIT files"]
node_copilot["Copilot model"]

node_cyclist -->|"opens extension"| node_vscode
node_vscode -->|"invokes commands"| node_commands
node_commands -->|"requests services"| node_extension
node_cyclist -->|"selects activity"| node_fit
node_commands -->|"opens or indexes"| node_fit
node_extension -->|"parses files"| node_fitparser
node_fitparser -->|"supplies records"| node_activitymetrics
node_extension -->|"computes segments"| node_segmentation
node_extension -->|"reads and writes"| node_database
node_activitymetrics -->|"stores summary data"| node_database
node_extension -->|"manages manual entries"| node_manual
node_manual -->|"stores activity"| node_database
node_commands -->|"opens editor"| node_webview
node_extension -->|"provides activity data"| node_webview
node_webview -->|"builds chart views"| node_charts
node_webview -->|"maps records"| node_chartdata
node_webview -->|"renders chart SVG"| node_chartsvg
node_charts -->|"extracts chart series"| node_chartdata
node_charts -->|"renders geometry"| node_chartsvg
node_webview -->|"computes zone display"| node_heartzones
node_webview -->|"localizes terms"| node_glossary
node_webview -->|"formats interface"| node_localization
node_extension -->|"requests analysis"| node_ai
node_ai -.->|"sends prompts"| node_copilot
node_extension -->|"loads training context"| node_history
node_history -->|"reads activity history"| node_database
node_ai -->|"persists analyses"| node_database
node_webview -->|"requests analysis or comparison"| node_extension
node_cyclist -->|"reviews activity"| node_webview

click node_commands "https://github.com/jef-sure/fit-visualizer/blob/main/commands.js"
click node_extension "https://github.com/jef-sure/fit-visualizer/blob/main/extension.js"
click node_fitparser "https://github.com/jef-sure/fit-visualizer/blob/main/fit-files.js"
click node_activitymetrics "https://github.com/jef-sure/fit-visualizer/blob/main/activity-summary.js"
click node_segmentation "https://github.com/jef-sure/fit-visualizer/blob/main/extension.js"
click node_manual "https://github.com/jef-sure/fit-visualizer/blob/main/manual-activity.js"
click node_webview "https://github.com/jef-sure/fit-visualizer/blob/main/activity-webview.js"
click node_charts "https://github.com/jef-sure/fit-visualizer/blob/main/chart-model.js"
click node_chartdata "https://github.com/jef-sure/fit-visualizer/blob/main/chart-data.js"
click node_chartsvg "https://github.com/jef-sure/fit-visualizer/blob/main/chart-svg.js"
click node_heartzones "https://github.com/jef-sure/fit-visualizer/blob/main/heart-rate.js"
click node_ai "https://github.com/jef-sure/fit-visualizer/blob/main/analysis.js"
click node_history "https://github.com/jef-sure/fit-visualizer/blob/main/extension.js"
click node_database "https://github.com/jef-sure/fit-visualizer/blob/main/database-schema.js"
click node_glossary "https://github.com/jef-sure/fit-visualizer/blob/main/glossary.js"
click node_localization "https://github.com/jef-sure/fit-visualizer/blob/main/ui-strings.js"

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_commands,node_extension toneBlue
class node_fitparser,node_activitymetrics,node_segmentation,node_manual toneAmber
class node_webview,node_charts,node_chartdata,node_chartsvg,node_glossary,node_localization toneMint
class node_heartzones,node_ai,node_history toneRose
class node_database,node_cyclist,node_vscode,node_fit,node_copilot toneIndigo
```

## Components

### VS Code Entry

- [Commands and editor](https://github.com/jef-sure/fit-visualizer/blob/main/commands.js): `commands.js`
- [Extension services](https://github.com/jef-sure/fit-visualizer/blob/main/extension.js): `extension.js`

### Activity Processing

- [FIT parsing](https://github.com/jef-sure/fit-visualizer/blob/main/fit-files.js): `fit-files.js`
- [Activity summary](https://github.com/jef-sure/fit-visualizer/blob/main/activity-summary.js): `activity-summary.js`
- [Segmentation and calibration](https://github.com/jef-sure/fit-visualizer/blob/main/extension.js): `extension.js`
- [Manual activities](https://github.com/jef-sure/fit-visualizer/blob/main/manual-activity.js): `manual-activity.js`

### Activity Explorer

- [Activity editor](https://github.com/jef-sure/fit-visualizer/blob/main/activity-webview.js): `activity-webview.js`
- [Chart model and rendering](https://github.com/jef-sure/fit-visualizer/blob/main/chart-model.js): `chart-model.js`
- [Chart data mapping](https://github.com/jef-sure/fit-visualizer/blob/main/chart-data.js): `chart-data.js`
- [SVG chart rendering](https://github.com/jef-sure/fit-visualizer/blob/main/chart-svg.js): `chart-svg.js`
- [Localized glossary](https://github.com/jef-sure/fit-visualizer/blob/main/glossary.js): `glossary.js`
- [UI localization](https://github.com/jef-sure/fit-visualizer/blob/main/ui-strings.js): `ui-strings.js`

### Training Insights

- [Heart-rate zones](https://github.com/jef-sure/fit-visualizer/blob/main/heart-rate.js): `heart-rate.js`
- [AI analysis and comparison](https://github.com/jef-sure/fit-visualizer/blob/main/analysis.js): `analysis.js`
- [History and records](https://github.com/jef-sure/fit-visualizer/blob/main/extension.js): `extension.js`

### Local Data

- [Local activity database](https://github.com/jef-sure/fit-visualizer/blob/main/database-schema.js): `database-schema.js`

### Other components

- **Cyclist**
- **VS Code**
- **FIT files**
- **Copilot model**

## Connections

- Cyclist → VS Code: opens extension
- VS Code → Commands and editor: invokes commands
- Commands and editor → Extension services: requests services
- Cyclist → FIT files: selects activity
- Commands and editor → FIT files: opens or indexes
- Extension services → FIT parsing: parses files
- FIT parsing → Activity summary: supplies records
- Extension services → Segmentation and calibration: computes segments
- Extension services → Local activity database: reads and writes
- Activity summary → Local activity database: stores summary data
- Extension services → Manual activities: manages manual entries
- Manual activities → Local activity database: stores activity
- Commands and editor → Activity editor: opens editor
- Extension services → Activity editor: provides activity data
- Activity editor → Chart model and rendering: builds chart views
- Activity editor → Chart data mapping: maps records
- Activity editor → SVG chart rendering: renders chart SVG
- Chart model and rendering → Chart data mapping: extracts chart series
- Chart model and rendering → SVG chart rendering: renders geometry
- Activity editor → Heart-rate zones: computes zone display
- Activity editor → Localized glossary: localizes terms
- Activity editor → UI localization: formats interface
- Extension services → AI analysis and comparison: requests analysis
- AI analysis and comparison → Copilot model: sends prompts
- Extension services → History and records: loads training context
- History and records → Local activity database: reads activity history
- AI analysis and comparison → Local activity database: persists analyses
- Activity editor → Extension services: requests analysis or comparison
- Cyclist → Activity editor: reviews activity
