A monorepo for processing cycling activity data from .FIT files (Garmin/cycling computers). It consists of two independent Flask services, both deployed on Google Cloud Run.
BigBikeData/
βββ power_core/ # Backend β internal activity processing pipeline
βββ site_handler/ # Frontend β public web interface for users
βββ gcp_actions/ # Shared GCP utilities library (external dependency)
| Service | Directory | Description | Access |
|---|---|---|---|
| power_core (readme) | power_core/ |
Internal backend β processes .FIT files from Dropbox and from user uploads via Pub/Sub. Cleans GPS data, uploads to Strava, builds heatmaps, stores in PostgreSQL. | Internal (private Cloud Run) |
| site_handler (readme) | site_handler/ |
Public-facing web app. Users upload .FIT files, get cleaned files back via email download links. Sits behind Firebase Hosting with domain allowlist. | Public (Firebase Hosting β Cloud Run) |
- FIT File Processing β decode, analyze, and re-encode .FIT cycling activity files
- GPS Data Cleaning β detect and fix bad GPS coordinates in recorded activities
- Dropbox Sync β webhook-triggered sync of .FIT files from a Dropbox watched folder
- Strava Integration β automatic upload of cleaned activities with correct bike gear
- Heatmap Building β composite GPX heatmaps using GCS object composition
- PostgreSQL / PostGIS β store track points for spatial queries and analysis
- Email Notifications β send download links via SMTP or Brevo API
- Internationalization β English and Ukrainian UI support (Flask-Babel)
- GCP Pub/Sub β asynchronous pipeline orchestration (public user uploads β backend processing)
Both services are deployed via Google Cloud Build:
# Backend
gcloud builds submit --config power_core/cloudbuild.yaml
# Frontend
gcloud builds submit --config site_handler/cloudbuild.yamlThe frontend is fronted by Firebase Hosting, which provides security redirects and rewrites traffic to the site_handler Cloud Run service.
Both services share an external dependency on the gcp_actions package for GCP utilities (Pub/Sub, Firestore, GCS, Secret Manager, etc.).
