I first made kilterboard.app in early 2021, the official Kilterboard application has since improved a lot. I'm writing this post to share my project, and in the future I hope to document more of the interesting challenges I faced while building it.
I've been obsessed with rock climbing for years now! It all started when a friend brought me along to a climbing gym, ever since you'll find me at the gym several times a week.
A couple of years ago, the gym visit installed a brand new Kilterboard, which combines light up rock climbing holds with a mobile application, and lets you climb routes made by people all around the world.
In a fairly large climbing gym you might have 50+ routes, which after a while need to be taken down, to make space for new routes to be set. The Kilterboard has thousands, and they're never removed. Over the years the community has built a huge collection of quality climbs, and accurately graded their difficulty.
The whole experience is great, you rock up to the board, connect your phone via Bluetooth, and you have thousands of routes to climb. However I felt the app left a few things to be desired, and I wanted to try improve it. Here was my hit list:
The app was slow to load, starting the app would take 20-30 seconds.
The search experience was a little confusing, it always felt tricky to hunt down a route I'd tried before.
Sharing routes with friends was an involved process. You would have to share the climb name, grade and the angle of the board! I'd love for there to be a link.
So, in typical me fashion, in early 2021, I bought the domain kilterboard.app and built my own version!
The current website is very rough around the edges, and I don't expect anyone besides myself is using it. But I had a blast reverse engineering the app and building it.
For now this post is just a placeholder, and when I get more time I want to dive into a few of the interesting challenges I faced while building this.
How I extracted and analyzed the climbs from the application.
Reverse engineering the Bluetooth protocol & re-implementing using Web Bluetooth API
Automating the collection of the data with virtual android devices, and serving them from Supabase
Perhaps the writing of these posts can motivate me to finally polish off the last few tasks before I'd be willing to share it with my climbing friends.