Skip to content

Releases: dschoepel/stats-for-strava-config-tool

v1.2.6

10 Mar 15:18

Choose a tag to compare

What's New

Added

  • Most Recent Milestones widget — added mostRecentMilestones to the default widget definitions. This widget displays a timeline view of your key achievements and milestones over time. Configurable via numberOfMilestonesToDisplay (default: 5). Added to the default dashboard layout at 33% width.

    Example config.yaml usage:

    appearance:
      dashboard:
        layout:
          - { 'widget': 'mostRecentMilestones', 'width': 33, 'enabled': true, 'config': { 'numberOfMilestonesToDisplay': 5 } }

Documentation

  • Updated widget definitions help docs to include Most Recent Milestones and the previously undocumented Athlete Profile widget in the default widgets table. Updated default widget count to 23.

Full Changelog: https://github.com/dschoepel/stats-for-strava-config-tool/blob/main/CHANGELOG.md

v1.2.5

06 Mar 15:54
ad0077a

Choose a tag to compare

What's Changed

Docker Image Optimization

  • Enabled Next.js output: 'standalone' mode — production image is now 129 MB, down from ~2.05 GB (~94% reduction). The runtime stage no longer runs npm ci; only the traced standalone output, static assets, and public directory are copied.
  • Added root-level .dockerignore to reduce build context (excludes .git, node_modules, runner/, helper/, docs/, etc.).
  • Updated docker/supervisord.conf to launch Next.js via node server.js instead of npm start, matching the standalone entrypoint.
  • Fixed standalone server hostname binding: explicitly set HOSTNAME=0.0.0.0 in supervisord so Next.js listens on all interfaces (Docker injects HOSTNAME=<container-id> by default, which caused 502 Bad Gateway errors with the nginx proxy).

Security Updates

  • dompurify (GHSA-v2wj-7wpq-c8vv, CVSS 6.1 XSS) — forced resolution to >=3.3.2 via overrides in package.json; the vulnerable transitive dependency pulled in by monaco-editor is now pinned to the patched version.
  • bcryptjs upgraded 2.4.33.0.3 — full ESM rewrite; API signatures (hash, compare) are unchanged. Verified via login/logout testing.
  • framer-motion updated to 12.35.0 (patch).

Full Changelog

https://github.com/dschoepel/stats-for-strava-config-tool/blob/main/CHANGELOG.md

v1.2.4

04 Mar 17:08
09e9266

Choose a tag to compare

What's New

Added

  • Recording Devices section in Gear Config — track GPS watches, bike computers, and other recording devices with purchase prices to calculate cost-per-workout. Device ID is found via the question-mark icon on the recording device page in the app.
  • New version available indicator — the sidebar footer now checks GitHub Releases (server-side, cached 1 hour) and surfaces update availability:
    • Expanded sidebar: orange "vX.X.X available" link below the current version
    • Collapsed sidebar: orange dot badge on the version text
    • Notification panel: one-time "New version vX.X.X is available!" notification with a "View Release Notes" action that opens the release in a new tab
    • Deduplication via localStorage ensures the notification fires only once per new release version

Fixed

  • Normalized the retired field handling for gear items and fixed async settings loading in the gear configuration editor.

Chore

  • Enforced LF line endings project-wide via .gitattributes.
  • Added docker-compose.override.yml to .gitignore to prevent local Docker overrides from being committed.

Full Changelog: https://github.com/dschoepel/stats-for-strava-config-tool/blob/main/CHANGELOG.md

v1.2.3

01 Mar 20:00
0c511c2

Choose a tag to compare

What's Changed

Added

  • Optional API Key for AI Configuration — The API key field in the AI Provider Configuration section is now gated behind a Use API Key checkbox, making it optional rather than unconditionally required.
    • When unchecked: the API key field is hidden and the key is saved as blank in YAML (key: )
    • When checked: the API key field appears and must be non-empty before saving
    • Auto-initializes on load: if an existing key is present in YAML the checkbox is automatically checked; if the key is blank it remains unchecked
    • The internal useApiKey flag is stripped before saving and never appears in the YAML output

Behavior Summary

