# hasaneyldrm/exercises-dataset architecture

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

- Interactive diagram: https://gitdiagram.com/hasaneyldrm/exercises-dataset
- Repository: https://github.com/hasaneyldrm/exercises-dataset

## Overview

1. **Repository purpose**
   - This is a **static exercise dataset package**, not a server-side application.
   - The core asset is `data/exercises.json`, backed by 1,324 thumbnail images in `images/` and 1,324 animation GIFs in `videos/`.
   - The repo also includes two browser-based tools: `index.html` for browsing the dataset and `setup.html` for developer onboarding.

2. **Primary data model**
   - The architecture centers on a single JSON array of exercise records.
   - Each record links exercise metadata to two media paths: a `.jpg` thumbnail and a `.gif` animation.
   - The dataset carries multilingual instruction content in English, Spanish, Italian, and Turkish, so the JSON file is the authoritative source for both content and media references.

3. **Content and media separation**
   - `data/exercises.json` stores structured exercise attributes such as category, body part, equipment, target muscle, secondary muscles, and instructions.
   - `images/` and `videos/` are purely passive asset stores with 1:1 naming alignment to the records.
   - The naming convention `{index}-{exerciseId}.{ext}` is what binds the metadata record to its visual assets.

4. **Client-side browser subsystem**
   - `index.html` is a standalone, no-server-needed exercise explorer.
   - It performs live search, filtering, and incremental rendering over the dataset in the browser.
   - The user flow is: load JSON → query/filter in memory → render exercise cards → open a detail view with instructions and GIF media.

5. **Interactive detail view**
   - The browser UI appears to use the thumbnail grid as the primary navigation surface.
   - Clicking a card surfaces the exercise’s full metadata, including the GIF animation and multilingual instructions.
   - This makes the dataset usable as an offline catalog without any API layer.

6. **Developer onboarding subsystem**
   - `setup.html` is a second client-side tool focused on integration guidance rather than end-user browsing.
   - It helps developers translate the dataset into a database-backed application by generating database schema examples and insertion content in-browser.
   - It also provides API client snippets and prompt templates for generating backend services with LLMs.

7. **Data export and integration flow**
   - The intended data flow for downstream use is: open `data/exercises.json` or generate SQL from the browser guide → import into a relational database → expose through a custom API.
   - The repo itself does not implement that API; it documents how to build one.
   - This makes the repository a source dataset and reference UI, not a full application stack.

8. **Supported downstream targets**
   - The setup guide explicitly targets common backend and database combinations: SQL Server, PostgreSQL, MySQL, SQLite, and frameworks such as Express.js, FastAPI, ASP.NET Core, Spring Boot, Laravel, and Gin.
   - Those technologies are not runtime dependencies of the repo itself, but they define the intended integration boundaries.
   - The repo is therefore framework-agnostic at the storage/API layer.

9. **External data provenance**
   - The dataset originates from **ExerciseDB v1 by AscendAPI** and was re-hosted via a Kaggle dataset source.
   - The repo adds translations, cleanup, and the browser/setup HTML tools on top of the original exercise data.
   - Media and base exercise content remain externally attributable and are governed by the upstream terms noted in the README.

10. **Runtime characteristics**
   - Everything important runs as **static browser content**: HTML, JSON, JPG, GIF.
   - There is no build step, no package manager, and no local database required for the included tools.
   - This makes the architecture simple: file-based distribution with client-side consumption.

11. **Repository boundary**
   - The repo’s boundary ends at asset delivery and browser-based interaction.
   - It does not store user-generated data, authentication state, or server-side business logic.
   - Any persistence, indexing, search backend, or API is expected to live in a separate application built by consumers of this dataset.

12. **Diagram-friendly summary**
   - A good architecture diagram would show:
     - a central JSON dataset,
     - two asset folders for thumbnails and animations,
     - a browser-based exercise explorer consuming both,
     - a browser-based setup guide producing SQL/API integration guidance,
     - and an external upstream source feeding the dataset content.

