CHAIN TRACKER
NOT CONNECTED
Waxed chain rotation system · not synced
Active Chain
1
0 km since wax
Chain is clean
0 km400 km
Each chain has a full lifecycle. Set Active = put this chain on the bike right now. Log Wax = you just waxed it, resets the km counter. Retire = chain is worn out, archive it for reference.
Strava Connection
Sign in with Strava to automatically sync your rides. No tokens or Terminal commands needed.
Sync Rides
Pick a start date to sync from. Leave blank to sync all history. Re-syncing is always safe — imported rides are never duplicated.
Sync from date
Leave blank for full history
Chain Settings
Wax interval
km before rotation reminder
Warning at
% of interval
Notifications
Google Sheets Backup
Deploy the Apps Script to your Google Sheet once, paste the Web App URL here. Auto-backs up after every sync.
Last backup: Never
Data
Setup Guide
Step-by-step instructions for getting everything configured.
SETUP GUIDE
Everything you need to get Chain Tracker running β€” from installing on your phone to automating Strava sync. Tap each step to expand it.
1
Host & install on iPhone
To do
The app is hosted on Cloudflare Pages. Deploy it from the project folder with npm run deploy (see SETUP.md).
  1. Copy your app URL, e.g. chain-tracker.pages.dev
  2. Open that URL in Safari on your iPhone (must be Safari)
  3. Tap the Share button β†’ scroll down β†’ Add to Home Screen
  4. Name it Chain Tracker β†’ tap Add
The app opens full-screen with no browser chrome, just like a native app. All your data is stored privately on your device.
2
Connect Strava
To do
No Terminal needed. The app handles the full Strava connection with one tap.
  1. Open Chain Tracker on your iPhone
  2. Go to Settings
  3. Tap Connect with Strava (the orange button)
  4. Log in to Strava and tap Authorise
  5. You'll be redirected back to the app automatically β€” done
  6. Tap Fetch My Bikes from Strava to link your Strava bikes to your bike profiles
After connecting, go to Settings β†’ Sync Rides and tap Sync from Strava once to import your full history. After that, new rides sync automatically via the webhook.
3
Set up your bikes & chains
To do
  1. Go to the Bikes tab β€” you'll see Summer Bike pre-loaded
  2. Tap Edit to rename it and paste in its Strava Gear ID (shown after fetching bikes)
  3. Tap + Add Another Bike for your second bike
  4. For each bike, tap Use next to whichever chain is currently installed, then tap Wax to set today as the last wax date
  5. Set your wax interval in Settings β†’ Chain Settings (default is 400 km)
4
Apple Shortcuts automation
To do
With the webhook running, Strava syncs automatically β€” you only need one shortcut now. Replace YOUR_APP_URL with your Cloudflare Pages URL.
Shortcut 1 β€” "Wet Ride πŸ’§"
Add this to your iPhone Home Screen. One tap rotates to the next chain.
  1. Open Shortcuts app β†’ tap + to create new
  2. Name it Wet Ride
  3. Add action: Open URLs
  4. Enter URL: YOUR_APP_URL/#rotate
  5. Tap the share icon β†’ Add to Home Screen
Shortcut 2 β€” "Daily Wax Check" (optional automation)
Automatically opens the app each morning so you see chain status.
  1. In Shortcuts β†’ Automation tab β†’ tap +
  2. Choose: Time of Day β†’ set to 8:00am β†’ Daily
  3. Add action: Open URLs β†’ YOUR_APP_URL
  4. Turn off Ask Before Running
The old manual sync shortcut is no longer needed β€” the Strava webhook pushes new rides to your Google Sheet automatically, and the app picks them up the next time you open it.
5
Google Sheets backup (optional)
To do
  1. Create a new Google Sheet β€” name it anything
  2. Go to Extensions β†’ Apps Script, delete existing code, paste in the chain-tracker-sheets.gs script
  3. Select setupApiKey in the function menu β†’ Run, then copy the key from the Execution log
  4. Click Deploy β†’ New Deployment β†’ Web App
    Execute as: Me Β· Who has access: Anyone
  5. Copy the Web App URL and add ?key=YOUR_KEY to the end
  6. In Chain Tracker β†’ Settings β†’ Google Sheets Backup β†’ paste the URL β†’ tap Backup Now
The script creates three tabs automatically: Chain Status (snapshot per backup), Ride Log (full history), and Raw Snapshots (JSON for recovery).
Daily Use
After a ride β€” nothing to do: Strava rides arrive automatically. Use + Log Ride for rides not on Strava.
Wet weather β€” tap the πŸ’§ button on the dashboard (or the Home Screen shortcut) before heading out. It rotates to the next chain.
Chain needs wax β€” the progress bar turns red and you get a notification. Mark it waxed in the Bikes tab and rotate back to it once dry.
Multiple bikes β€” use the pill switcher at the top to switch context. Each bike tracks its own chains independently.
Dashboard
Chains
Bikes
History
Settings