Checkbox state Key field Validation YAML output
Unchecked Hidden None key: (blank)
Checked + key empty Shown, error Required message shown Blocked from saving
Checked + key entered Shown, valid None key: sk-abc123...
Loaded with existing key Auto-checked N/A Key preserved
Loaded with blank key Auto-unchecked N/A Key stays blank

Full Changelog: https://github.com/dschoepel/stats-for-strava-config-tool/blob/main/CHANGELOG.md

1.2.2 — Add New Strava Sports Types, Vulnerability Fix

22 Feb 20:46
7475b8f

Choose a tag to compare

Release Date: February 22, 2026

This patch release resolves a local storage vulnerability and adds new Strava sport types to the default list.

ℹ️- If the new sports types don't appear in the Settings -> Sports List, you have two options:

  1. Add them manually
  2. Delete the file called strava-sports-by-category.yaml in ./config/settings/ folder. Restart the docker container for the stats-for-strava-config-tool and it will be recreated with the new sport types.

Security

  • Upgraded next to 16.1.6 to address security advisories affecting earlier versions.

Changed

  • Replaced direct localStorage access with centralized src/utils/browserStorage.js helpers to ensure SSR safety.
  • Marked client-only components with the "use client" directive where required.

Added

  • Added default sports to INITIAL_SPORTS_LIST: Basketball, Volleyball, Cricket, Dance, Padel.

Fixed

  • Resolved server-side ReferenceError caused by localStorage usage during build; project builds successfully.

v1.2.1 - Code Quality and Stability Improvements

27 Jan 19:26
3d23bdf

Choose a tag to compare

Release Date: January 27, 2026

This patch release resolves lint errors, React Fast Refresh warnings, and improves code quality across the configuration tool.

🐛 Bug Fixes

  • React Fast Refresh Compliance: Extracted ConfigContext and useConfig hook to separate file to eliminate Fast Refresh warnings in Next.js
  • DaemonConfigEditor: Removed unused dialog handler functions and fixed React hook dependency issues
  • State Management: Fixed handleRemoveCronJob to use functional setState pattern, preventing potential race conditions
  • Error Handling: Added proper error logging in widget definitions initialization
  • Error Suppression: Enhanced AppShell to suppress known prop warnings from react-js-cron library

✨ Improvements

  • User Guidance: Added reminder in Daemon configuration to restart daemon container after schedule changes
  • Widget Support: Added athleteProfile widget definition to widget definitions manager

🔧 Technical Changes

  • Updated 11 component imports to use new useConfig.js export
  • Wrapped cronJobs in useMemo with proper dependencies
  • Improved hook dependency arrays across DaemonConfigEditor

📦 Upgrade Notes

No breaking changes. This release is fully backward compatible with v1.2.0.

Docker Image: ghcr.io/jonocairns/stats-for-strava-config-tool:v1.2.1


Full Changelog: https://github.com/[your-repo]/compare/v1.2.0...v1.2.1

v1.2.0 — SFS Console Feature & Documentation Update

27 Jan 17:39

Choose a tag to compare

Release Date: 2026-01-26

This major release introduces the SFS Console — a complete system for executing Statistics for Strava Symfony console commands directly from the web interface. It also includes a comprehensive documentation restructure and numerous bug fixes.

Highlights

  • 🖥️ SFS Console — Run Statistics for Strava commands from a terminal-like UI
  • 🔒 Two-Container Security Architecture — Secure command execution with validation separation
  • 📚 Restructured Documentation — Cleaner README with dedicated guides in docs/
  • 🐛 Critical Bug Fixes — NumberInput multi-digit typing, session security improvements

What's New

SFS Console Feature

A terminal-like interface for running Statistics for Strava Symfony console commands without SSH access:

  • Real-time streaming — Live output via Server-Sent Events (SSE)
  • Command allowlist — Configurable list of safe commands in console-commands.yaml
  • Command history — Track past executions with status badges
  • Log management — View, download, and delete command execution logs
  • Command discovery — Auto-detect available commands from the container
  • Parameter support — Pass arguments to commands
  • Stop functionality — Properly terminate running commands
  • Navigation protection — Prevents accidental page leave during execution

Two-Container Security Model

Secure architecture separating validation from execution:

