A personal application for archiving cycling rides and rating road/trail sections to inform future route planning.
- Import rides from Garmin GPX files (single or bulk)
- Categorize rides by bike type (road, gravel, MTB)
- Interactive heatmap of all different ride types
- Rate sections of routes with 5-level rating system + add surface tags to be able to easily look up conditions of various sections
- Look up individual rides that went past a specific location on the map
Setup Node.js (tested with version v25.2.1 I suggest using nvm) as explained here.
# Install dependencies
npm run setup
# Start the application and open browser
./start.shOr manually:
npm run dev
# Then open http://localhost:5173cycling_map/
├── client/ # React frontend (Vite + Tailwind + Leaflet)
├── server/ # Express backend
│ └── src/
│ ├── index.js # Server entry point
│ ├── db.js # SQLite database setup
│ ├── gpxParser.js # GPX file parsing
│ └── routes/ # API routes
├── data/ # SQLite database (created on first run)
├── sample_gpx/ # Sample GPX files
└── docs/ # Requirements documentation
- Click "Import GPX" in the sidebar
- Drag & drop GPX files or click to browse
- Select bike type (road/gravel/MTB)
- Click Import
- Select a ride from the sidebar
- Click "+ Rate Section" button on the map
- Click on the track to mark the START point
- Click on the track to mark the END point
- Select a rating and optional surface tags
- Add notes if needed
- Save
| Rating | Use for |
|---|---|
| Excellent | Perfect conditions |
| Good | Minor issues but rideable |
| Challenging | Difficult but manageable |
| Hard | Very difficult, consider avoiding |
| Unridable | Not possible/safe for bike type |
- Use the bike type dropdown to filter heatmap and rides
- Toggle heatmap and sections visibility with checkboxes
- Frontend: React, Vite, Tailwind CSS, Leaflet, React Query
- Backend: Node.js, Express
- Database: SQLite (via better-sqlite3)
- Maps: OpenStreetMap tiles
The database is stored at data/cycling_archive.db. Simply copy this file to back up all your data.

