Bike Garage
A desktop app to manage bikes, components and consumables, with wear thresholds in kilometres and ride import from GPX files, all stored in a local SQLite database.
- Role
- Author
- When
- April 2026 to September 2026
- Stack
- Electron, React, Vite, SQLite, Recharts, Leaflet
Context
Bike Garage tackles the same problem as VeloMetric, keeping track of what wears out on a bike, but as a desktop app that works with real ride files instead of manual entries. Everything stays on the computer: there is no account and no cloud sync.
What I built
- Bikes and components. Several bikes, each with a name, picture and notes, and the components fitted to it (chain, cassette, brakes and so on) with brand and installation mileage.
- Consumables with thresholds. Each consumable has a kilometre limit, and a progress bar shows how much of it has been used.
- Ride import. GPX files are parsed in the app to extract distance, elevation, heart rate and power; rides are listed with their metrics and drawn on a Leaflet map.
- Dashboard. Aggregate statistics with Recharts.
Architecture
The app follows the usual Electron split. The main process owns the SQLite database (through better-sqlite3) and exposes a narrow API through a preload script, so the React interface, built with Vite, never touches the file system or the database directly. The schema has four tables: bikes, components, consumables and activities. npm run build packages a Windows executable.
Status
A personal tool; the interface is in Italian.