# anthonyduenez/stridescribe architecture

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

## Overview

StrideScribe is an iOS running tracker. The user starts from the map screen, passes through a countdown, tracks a run with live time, pace, distance, and location, then sees a summary; completed runs can be browsed, inspected on a map, and deleted. The tracker owns run state, location updates, calculations, and UserDefaults persistence. The README also names workout logging and local persistence; GPS route display is visible in the sampled views. Cloud sync, analytics, Health, and social features are future plans, not implemented capabilities. Edges reflect shown calls or README claims.

Main entry points: [`StrideScribe/runTracker.swift`](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runTracker.swift) (Run tracker), [`StrideScribe/ContentView.swift`](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/ContentView.swift) (Map and start), [`StrideScribe/StrideScribeApp.swift`](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StrideScribeApp.swift) (App entry), [`StrideScribe/StrideTabView.swift`](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StrideTabView.swift) (Tab navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App navigation"]
  node_app_entry["App entry"]
  node_tabs["Tab navigation"]
  node_home["Map and start<br/>[ContentView.swift]"]
end

subgraph group_tracking["Run tracking"]
  node_countdown["Start countdown"]
  node_live_run["Live run controls<br/>[runView.swift]"]
  node_summary["Run summary<br/>[StopView.swift]"]
end

subgraph group_history["Run history"]
  node_activity["Activity history<br/>[ActivityView.swift]"]
  node_detail["Run detail map"]
end

subgraph group_state["Run state and storage"]
  node_tracker["Run tracker<br/>[runTracker.swift]"]
  node_run_record["Run record model<br/>[runTracker.swift]"]
  node_local_store[("UserDefaults store")]
end

node_runner(("Runner"))
node_location_service["iOS location service"]

node_runner -->|"launches"| node_app_entry
node_app_entry -->|"creates"| node_tracker
node_app_entry -->|"shows"| node_tabs
node_tabs -->|"shows"| node_home
node_tabs -->|"shows"| node_activity
node_home -->|"presents"| node_countdown
node_countdown -->|"starts run"| node_tracker
node_home -->|"presents"| node_live_run
node_home -->|"presents"| node_summary
node_live_run -->|"controls run"| node_tracker
node_tracker -->|"requests updates"| node_location_service
node_location_service -->|"sends locations"| node_tracker
node_tracker -->|"creates records"| node_run_record
node_tracker -->|"reads and writes"| node_local_store
node_activity -->|"deletes runs"| node_tracker
node_activity -->|"opens run"| node_detail

click node_app_entry "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StrideScribeApp.swift"
click node_tabs "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StrideTabView.swift"
click node_home "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/ContentView.swift"
click node_countdown "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/CountdownView.swift"
click node_live_run "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runView.swift"
click node_summary "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StopView.swift"
click node_tracker "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runTracker.swift"
click node_run_record "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runTracker.swift"
click node_activity "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/ActivityView.swift"
click node_detail "https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/RunDetailView.swift"

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_entry,node_tabs,node_home toneBlue
class node_countdown,node_live_run,node_summary toneAmber
class node_activity,node_detail toneMint
class node_tracker,node_run_record,node_local_store toneRose
class node_runner,node_location_service toneIndigo
```

## Components

### App navigation

- [App entry](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StrideScribeApp.swift): `StrideScribe/StrideScribeApp.swift`
- [Tab navigation](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StrideTabView.swift): `StrideScribe/StrideTabView.swift`
- [Map and start](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/ContentView.swift): `StrideScribe/ContentView.swift`

### Run tracking

- [Start countdown](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/CountdownView.swift): `StrideScribe/CountdownView.swift`
- [Live run controls](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runView.swift): `StrideScribe/runView.swift`
- [Run summary](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/StopView.swift): `StrideScribe/StopView.swift`

### Run history

- [Activity history](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/ActivityView.swift): `StrideScribe/ActivityView.swift`
- [Run detail map](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/RunDetailView.swift): `StrideScribe/RunDetailView.swift`

### Run state and storage

- [Run tracker](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runTracker.swift): `StrideScribe/runTracker.swift`
- [Run record model](https://github.com/anthonyduenez/stridescribe/blob/main/StrideScribe/runTracker.swift): `StrideScribe/runTracker.swift`
- **UserDefaults store**

### Other components

- **Runner**
- **iOS location service**

## Connections

- Runner → App entry: launches (evidence: `README.md`)
- App entry → Run tracker: creates (evidence: `StrideScribe/StrideScribeApp.swift`)
- App entry → Tab navigation: shows (evidence: `StrideScribe/StrideScribeApp.swift`)
- Tab navigation → Map and start: shows (evidence: `StrideScribe/StrideTabView.swift`)
- Tab navigation → Activity history: shows (evidence: `StrideScribe/StrideTabView.swift`)
- Map and start → Start countdown: presents (evidence: `StrideScribe/ContentView.swift`)
- Start countdown → Run tracker: starts run (evidence: `StrideScribe/CountdownView.swift`)
- Map and start → Live run controls: presents (evidence: `StrideScribe/ContentView.swift`)
- Map and start → Run summary: presents (evidence: `StrideScribe/ContentView.swift`)
- Live run controls → Run tracker: controls run (evidence: `StrideScribe/runView.swift`)
- Run tracker → iOS location service: requests updates (evidence: `StrideScribe/runTracker.swift`)
- iOS location service → Run tracker: sends locations (evidence: `StrideScribe/runTracker.swift`)
- Run tracker → Run record model: creates records (evidence: `StrideScribe/runTracker.swift`)
- Run tracker → UserDefaults store: reads and writes (evidence: `StrideScribe/runTracker.swift`)
- Activity history → Run tracker: deletes runs (evidence: `StrideScribe/ActivityView.swift`)
- Activity history → Run detail map: opens run (evidence: `StrideScribe/ActivityView.swift`)
