Logo
Latest post

My GPS ride data

I've been posting my GPS data for my bicycle rides to Strava for over 12 years. In that time I've recorded over 1,500 rides covering more than 44,000kms. That's a lot of my data on someone else's server.

Prior to using Strava, I used Endomondo to record my rides. Endomondo does not exist anymore.

With this in mind, I thought it was about time that I started recording my rides on my own server. So, that's what I have started doing. I've wanted to be able to do this for a long time, but what with work commitments and family life, I've never managed to get around to coding it.

Enter Claude.

For me, one of the best things about generative AI is just how quickly it works. A coding feature that might have taken me weeks to achieve, can now be accomplished in a single morning. And, that's about how long it took for Claude and I to add this feature to my website.

I started by prompting Claude to create a database of bikes so that I can associate a bike to a ride and keep track of how many kilometres each bike has been ridden. The prompt was:

In my website's admin area under admin/bikes, I want to build a system where I can record details of my bicycles. I have a number of bikes and I want to be able to record details of their brand, model, components etc. I also want to be able to upload photos of them and keep a running total of the number of kilometres I have ridden on them.

This produced exactly what I wanted, nearly. It then occurred to me that I like to tinker a lot with my bikes, changing components and tyres etc, it might be good to add a chronological notes section for each bike, so that I can keep track of what changes I make and when I make them. So I gave Claude the following prompt:

I'd like to be able to record individual notes against my bikes, like a mini blog post or status update. I want to be able to write the note in markdown and be able to optionally upload media (photos, video, pdf files etc.)

Next up, the more tricky task of uploading and parsing the Garmin GPS files.

In my website's admin area under admin/rides I want to build a system where I can upload Garmin fit files, have them read and the data stored in the database. I want to be able to edit the rides like Strava, changing the title, adding notes, uploading photos, assigning a bike etc. It would be cool if I could see a route map using OpenStreetMap or similar. When assigning a bike, the bike's total number of kilometres should be updated.

As it turns out (somewhat expectantly) Claude did not find this the least bit tricky and put the whole thing together very nicely. There was some additional prompting to get things just how I wanted them, but I figure this was to be expected given the rather basic prompts that I had provided Claude with.

All in all, I'm really happy with how the whole thing turned out. There's something immensely satisfying about having full control over my own data again, hosted on my own server, without having to rely on third-party platforms that could disappear or hide features behind a paywall tomorrow. It does exactly what I need it to do, no more, no less.

If you're into this sort of thing and want to see the ride log in action (or just see where I've been pedalling lately), you can check out my ride data over at my rides page.

View as: JSON Markdown
If you enjoyed this post or found it useful, you can subscribe to my RSS feed

More posts

  1. Exploring AI tooling, model runners, cloud gateways, and local setups

    After testing everything from local setups to advanced agentic tools, I've found a clear path for incorporating AI into my coding workflow.

  2. My Z shell setup

    A quick walkthrough of my Z shell setup for Debian servers and macOS, including Pure prompt, autosuggestions, history search, npm completion, SSH host completion, aliases, and a few cross-platform helper commands.

  3. How to Launch WSL VS Code Projects from the Windows Start Menu

    A small PowerShell script for Windows that finds named WSL projects and creates Start Menu shortcuts to open them directly in Visual Studio Code using the WSL remote URI.

  4. Debian 13 (Trixie) server set-up

    A practical, production-ready guide to setting up a Debian 13 web server using Apache, PHP-FPM, and MariaDB. Covers installation, performance tuning, security basics, and modern best practices.

  5. My MacBook Pro M5

    Fast, silent, and actually usable on your lap. I traded my ThinkPad for a MacBook Pro two months ago, and honestly? I should have done it sooner. Here is my honest take on the transition.

  6. Flatspace Commander

    A love letter to the kid sitting on the floor in front of a CRT TV. Flatspace Commander is a minimalist, 1-bit space sim that brings back the tension of 80s wireframe trading with a modern, mobile twist.

  7. PHOSPHOR: an entropy-based password generator

    I teamed up with Gemini and Claude to build a retro-futuristic password generator. It's a PWA that harvests hardware entropy from your movements, runs them through a SHA-256 math blender, and looks great doing it.

  8. PWA: Favicon & PWA Icon Generator

    I've taken my Favicon Generator entirely client-side. By leveraging the Canvas API, the new version handles all image processing right in your browser - no server required. With full offline support and new features like squircle shaping and individual icon overrides, it's a faster, more flexible way to manage your project assets.

  9. Favicon & Manifest Generator

    Scratching a dev itch, I rebuilt my Favicon & Manifest generator. Upload one image to get all your PWA assets and a customisable manifest.json instantly.

  10. How to Launch VS Code Projects via macOS Spotlight

    I recently traded my Linux setup for a MacBook Pro, but I wasn't willing to give up my custom project launchers. With a little help from Claude, I've ported my original Bash script to macOS so I can open any project instantly using Cmd + Space.

Loading…