A modern Next.js dashboard to visualize your Stryd running activities from a SQLite database.
- Activity List - Browse all your activities with key statistics (distance, duration, pace, power, heart rate)
- Detailed View - Complete activity breakdown with all metrics and statistics
- Filtering - Multi-select filter by activity type (easy, tempo, interval, etc.)
- Tag-based Filtering - Click on tags to filter activities
- Calendar View - Weekly calendar showing activities with navigation for multiple activities per day
- Interactive Charts - Time series visualization for power, heart rate, speed, cadence, stride length, and elevation
- Power Zones - Visual power zone distribution
- Lap/Split Filtering - Zoom into specific segments of your activity
- GPS Route Display - View your route on an interactive map with power-based color gradient
- Intelligent Chat - Ask questions about your training data and get insights
- Context-Aware - AI understands your activity history and provides personalized advice
- Powered by Ollama - Local LLM integration (Mistral) for privacy-focused AI interactions
- Training Analysis - Get recommendations, analyze patterns, and understand your performance
- Performance Trends - Visualize your progress over time
- Statistics Dashboard - Key metrics and performance indicators
- Historical Comparison - Track improvements and identify patterns
- Dual Map Providers - Choose between OpenStreetMap (Leaflet) or MapLibre GL JS
- Power Gradient - Route colored by power output (green β yellow β red)
- Start/Finish Markers - Clear visual indicators for route beginning and end
- Multi-language Support - Full English and French translations
- Easy Language Switching - Change language from settings page
- Dark Mode - Toggle between light and dark themes
- Responsive Design - Optimized for desktop and mobile devices
- Modern UI - Clean, gradient-based design with smooth animations
- Next.js 16.1.1 - React framework with App Router and Server Components
- React 19.0.0 - UI library
- TypeScript 5.7.3 - Type-safe JavaScript
- Tailwind CSS 3.4.15 - Utility-first CSS framework
- better-sqlite3 - Synchronous SQLite database
- Recharts 2.13.3 - Charting library
- Leaflet 1.9.4 - Interactive maps (OpenStreetMap)
- MapLibre GL JS 5.15.0 - Vector map rendering
- Lucide React - Beautiful icon set
- Ollama - Local LLM integration for AI features
- Clone the repository
git clone <repository-url>
cd strydash- Install dependencies
pnpm install-
Setup Ollama (optional, for AI features)
- Install Ollama
- Pull the Mistral model:
ollama pull mistral - Ensure Ollama is running:
ollama serve
-
Ensure the database file is present
- Place your
stryd_activities.dbfile in the project root
- Place your
-
Start the development server
pnpm dev- Open your browser
- Navigate to http://localhost:3000
The project expects the following SQLite tables:
activities- General activity information (name, date, distance, duration, type, tags, etc.)gps_data- GPS coordinates with timestamps and power valuestimeseries_power- Power data over timetimeseries_cardio- Heart rate datatimeseries_kinematics- Speed, cadence, stride lengthtimeseries_elevation- Elevation datalaps- Activity splits/laps
strydash/
βββ app/
β βββ activities/[id]/
β β βββ page.tsx # Activity detail page
β βββ api/
β β βββ chat/
β β β βββ route.ts # AI chat API endpoint
β β βββ models/
β β βββ route.ts # Ollama models API endpoint
β βββ calendar/
β β βββ page.tsx # Calendar view page
β βββ overview/
β β βββ page.tsx # Overview/dashboard page
β βββ settings/
β β βββ page.tsx # Settings page
β βββ straid/
β β βββ page.tsx # StrAId AI assistant page
β βββ trends/
β β βββ page.tsx # Trends and analytics page
β βββ layout.tsx # Root layout with theme provider
β βββ page.tsx # Home page (activity list)
β βββ globals.css # Global styles
β
βββ components/
β βββ ActivityDetailClient.tsx # Client-side activity detail
β βββ ActivityList.tsx # Activity list with stats
β βββ CalendarClient.tsx # Weekly calendar view
β βββ ChatButton.tsx # AI chat interface button
β βββ FilterBar.tsx # Activity filtering UI
β βββ HomeClient.tsx # Home page client wrapper
β βββ MapLibreMap.tsx # MapLibre GL JS implementation
β βββ PowerZones.tsx # Power zone visualization
β βββ PreferencesProvider.tsx # User preferences context
β βββ RouteMap.tsx # GPS route display
β βββ Sidebar.tsx # Navigation sidebar
β βββ TimeseriesChart.tsx # Interactive time series chart
β βββ TrendsClient.tsx # Trends page client component
β
βββ lib/
β βββ db.ts # SQLite database functions
β βββ preferences.ts # User preferences management
β βββ translations.ts # i18n translations (EN/FR)
β
βββ stryd_activities.db # SQLite database (not in repo)
βββ package.json # Project dependencies
- View all activities with key metrics
- Use the Select Type dropdown to filter by activity type (multiple selection)
- Click on tags to add them to filters
- Click on any activity card to view details
- Complete statistics breakdown
- Interactive time series chart with metric selection
- Power zone distribution
- GPS route with power gradient coloring
- Filter by laps/splits to focus on specific segments
- Weekly layout (Monday to Sunday)
- Activities displayed per day with name, type, distance, and duration
- Weekly summary showing total distance and time
- Navigate between multiple activities on the same day
- Language - Switch between English and French
- Theme - Toggle between light and dark mode
- Map Provider - Choose between Leaflet (OpenStreetMap) or MapLibre GL JS
- Ask questions about your training in natural language
- Get personalized insights and recommendations
- Analyze patterns in your activity data
- Requires Ollama with Mistral model installed and running
- View performance trends over time
- Analyze training load and progression
- Track key metrics evolution
# Create optimized production build
pnpm build
# Start production server
pnpm startPreferences are stored in localStorage and include:
- Language (
en|fr) - Theme (
light|dark) - Map Provider (
leaflet|maplibre)
The application uses Node.js with Corepack enabled. Ensure your PATH includes:
export PATH="/usr/share/nodejs/corepack/shims:$PATH"MIT
Contributions are welcome! Please feel free to submit a Pull Request.
Note: This project requires a Stryd activities database (stryd_activities.db). The database structure should match the schema described above.