Main entry points: [`data/exercises.json`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json) (Exercises JSON), [`index.html`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html) (Exercise Explorer), [`setup.html`](https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html) (Setup Guide), [`images`](https://github.com/hasaneyldrm/exercises-dataset/tree/main/images) (Thumbnails)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_content["Content Store"]
  node_exercise_json["Exercises JSON<br/>dataset<br/>[exercises.json]"]
  node_image_assets[("Thumbnails<br/>image store")]
  node_video_assets[("Animations<br/>gif store")]
  node_record_schema["Exercise Record<br/>data model<br/>[exercises.json]"]
  node_media_binding{{"Naming Link<br/>convention"}}
  node_translations["Translations<br/>localized content<br/>[exercises.json]"]
end

subgraph group_ui["Browser Tools"]
  node_index_html["Exercise Explorer<br/>browser app<br/>[index.html]"]
  node_search_filter["Search & Filter<br/>ui logic<br/>[index.html]"]
  node_card_grid["Card Grid<br/>ui rendering<br/>[index.html]"]
  node_detail_view["Detail View<br/>ui panel<br/>[index.html]"]
  node_setup_html["Setup Guide<br/>browser tool<br/>[setup.html]"]
  node_sql_gen["SQL Examples<br/>integration guide<br/>[setup.html]"]
  node_api_snippets["API Snippets<br/>integration guide<br/>[setup.html]"]
  node_prompt_templates["Prompt Templates<br/>llm guide<br/>[setup.html]"]
end

subgraph group_external["External Sources"]
  node_upstream_source["ExerciseDB<br/>upstream dataset"]
  node_downstream_app[("Custom Backend<br/>consumer target")]
end

node_upstream_source -->|"feeds"| node_exercise_json
node_exercise_json -->|"defines"| node_record_schema
node_exercise_json -->|"contains"| node_translations
node_record_schema -->|"references"| node_media_binding
node_media_binding -->|"matches"| node_image_assets
node_media_binding -->|"matches"| node_video_assets
node_index_html -->|"uses"| node_search_filter
node_search_filter -->|"renders"| node_card_grid
node_card_grid -->|"opens"| node_detail_view
node_index_html -->|"loads"| node_exercise_json
node_index_html -->|"shows"| node_image_assets
node_index_html -->|"plays"| node_video_assets
node_setup_html -->|"guides"| node_sql_gen
node_setup_html -->|"guides"| node_api_snippets
node_setup_html -->|"guides"| node_prompt_templates
node_setup_html -->|"uses"| node_exercise_json
node_sql_gen -->|"targets"| node_downstream_app
node_api_snippets -->|"targets"| node_downstream_app
node_prompt_templates -->|"supports"| node_downstream_app

click node_exercise_json "https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json"
click node_image_assets "https://github.com/hasaneyldrm/exercises-dataset/tree/main/images"
click node_video_assets "https://github.com/hasaneyldrm/exercises-dataset/tree/main/videos"
click node_record_schema "https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json"
click node_translations "https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json"
click node_index_html "https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html"
click node_search_filter "https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html"
click node_card_grid "https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html"
click node_detail_view "https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html"
click node_setup_html "https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html"
click node_sql_gen "https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html"
click node_api_snippets "https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html"
click node_prompt_templates "https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html"

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_exercise_json,node_image_assets,node_video_assets,node_record_schema,node_media_binding,node_translations toneBlue
class node_index_html,node_search_filter,node_card_grid,node_detail_view,node_setup_html,node_sql_gen,node_api_snippets,node_prompt_templates toneAmber
class node_upstream_source,node_downstream_app toneMint
```

## Components

### Content Store

Authoritative exercise data and media assets

- [Exercises JSON](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json): dataset · Authoritative array of exercise records with metadata, translations, and media references · `data/exercises.json`
- [Thumbnails](https://github.com/hasaneyldrm/exercises-dataset/tree/main/images): image store · Static JPG thumbnails aligned 1:1 with exercise records · `images`
- [Animations](https://github.com/hasaneyldrm/exercises-dataset/tree/main/videos): gif store · Static GIF exercise animations aligned 1:1 with exercise records · `videos`
- [Exercise Record](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json): data model · Per-exercise fields such as category, body part, equipment, muscles, instructions, and media paths · `data/exercises.json`
- **Naming Link**: convention · Index-plus-id filename convention binding records to thumbnail and GIF assets
- [Translations](https://github.com/hasaneyldrm/exercises-dataset/blob/main/data/exercises.json): localized content · Multilingual instruction content in English, Spanish, Italian, and Turkish · `data/exercises.json`

### Browser Tools

Static HTML tools for browsing and integration guidance

- [Exercise Explorer](https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html): browser app · Standalone offline browser for search, filtering, cards, and detail views · `index.html`
- [Search & Filter](https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html): ui logic · Live query and filter over the dataset in memory · `index.html`
- [Card Grid](https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html): ui rendering · Incremental rendering of exercise cards as the main navigation surface · `index.html`
- [Detail View](https://github.com/hasaneyldrm/exercises-dataset/blob/main/index.html): ui panel · Expanded exercise view with full metadata, instructions, and GIF animation · `index.html`
- [Setup Guide](https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html): browser tool · Developer onboarding page for database and API integration guidance · `setup.html`
- [SQL Examples](https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html): integration guide · In-browser schema and insert-content examples for relational databases · `setup.html`
- [API Snippets](https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html): integration guide · Client snippets for building a custom backend API around the dataset · `setup.html`
- [Prompt Templates](https://github.com/hasaneyldrm/exercises-dataset/blob/main/setup.html): llm guide · Templates for generating backend services and integrations with LLMs · `setup.html`

### External Sources

Upstream provenance and downstream consumer targets

- **ExerciseDB**: upstream dataset · Original exercise data source re-hosted and translated in this repo
- **Custom Backend**: consumer target · External database-backed app or API built from the dataset

## Connections

- ExerciseDB → Exercises JSON: feeds · Upstream exercise content is curated into the repository dataset
- Exercises JSON → Exercise Record: defines · The JSON array is organized as structured exercise records
- Exercises JSON → Translations: contains · Authoritative multilingual instructions live in the dataset
- Exercise Record → Naming Link: references · Records point to media through the shared naming convention
- Naming Link → Thumbnails: matches · Thumbnail filenames align to record identifiers
- Naming Link → Animations: matches · GIF filenames align to record identifiers
- Exercise Explorer → Search & Filter: uses · Browser explorer performs in-memory search and filtering
- Search & Filter → Card Grid: renders · Filtered results are shown as cards
- Card Grid → Detail View: opens · Selecting a card reveals the detailed exercise view
- Exercise Explorer → Exercises JSON: loads · The explorer reads the dataset directly in the browser
- Exercise Explorer → Thumbnails: shows · Cards use thumbnails for browsing
- Exercise Explorer → Animations: plays · Detail view displays the exercise animation GIF
- Setup Guide → SQL Examples: guides · Developer onboarding includes schema and insert examples
- Setup Guide → API Snippets: guides · Developer onboarding includes backend/API client snippets
- Setup Guide → Prompt Templates: guides · Developer onboarding includes LLM prompts for service generation
- Setup Guide → Exercises JSON: uses · Setup examples are derived from the authoritative dataset
- SQL Examples → Custom Backend: targets · Generated SQL is intended for import into an external database-backed app
- API Snippets → Custom Backend: targets · API guidance points toward a separate consumer application
- Prompt Templates → Custom Backend: supports · Prompt templates help generate the external backend implementation
