A flexible analytics platform for sports and fitness data visualization
SportMetrics transforms your training session data into interactive, filterable charts and insights. Built with a modular architecture to support multiple data sources and visualization types.
- Docker and Docker Compose
- Fitness session JSON files in
./sessions/directory
# Build the application
make build
# Process sessions and generate charts
./manage.sh process --sport RUNNING --output /app/output/running.json
# Start web server
./manage.sh web start
# Access at http://localhost:13000# Web server controls
./manage.sh web start # Start web server
./manage.sh web stop # Stop web server
./manage.sh web status # Check status
./manage.sh web restart # Restart web server
# Data processing
./manage.sh process --help # Show processing options
./manage.sh process --sport CYCLING # Process cycling sessions
./manage.sh process --min-distance 20000 # Long distance sessions- Auto-registration: Charts automatically register in
charts.jsonwhen generated - Dynamic navbar: Web interface loads available charts dynamically
- Tag-based organization: Charts organized by sport, distance, activity type
- Metadata tracking: Session count, date ranges, sports, distance ranges
- Supports running, cycling, and other fitness activities
- Sport-specific filtering and visualization
- Metadata extraction (distance, duration, sport, ascent)
- Autolap timing analysis
- Search: Find sessions by name/date
- Distance range: Dual-range slider for distance filtering
- Sport filtering: Multi-sport data organization
- Reset functionality: Quick filter reset
- Responsive design: Works on desktop and mobile
- Interactive charts: Chart.js powered visualizations
- Loading states: Clean loading without layout glitches
- Custom legends: Enhanced session management
frontend/public/index.html- Main HTML structurefrontend/public/css/styles.css- Responsive stylingfrontend/public/js/chart.js- Chart logic and interactivityfrontend/public/data/charts.json- Chart configuration registry
backend/src/session_processor.py- Session processing and Chart.js export- Automatic chart registration with metadata extraction
- Data flows:
./sessions/*.jsonβ processing βfrontend/public/data/*.json
- processor: Python backend for session processing
- web: Nginx serving frontend with data access
- Volume mounting for data persistence
# Process all running sessions with distance filter
./manage.sh process --sport RUNNING --min-distance 20000 --output /app/output/long-runs.json
# Process cycling sessions from specific date range
./manage.sh process --sport CYCLING --start-date 2024-01-01 --min-distance 15000
# Process all sessions for comprehensive overview
./manage.sh process --output /app/output/all-sessions.json
# Force rebuild image with latest code changes
make build-force--sport: Filter by sport type (RUNNING, CYCLING, etc.)--start-date/--end-date: Date range (YYYY-MM-DD)--min-duration: Minimum duration in seconds--min-distance: Minimum distance in meters--min-calories: Minimum calories burned--output: Output file path (within container:/app/output/filename.json)
- Automatic registration: Charts register when processed
- Metadata tracking: Session counts, date ranges, sports
- Tag system: Flexible organization (running, endurance, distance, etc.)
- Default chart: Configurable landing page chart
# Build management
make build # Build image
make build-force # Force rebuild (no cache)
make clean # Remove images
# Service management
./manage.sh web start # Start web interface
./manage.sh web stop # Stop services
./manage.sh process # Run data processing
# Direct docker-compose (advanced)
docker-compose --profile web up -d
docker-compose --profile process run --rm processor --help- Extend
session_processor.pywith new export methods - Charts auto-register with appropriate tags and metadata
- Frontend dynamically loads new chart types
- Modular processor design supports different input formats
- Easy to extend beyond fitness data to other analytics
- Tag system supports arbitrary categorization
- Current: search, distance range, sport filtering
- Extensible to: time-based, performance metrics, custom attributes
- Frontend filter system designed for easy expansion
SportMetrics generates Chart.js-compatible JSON files with:
- Interactive line chart configurations
- Dataset per session with timing data
- Rich metadata for filtering and organization
- Responsive chart options optimized for web display
- Custom legend integration for enhanced UX
SportMetrics: Transform your training data into actionable insights ππ