Automatically add weather data to all your Strava activities. Track temperature, wind, humidity, and conditions for every workout. Self-host for complete control over your data.
Everything you need to track weather conditions for your activities
Simple, automatic weather tracking for every activity
Record and upload your activity to Strava as normal
Rain or Shine automatically fetches weather for your activity location and time
Weather data appears in your activity description on Strava
Clear sky, 18°C, Feels like 18°C, Humidity 82%, Wind 4.1m/s from W
Set up your personal Rain or Shine instance in about 30 minutes
First, you'll need Node.js version 22 or newer on your computer.
node --version
You should see something like v22.11.0
You need to register your app with Strava to enable the integration.
This free API provides the weather data for your activities.
The free tier includes 1,000 calls per day - more than enough for personal use!
Now let's get the Rain or Shine code and set it up.
git clone https://github.com/james-langridge/rain-or-shine.git
cd rain-or-shine
npm install
cp .env.example .env
.env
in a text editor and fill in your values:# Your Strava App credentials
STRAVA_CLIENT_ID=your-client-id-here
STRAVA_CLIENT_SECRET=your-client-secret-here
STRAVA_WEBHOOK_VERIFY_TOKEN=make-up-a-random-string-here
# Your OpenWeatherMap API key
OPENWEATHERMAP_API_KEY=your-api-key-here
# Security - make this a random string at least 32 characters
SESSION_SECRET=generate-a-long-random-string-here-use-a-password-generator
# Leave these as-is for local development
NODE_ENV=development
PORT=3001
APP_URL=http://localhost:3001
DATABASE_URL=postgresql://user:password@localhost:5432/rain_or_shine
VITE_API_URL=http://localhost:3001/api
Rain or Shine needs a PostgreSQL database to store your data.
If you have Docker installed:
docker run --name rain-or-shine-db \
-e POSTGRES_USER=user \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=rain_or_shine \
-p 5432:5432 \
-d postgres:15
rain_or_shine
Once your database is running, run the migrations:
npm run migrate
You're ready to run Rain or Shine!
npm run dev
This starts both the backend server (port 3001) and frontend (port 5173).
Open your browser and go to http://localhost:5173
Click "Connect with Strava" to authorize the app and start using it!
Once you've tested locally, you can deploy to Railway for free hosting.
.env
fileAPP_URL
to your Railway URLDATABASE_URL
to use Railway's databaseAlternative deployment options include Heroku, DigitalOcean App Platform, or any VPS with Node.js and PostgreSQL.
Problem: "Invalid redirect URI" or similar OAuth errors
Solution: Make sure your Strava app's callback domain matches your APP_URL. For local development, use "localhost". For production, use your actual domain without "https://".
Problem: Activities don't show weather data
Solution: Check that your OpenWeatherMap API key is active (can take 10-15 minutes after signup). Also ensure the activity has location data - indoor activities won't have weather data.
Problem: Can't connect to PostgreSQL
Solution: Verify your DATABASE_URL is correct and PostgreSQL is running. The format should be: postgresql://username:password@localhost:5432/rain_or_shine
Yes! The code is open source. You'll only pay for hosting if you choose a paid service. Railway, Heroku, and others offer free tiers perfect for personal use. The OpenWeatherMap free tier (1,000 calls/day) is more than enough for a single user.
Yes! Rain or Shine works with any activity uploaded to Strava, regardless of how it was recorded. As long as the activity has location data, weather will be added.
The current version is designed for single-user personal use. Multi-user support would require Strava API approval. However, each team member could set up their own instance.
No. Weather data is only added to the activity description field. Your original activity data (distance, time, power, heart rate, etc.) remains unchanged.
When you self-host, all your data stays under your control. The app only communicates with Strava (for activities) and OpenWeatherMap (for weather). No data is sent anywhere else, and there's no analytics or tracking.
The app currently supports metric and imperial units. The format is standardized, but since it's open source, you can modify the code to customize how weather appears in your activity descriptions.
Set up Rain or Shine today and never forget the conditions of your epic (or terrible) weather days.