Container Role
stats-cmd-runner Validates commands against allowlist, proxies requests. No Docker socket access.
stats-cmd-helper Executes validated commands via docker exec. Has Docker socket access.

Other New Features

  • Resting Heart Rate — Track resting HR history in the Athlete section
  • Days Used Unit — New gear maintenance tracking option
  • Currency Input — Formatted currency input for gear pricing
  • Token Refresh — New /api/auth/refresh endpoint for extending sessions

Documentation Improvements

Restructured documentation for better usability:

Document Description
README.md Streamlined quick start (~150 lines)
docs/INSTALLATION.md Complete installation guide (Docker, Standalone, Nginx)
docs/FEATURES.md Detailed feature documentation
docs/SFS-CONSOLE-SETUP.md SFS Console setup guide
docs/TROUBLESHOOTING.md Consolidated FAQ and troubleshooting
docs/AUTHENTICATION.md Authentication and security details

Bug Fixes

  • NumberInput Bug — Fixed critical Chakra UI v3 issue where typing multi-digit numbers resulted in corrupted values. Created SafeNumberInput wrapper component.
  • Session Security — SESSION_SECRET now regenerates on password change, invalidating all existing tokens
  • Configuration Integrity — Fixed issue where athlete section was incorrectly merged into config.yaml in split-file mode
  • Sports List — Fixed file detection and auto-repopulation on startup when file is empty
  • Token Error Codes — Improved distinction between TOKEN_EXPIRED and TOKEN_INVALID errors
  • Log Directory — Fixed path resolution in download-log API

Changed

  • Container Names — Renamed for brand clarity:
    • strava-runnerstats-cmd-runner
    • strava-command-helperstats-cmd-helper
    • STRAVA_RUNNER_URLSTATS_CMD_RUNNER_URL
  • Default View — Configuration menu collapsed by default for cleaner initial view
  • Dark Mode — Improved styling consistency throughout the application

Technical Changes

New API Routes

Route Purpose
GET /api/strava-console Runner health check
GET /api/strava-console/discover Command discovery
POST /api/strava-console/stop Stop running command
GET /api/console-logs List command logs
GET /api/download-log Download log files
POST /api/auth/refresh Token refresh

Component Refactoring

  • StravaConsole split into 14 focused sub-components
  • useStravaConsole hook split into 5 domain-specific hooks
  • Console error boundary for graceful error recovery
  • Comprehensive mobile responsiveness

Upgrade Notes

For Existing Users

  1. Pull the latest images:

    docker compose pull
  2. If using SFS Console, add the new services to your docker-compose.yml:

  3. Update environment variables if you had the old names:

    • STRAVA_RUNNER_URLSTATS_CMD_RUNNER_URL
  4. Restart your containers:

    docker compose up -d

Breaking Changes

None — all changes are additive. SFS Console is optional and disabled by default.


Container Images

Image Tag
ghcr.io/dschoepel/stats-for-strava-config-tool v1.2.0, latest
ghcr.io/dschoepel/stats-cmd-runner v1.2.0, latest
ghcr.io/dschoepel/stats-cmd-helper v1.2.0, latest

Full Changelog

See CHANGELOG.md for complete version history.

Full Changelog: v1.0.1...v1.2.0

v1.0.1 - Add Resting Heart Rate and Days Used

19 Jan 21:45
5f26c2c

Choose a tag to compare

[1.0.1] — 2026-01-19

Added

  • Resting Heart Rate Configuration: Added support for tracking resting heart rate history in the Athlete section
    • New RestingHeartRateEditor component for managing resting HR values over time
    • Integrated with athlete configuration schema
  • Gear Maintenance Enhancement: Added "days used" as a new unit option for tracking gear usage
    • Provides more flexible tracking options alongside existing distance-based units

Fixed

  • Configuration Integrity: Resolved critical issue where athlete section content was being merged back into config.yaml when saving general section, despite athlete being in a separate config-general-athlete.yaml file
    • Fixed split file save logic to properly exclude nested sections from parent file
    • Ensures clean separation of configuration sections across split files
    • Added validation to ensure heart rate zones do not overlap or have gaps between them
  • Code Quality: Resolved lint errors in AthleteConfigEditor component
    • Removed React Hooks from inside render prop callback
    • Cleaned up unused imports and variables

