A sophisticated dashboard for analyzing ZwiftPower racing data with objective power profiling and performance insights.
- Objective Power Analysis: Scientific power profiling using Coggan methodology
- Critical Power Modeling: VO2max estimation and power curve analysis
- Performance Timeline: Historical racing progression with power trends
- ZwiftPower Categories: Accurate categorization with W/kg precision
- Event Type Analysis: Specialized views for different race formats
- Responsive Design: Mobile-friendly interface with modern UI
This application is designed for Netlify deployment with Functions:
- Frontend: React + Vite SPA served statically
- Backend: Netlify Functions for dynamic rider data fetching
- Data Storage: JSON files in
/public/data/riders/ - API Endpoints:
/api/*routes handled by Functions
- Fork this repository to your GitHub account
- Connect to Netlify:
- Go to netlify.com
- Click "New site from Git"
- Choose your forked repository
- Deploy settings are auto-detected from
netlify.toml
- Enable Functions:
- Functions are automatically enabled with this configuration
- No additional setup required
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run buildHealth check endpoint
{
"riderId": "5528916",
"force_refresh": false
}List all available riders with data
public/data/riders/{riderId}/
├── profile.json # Basic rider information
├── power.json # Power data and zones
├── races.json # Race history
├── workouts.json # Training data
├── events_summary.json # Event statistics
└── ...
ZWIFT_USERNAME- ZwiftPower credentialsZWIFT_PASSWORD- ZwiftPower credentialsAPI_RATE_LIMIT- Request rate limiting
- Build Command:
npm run build - Publish Directory:
dist - Functions Directory:
netlify/functions - Node Version: 18+
Currently requires manual data collection. Future versions will support:
- Automatic rider data fetching via API
- Background data refresh
- Real-time power analysis
All calculations based on:
- Coggan Power Training Zones
- Critical Power modeling
- VO2max estimation algorithms
- ZwiftPower categorization rules
- Frontend: React 18, Vite, TailwindCSS, Recharts
- Backend: Netlify Functions, Node.js 18+
- Deployment: Netlify with continuous deployment
- Data: Static JSON files with API caching
Includes complete dataset for rider 5528916 demonstrating all features:
- 100+ race results
- Power profiling data
- Training history
- Performance trends
MIT License - see LICENSE file for details.
Built for the cycling community with scientific precision and modern web technology.