Strava Dashboard — Portfolio Preview
A personal analytics platform for Strava activities. This page gives an inside look at the capabilities and architecture without requiring OAuth login.
What you get
A quick overview of the experience and value.
Insightful Analytics
Distance, time and elevation summaries, pace trends, personal records and monthly breakdowns.
Smart Sync
Full, incremental or recent sync strategies based on last import and activity volume.
Performance-aware
Pagination at 200/items with considerate rate limiting and request timeouts to keep things smooth.
Security-first
OAuth with Strava, stateless JWT, encrypted tokens at rest, strict CORS and secure headers.
Modular Architecture
Typed services and controllers, clean data transforms, and focused UI sections.
Dockerized Setup
One command to run frontend, backend and MongoDB via Compose.
Architecture
A pragmatic stack with a strong separation of concerns.
System diagram
- Frontend: Next.js 14, React 18, Tailwind CSS, App Router
- Charts: Recharts for pace and monthly trends
- Backend: Node.js, Express, Helmet, CORS
- Database: MongoDB with Mongoose models
- Auth: OAuth with Strava + stateless JWT
- Packaging: Docker Compose for dev
Sync strategies
Fetches all activities via paginated requests when onboarding or after a long gap.
Imports activities since the last known activity date to keep the DB up to date.
Gets the most recent page for a quick refresh.
Security & resilience
- Encrypted Strava tokens at rest (per user)
- JWT-based auth, no server-side sessions
- Helmet security headers and strict CORS
- Graceful MongoDB shutdown hooks
- API timeouts and 401/429 handling
UI previews
Representative placeholders for analytics views.
Want a quick walkthrough?
I can demo syncing, analytics and the codebase in a short call. No login required for the demo.
This project is not affiliated with or endorsed by Strava.