Summary: I built a web app in Python using the Flask framework for automatic logging of surf sessions using any GPS watch and simple manual archiving of past homepage mockup is a long term passion project. It started as an attempt to automate the surf logging process as much as possible. Here’s what I do to log a surf session:

  • Start a ‘Surf’ activity on my watch – two button presses as I’m getting changed into my wetsuit, then one more as I jump in the water to start the session
  • Stop the activity when I get out – two button presses when I get out of the water
  • Optional: Snap a photo of the surf before or after the session

And here’s what happens automatically based on that:

  • The watch syncs with the phone in my bag as I get back to my stuff on the beach
  • The Garmin phone app uploads the activity to Garmin Connect
  • Garmin Connect sends the activity to Strava
  • Surfcrunch is alerted by Strava when a new Surf activity is created
  • Surfcrunch grabs the original activity file from Strava
  • Surfcrunch analyses the file and creates a new session with the correct spot (based on a database of spots that I have added using an interface I built), start time, duration, number of waves caught with the speed, length and various other stats of each wave recorded in a database
  • Surfcrunch emails me with a summary of the session, showing the number of sessions I’ve had that month vs last year and the previous 3 year average and a link to edit the session and add some more details
  • The next day the swell (size, period and direction of primary, secondary and wind swells), wind and tide information is all available for the session on surfcrunch to help with analysis

After the session has been automatically added, I can manually add a description, rating, photo(s) and a few other bits of information to the session later.

The waves part of the session page looks like this:

This one’s from The Wave in Bristol. I’ll be writing more about The Wave in the future, I’ve been collecting some data from various sources to dig in to it in detail at some point.

Historical Data

My dream is to have all the information about sessions I’ve had in over 25 years of surfing in one place. No other service or tool available to me allows me to document sessions from any time and any place in the way does.

If I’ve got an old GPS file from an old phone in a waterproof case that I tested in 2014, I can upload it manually and surfcrunch will add it to my session history.

Each spot has a page where I can see various stats, including a heatmap showing the most popular take-off positions. Here’s a popular beach break in the UK where I’ve logged 3 sessions so far.

I think I was using a Fitbit watch at the time these were logged, which worked OK, but wasn’t as accurate as my subsequent Garmin watches.

It’s also possible to add a historical session manually. I don’t get any wave stats for sessions without GPS, but I can get the swell, wind and tide details for any session back to 1990 from my self hosted Postgres database (more on that project another time).

Some of the other sub projects that involve or enable Surfcrunch include:

  • The world’s best surf watch – featuring a custom watch face with tide, swell, wind and daylight times alongside date and time on an inexpensive Garmin watch
  • A Raspberry Pi 4 based Postgres server with over 30 years of global swell model data, covering thousands of surf spots, updated daily
  • 3D wave paths with speed represented as height in the browser using MapBox GL
  • Geotagged Photo import which automatically matches time and location Exif data to an existing session in the database
  • The underlying Flask app, hosted on Digital Ocean
  • Data visualisation of surfing throughout the year including charts for sessions per month, cumulative sessions throughout the year for all years covered in your database
  • Daily emails featuring sessions on that day in previous years

Currently I’m the only user of Surfcrunch, which makes it much easier to make tweaks and updates whenever I want to. I think it would be valuable to a decent amount of people, but I’m not in a position to spend a lot of time developing it.

For now, I’m really happy for it to sit online and keep being my personal surf log and provide me with something to play around with whenever I get the urge to do some Python coding.

Leave a Reply

Your email address will not be published. Required fields are marked *