Skip to content

A command-line tool for parsing, matching, and storing Stryd running data into a SQLite database.

License

Notifications You must be signed in to change notification settings

gchris79/Stryder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

59 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Stryder πŸƒβ€β™‚οΈ

Local Running Data Analysis β€” CLI & Web Viewer

Stryder is a local-first running data analysis project built around Stryd and Garmin CSV exports.

It is designed with a clear separation of concerns:

  • Stryder Core handles parsing, matching, normalization, and metrics.
  • Stryder CLI is responsible for importing data and generating reports.
  • Stryder Web (Django) provides a read-only web viewer on top of the same database.

The goal of Stryder is not to replace commercial platforms, but to give runners full ownership and transparency over their training data while serving as a learning project in Python and software architecture.


🧱 Architecture Overview

Stryder is structured as a multi-layer application:

🧠 Stryder Core

  • Shared business logic used by all interfaces
  • CSV parsing and normalization
  • Timezone-aware Garmin ↔ Stryd matching
  • Canonical metrics and summaries
  • SQLite database schema

⌨️ Stryder CLI

  • Primary entry point for data import
  • Batch and single-run processing
  • Weekly and custom summaries
  • CLI tables and exported plots

🌐 Stryder Web (Django)

  • Local web viewer running on Django
  • Single run detailed reports with graphs
  • Custom date range reports
  • Interactive axis selection
  • Read-only by design (no imports via web)

The CLI and Web interface operate on the same SQLite database, ensuring consistency across views.


πŸ“½οΈ Demo (Django views)

1. Custom range run view

View your stored runs filtering them by custom dates or/and keywords.

Custom range run view


2. Single run summary view

Visualize your training load with plots using selectable axes.

Single Run Summary View



πŸ“½οΈ Demo (CLI)

1. Weekly & Rolling Reports

Generate weekly reports with distance, avg HR, power, and duration.


2. Visual Reports

Visualize your training load with automatic plots.

Weekly Plot


3. Detailed Views

Inspect any run in detail with normalized workout names, timestamps, and metrics.


✨ Features

Core

  • Timezone-aware Stryd ↔ Garmin matching (Β±60s tolerance)
  • Normalized workout naming
  • Canonical metrics and summaries
  • Local SQLite storage

CLI

  • Interactive menu-based interface
  • Batch import of Stryd CSV files
  • Garmin activity matching
  • Weekly and custom summaries
  • Single-run detailed reports
  • Exportable visual charts

Web

  • Single run detailed reports
  • Custom date range analysis
  • Interactive X/Y axis selection
  • Clean, page-based layout

πŸ“„ Files You Need

Before using Stryder, make sure you have the following:

βœ… Stryd CSV Files

These are your detailed per-run files, exported from Stryd PowerCenter or the mobile app. Each file contains second-by-second metrics such as pace, power, cadence, etc.

πŸ—‚ Export them in bulk and place them all in a folder. Each file typically has a long numeric filename, like:

5059274362093568.csv, 5073428460371968.csv

πŸ’‘ You’ll be prompted to select this folder during batch import.

βœ… Garmin CSV Export

This is a single CSV file containing summary data for your Garmin runs β€” one row per workout β€” with columns like start time, duration, and distance.

To download it:

  1. Visit Garmin Connect
  2. Go to your activities list
  3. Export all (or running-only) activities as a .csv file

It will be named something like:

activities.csv

πŸ’‘ This is the file you'll be prompted to provide as the "Garmin file."


⚠️ The app uses the start time from each Stryd file to match it with the correct Garmin run. The match is made using timezone-aware comparison with a ±60 second tolerance.


▢️ Getting Started

1️⃣ Install dependencies

pip install -r requirements.txt

2️⃣ Run the CLI (data import & reports)

python -m stryder_cli.cli_main

The CLI is responsible for:

  • Importing Stryd and Garmin CSV files
  • Building the local SQLite database
  • Generating CLI-based reports

3️⃣ Run the Web Viewer

python manage.py runserver

The web interface:

  • Reads from the same SQLite database
  • Provides interactive visual reports
  • Does not modify or import data

πŸ›  Tech Stack

Core

  • Python 3.11
  • SQLite
  • Pandas

CLI

  • Matplotlib
  • Tabulate

Web

  • Django
  • HTML / CSS (Django templates)
  • Matplotlib (server-side rendering)

The same SQLite database and core logic are shared between the CLI and Web interfaces.


🧭 Roadmap

These are planned or possible features for future versions of Stryder:

  • Basic CLI with Stryd + Garmin import

  • Timezone prompt and matching tolerance

  • Skipping unmatched runs for later review

  • Store last-used file paths

  • Add CLI commands for viewing runs and summaries

  • Weekly/monthly mileage summaries

  • Graphs: power, distance, duration and HR over time

  • Web Viewer (Django)

  • Text-based UI (Textual) as an optional interface on top of Stryder Core

  • Advanced run comparisons

  • Weekly / monthly / yearly presets in the web interface

  • Segment-based analysis within runs

  • Export filtered data to CSV

  • Support FIT / TCX / GPX parsing

πŸ‘€ Author

Giorgos Chrysopoulos

Junior Python Developer & Hobbyist Runner

πŸ”— LinkedIn

πŸ’‘ Want to contribute? Open an issue or fork the repo!


πŸ“ƒ License

MIT License β€” see the LICENSE file.

About

A command-line tool for parsing, matching, and storing Stryd running data into a SQLite database.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published