Climb Tracker for Android and Android wear

Here is how I used Android Wear and Firebase to build from scratch an indoor climb tracker.

Install it on Google Play, read the code on GitHub.

I learnt a few things from a first prototype I did:

  • I do not want to use my phone in a climbing gym,
  • I should not expect to have connectivity in a climbing gym,
  • I care more about the grades of the routes I complete than the routes themselves,
  • The gym’s routes are changing every few months, too quickly to maintain a database.

watch3_framed

So I decided simplify the app to its bare minimum by focusing on this scenario:

From my watch, I log the grade of the routes I complete.

After the session, I can see a list of my climbs on my phone.

Yes, the main scenario uses an wearable device: climbing with a smartwatch is not a problem, it’s always available and does not require to manipulate a phone.

Screenshot-phone1_framed

Also, it’s designed offline first: The watch does not require a phone to be nearby, or any internet connection. Once it gets close to its phone, data is transferred from the watch to the phone (once again, no internet required). The data is then stored locally on the phone and when connectivity is available, is synced to a server.

I then added the ability to add a climb from a phone, as I suppose that the intersection between climbers and Android phone owners is bigger than between climbers and Android wear owners 🙂

The grading system can be selected from the Settings menu and the user’s position is recorded when saving the climb, for potential future use.

Climb Tracker architecture
The Climb Tracker technical architecture

Technically, it is a native Android app, mostly because I needed to use the Wear SDK, but also because I wanted a reliable app experience and not struggle to imitate a native look and feel using web technologies. Transmitting data from the wearable to the phone uses the Android Wear DataApi.

The rest of the app is using the Firebase SDK with offline mode enabled: Firebase is deciding by itself when to sync the data with its server. I did not write any line of data sync or server-side code. And I loved it.

The app is following the latest permissions guidelines: asking them when opening the application, and being flexible regarding the location permission: if not granted, the location is not recorded but the app keeps working.

Get it on Google Play
The app is released on Google Play. It is open source and released on GitHub. Of course, I accept suggestions, bugfixes and pull-requests.

For example, would you like to translate it in your language?

Indoor climbing tracker

Update: I built a new version of the app as an Android and Android Wear native app. The one described on this page is not maintained anymore.

I have been doing outdoor and indoor climbing for five years now. While I enjoy a lot rock climbing and multi-pitch outdoor routes, I also practice every week indoor climbing at my local climbing gym.

Tracking a new Climb
Tracking a new Climb on mobile

I use Foursquare everyday, RunKeeper when running or skiing, a diving computer when diving, but I have nothing to track my indoor climbs.
We were thinking about this with Pierre, a climber friend, and I started working on it as a side project. We imagine it very simple:

  • select a climbing gym
  • “check-in” on routes after each climb saying if it was lead or top-rope, leaving a comment. Of course, gyms and routes need to be user generated.

The value would be that you can track your progress and the app could give route suggestions. You could leave and get comments and tips on routes.

Climbing log on Chrome Desktop
Climbing log on Chrome Desktop

I had great feedback from the /r/climbing reddit community. Telling me if this kind of app would be useful, what people would use it for and pointing me to similar projects.

Technically, the prototype app is a client-side web application, based on Parse because I didn’t want to bother building once again a new dumb backend server that is just storage and user credentials. I like Parse’s phylosophy of being a “backend as a service”, they are right to think that a lot of web or mobile application are structured the same way and do not have a lot of server-side logic. Focusing on the front end was what interested me with this project, and Parse allowed me to prototype things fast and be sure that it is reliable for the future.
It is generated using Yeoman (so uses Bower as client-side library management tool and Grunt as build tool), it uses AngularJS and bootstrap 3.

I think I did the mistake to think that I could target mobile and desktop with the exact same responsive website, while this may not be false, I think I would better have focus only on the mobile application and build a dedicated mobile UI using a mobile web framework, such as ionic framework. This may be the next step.

It is available online at and still needs a nice name and logo.

Try it now