Changed

  • Updated configuration schemas to support new resting heart rate field
  • Enhanced gear maintenance schema with additional unit option

v1.0.0 — Initial Release of the Visual Configuration Editor for Stats for Strava

18 Jan 23:36
af0222f

Choose a tag to compare

Logo showing orange gear on white Initial Release — v1.0.0

This is the first official release of the Stats for Strava – Configuration Tool, a web-based companion application that makes configuring your Statistics for Strava dashboard simple, guided, and error-free.

This version is fully functional, stable, and ready for general use.


✨ Highlights

📝 Form-Based Configuration Editor

  • Guided forms for every Stats for Strava configuration section
  • Real-time validation and required field indicators
  • Type-specific controls (dropdowns, number inputs, date pickers, switches)
  • Visual editors for heart rate zones, FTP history, weight history, and cron expressions

🔧 Configuration Management

  • Full support for all Stats for Strava configuration sections:

    General, Athlete, Appearance, Import, Metrics, Gear, Zwift, Integrations, Daemon

  • Automatic configuration backups with timestamped filenames

  • Auto-created settings folder for tool-specific configuration

📊 Dashboard & Widget Tools

  • Dashboard layout editor
  • Sports List Editor
  • Widget Definitions Editor with 20+ built-in widget templates
  • Support for single-instance and multi-instance widgets

🛠️ YAML Utility

  • YAML validation
  • Syntax-highlighted file viewer
  • YAML merge/combine tool
  • Monaco Editor integration

🔒 Authentication

  • Single-user login system
  • First-time registration
  • Password reset
  • Secure bcrypt hashing and signed cookies
  • Session persistence (default 7 days)

🔔 Notifications

  • Lightweight reminder system for unsaved changes and required follow-up actions
  • Badge indicator in the navbar

🎨 UI & Architecture

  • Chakra UI v3 with semantic tokens and full dark mode support
  • Responsive design for desktop, tablet, and mobile
  • Unified AppShell layout with breadcrumb navigation
  • Clean separation between UI (app/) and infrastructure (src/)

🖼️ Screenshot

Screenshot: The dashboard view showing multi-file configuration mode, section mapping, and YAML utilities.


🐳 Docker Image

A prebuilt Docker image is available:

ghcr.io/dschoepel/stats-for-strava-config-tool:1.0.0

Works with Docker Compose, Portainer, or direct docker run.


📄 Documentation

  • README.md — Installation, Docker setup, usage guide
  • AUTHENTICATION.md — Login, registration, password reset
  • DEVELOPER.md — Architecture and contribution guidelines

🙌 Thank You

This release marks the first stable milestone of the project.

Feedback, issues, and suggestions are welcome as the tool continues to evolve.

What's Changed

  • Full form-based configuration editor with field descriptions, validation, and type-specific controls
  • Guided editors for complex data structures:
    • Heart rate zones
    • Weight history
    • FTP history
    • Cron expression builder
  • Dashboard and widget management tools:
    • Dashboard layout editor
    • Sports List Editor
    • Widget Definitions Editor (20+ built-in widget templates)
  • YAML Utility:
    • YAML validation
    • Syntax-highlighted file viewer
    • YAML merge/combine tool
    • Monaco Editor integration
  • Gear Maintenance Utility for tracking mileage and service intervals
  • Automatic configuration backups with timestamped filenames
  • Auto-created settings folder with:
    • config-tool-settings.yaml
    • strava-sports-by-category.yaml
    • widget-definitions.yaml
  • Single-user authentication system:
    • First-time registration
    • Login/logout
    • Password reset
    • Secure bcrypt hashing and signed cookies
    • Session persistence (default 7 days)
  • Notifications system with navbar badge indicator
  • Unified AppShell layout with breadcrumb navigation
  • Dark-mode-ready UI using Chakra UI v3 and semantic tokens
  • Docker image published to GitHub Container Registry
  • Support for standalone Node.js usage and reverse proxy deployments

New Contributors

Full Changelog: https://github.com/dschoepel/stats-for-strava-config-tool/commits/v1.0.0