← Back to projects
Weather planning for runners
RunWeather
The weather app that actually understands running. Know when to run, how much to adjust your pace, and why some days feel harder, with Strava sync and AI-powered insights.
Overview
RunWeather goes beyond generic weather apps. Don't just see the score - understand what's affecting your run, plan the perfect window, and enrich your Strava history with weather context.
Highlights
- — Understand the "why" behind your run score with dew point and heat stress.
- — Plan your perfect window with side-by-side hour comparisons.
- — Your history, with context via Strava sync and weather enrichment.
- — Built for real life with preferred run times and notifications.
- — Integrates with Strava today, Garmin support coming soon.
Features
Understand the "Why"
- · Dew point analysis (not just humidity).
- · Heat stress indicators.
- · Actionable pace adjustments.
Plan Your Perfect Window
- · Hourly run quality scoring.
- · Avoid peak heat/humidity.
- · Clear "Best Time" indicators.
Your History, With Context
- · Automatic Strava sync.
- · Historical weather data.
- · Pattern recognition.
Built for real life
- · Choose preferred run times.
- · Best Window notifications.
- · Decision changed alerts.
- · What to wear & bring.
Integrations
- · Strava
- · Garmin (coming soon)
Technical Details
Architecture snapshot
- · pnpm workspace monorepo with shared contracts and core logic.
- · Service + worker split for background webhook processing.
- · PostgreSQL for persistence and Redis for cache-aside forecasts.
Shared packages
- · @runweather/api-contracts defines Zod schemas for request/response typing.
- · @runweather/core keeps scoring logic consistent across mobile and API.
- · @runweather/config standardizes tooling and TS config across packages.
Mobile app (Expo)
- · Expo SDK 54 + New Architecture with expo-router navigation.
- · Zustand state with AsyncStorage persistence.
- · Shared scoring logic from @runweather/core.
API service (Fastify)
- · Fastify + TypeScript with Zod-validated API contracts.
- · Prisma on PostgreSQL with AES-256-GCM token encryption.
- · Weather aggregation with caching and rate limits.
Worker & operations
- · Postgres-backed webhook queue with retries and backoff.
- · Dedicated worker process for async processing.
- · Environment-driven configuration for limits and TTLs.
Data flow
- · Mobile requests forecasts via API; cache-aside hits Redis first.
- · Strava webhooks enqueue jobs; worker enriches runs asynchronously.
- · Scoring runs through shared core logic for consistency.
Stack
React Native (Expo), Fastify, PostgreSQL, Redis, Prisma, pnpm workspaces, Open-Meteo, Strava API