A modern web application to visualize and analyze Strava activity data, built with Vue 3, Vite, and Tailwind CSS. This project fetches running and walking activities from the Strava API, caches them in Firebase Firestore, and provides an interactive dashboard to explore recent activities, stats, weekly progress, and customizable goals.
๐ Live Demo | ๐โโ๏ธ My Strava Profile
- View recent running and walking activities in a sortable table
- Filter by date, name, and activity type (runs or walks)
- Responsive design optimized for desktop and mobile
- Display total distance, average pace, and longest activity
- Options to combine or separate run/walk data
- Real-time calculations based on selected filters
- Visualize weekly activity trends using custom chart components
- Track performance over time with interactive charts
- Overall Goals: Set distance goals (e.g., 500 km) with start date tracking
- Weekly Goals: Set weekly distance targets (e.g., 38 km) and monitor progress
- Toggle between combined (run + walk) or type-specific goals
- Floating sidebar navigation with smooth scrolling
- Glassmorphism design using Tailwind CSS
- Responsive layout for all device sizes
- Real-time data fetching from Strava API
- Firebase Firestore caching for improved performance
- Optimized data loading and filtering
- Vue 3 (Options API)
- Vite (Build tool)
- Tailwind CSS (Styling)
- Node.js
- Express.js
- Strava API (Activity data)
- Firebase Firestore (Data caching)
- Netlify (Frontend)
- Render (Backend)
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher)
- npm or yarn
- A Strava account with API access
- A Firebase project with Firestore enabled
git clone https://github.com/your-username/strava-activity-visualizer.git
cd strava-activity-visualizernpm installCreate a .env file in the root directory:
VITE_API_URL=http://localhost:3000/api/activitiesCreate a .env file in the backend directory:
STRAVA_CLIENT_ID=your_strava_client_id
STRAVA_CLIENT_SECRET=your_strava_client_secret
STRAVA_REFRESH_TOKEN=your_strava_refresh_token
FIREBASE_PROJECT_ID=your_firebase_project_id
FIREBASE_PRIVATE_KEY=your_firebase_private_key
FIREBASE_CLIENT_EMAIL=your_firebase_client_email- Strava API: Get credentials from Strava API Settings
- Firebase: Generate service account credentials from your Firebase project console
cd backend
npm install
node server.cjsIn the root directory:
npm run devOpen http://localhost:5173 in your browser.
- Push your code to a GitHub repository
- Connect the repository to Netlify
- Set build command:
npm run build - Set publish directory:
dist - Add environment variable:
VITE_API_URLpointing to your backend
- Deploy the
backenddirectory to Render as a Node.js service - Set all required environment variables in Render's dashboard
- Configure start command:
node server.cjs
- Authorize Strava: On first load, authorize the app to access your Strava data
- Explore Activities: Use tabs to view runs, walks, or combined data
- Apply Filters: Filter by name, date range, or number of activities
- Sort Data: Click column headers to sort by date, distance, time, or pace
- Overall Goals: Navigate to the Overall Goals section and set your distance target
- Weekly Goals: Set weekly distance goals and track your progress
- Goal Types: Toggle between combined activities or specific activity types
- Use the floating sidebar (desktop) for quick navigation
- Smooth scrolling between sections
- Responsive design adapts to your device
strava-activity-visualizer/
โโโ backend/ # Node.js/Express backend
โ โโโ server.cjs # API server for Strava and Firebase
โ โโโ ...
โโโ src/ # Vue 3 frontend
โ โโโ components/ # Vue components
โ โ โโโ WeeklyChart.vue # Weekly progress chart
โ โ โโโ Counter.vue # Goal counter component
โ โ โโโ ...
โ โโโ services/ # Service layer
โ โ โโโ firebase.js # Firebase configuration
โ โ โโโ ...
โ โโโ App.vue # Main application component
โ โโโ main.js # Application entry point
โ โโโ assets/ # Static assets
โโโ .env # Frontend environment variables
โโโ vite.config.js # Vite configuration
โโโ package.json # Dependencies and scripts
โโโ README.md # Project documentation
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Vue 3 best practices
- Use Tailwind CSS for styling
- Write descriptive commit messages
- Test your changes thoroughly
Karl Louise Rito
- ๐ Strava Profile
- ๐ป Passionate about running and coding
- ๐ Building tools to help athletes track their progress
This project is licensed under the MIT License - see the LICENSE file for details.
- Strava for providing an excellent API
- Vue.js community for amazing documentation
- Firebase for reliable backend services
- Tailwind CSS for beautiful, responsive design
- All the runners and walkers who inspire us to keep moving! ๐โโ๏ธ๐ถโโ๏ธ
โญ Star this repo if you find it helpful!
ยฉ 2025 Karl Louise Rito