lemeryfertitta / climbdex Goto Github PK
View Code? Open in Web Editor NEWSearch engine for training board climbs
Home Page: https://climbdex.com
License: MIT License
Search engine for training board climbs
Home Page: https://climbdex.com
License: MIT License
For a given product there can be multiple sizes. For example, the "Kilter Board Original" product (ID = 1) has the following sizes:
For a given product size:
I looked further into your great project and thought about some improvements. With my basic understanding I could try to implement them but I am not sure if it actually works.
Do you have anything planned in that direction?
Some widths and heights of the embedded instagram videos are a bit awkward to view, either on desktop, mobile, or both. Its possible that getting the post metadata could allow for better sizing, though my initial look into this wasn't very fruitful.
Using a custom slider, we could have grade range in a single input. This is probably more intuitive and also frees up some space on the UI as we can compress one line into two as discussed in #39.
The linked plugin will probably be fairly easy to use, but I'd like to make sure that the style matches well, so it may require some CSS customization to get it looking just right.
Currently, the app is being served as a static website through Github Pages for cost and convenience. The data can only be updated via commit and may not scale with more boards and layouts.
In the beta_links table, less than 1% of the links are from non-instagram sources. The only other sources I've seen so far are TikTok and Kaya. In theory, this could be supported by Climbdex, but given the rarity of these beta sources, this seems very low priority.
For now, beta_links not matching https://www.instagram.com%
are filtered out.
Tension should be the next highest priority, but once generic board support is made, it should be relatively effortless to support all of the existing boards that run the Aurora software.
Pinching to zoom (to see the climb better, as the holds are pretty small on a mobile screen) causes the prev/next swipe to register. I think some tweaking needs to be done to the swipe logic to avoid conflating with the pinch to zoom gesture
I think it would be useful to utilize a library for gestures, e.g. hammer.js
After using the TB2 a bit, something that would be nice is the ability to filter climbs that only use wood hands for when skin is low. It is possible to get a subset of these climbs in the app by creating a wall which only has the "woods" set, but this is less ideal when you want the option of using plastic and wood feet while using only wood hands, as this will filter out all plastic holds in general, even if they are just feet.
This might be an easier feature to implement after #12 is implemented.
Beta videos are stored in the beta_links
table and could be embedded on the page to make for easier viewing.
So I know the individual apps have their own way of tracking climbs over time. I really like the idea of open sourcing some of that, both to consolidate the data in one place and to allow for more refined training progression. Is this planned?
I'd like to spend some time here when I can, but right now can't commit too much. I'm more proficient in C and Python, but some older experience with various OOP languages. Also interested in learning some of the others here of course.
This is probably the last major issue before Climbdex can be used without having to open the apps during most sessions.
In addition to some UI on the results page, Boardlib needs to be updated to include calls to write to the Aurora central db: lemeryfertitta/BoardLib#20.
Discussed in #65 (comment)
When using the "back to filter selection" link in the case where history.back
is not used (e.g. a shared search result) we populate the filter page URL with all of the current params. Most of these params are invalid for that URL, so we should likely just trim this to contain only the relevant params.
This is only a small cosmetic cleanup, so probably not a super high priority, but should be an easy fix.
Sets are supported when choosing a board and hold filtering, but the search results do not filter out climbs which wouldn't work on the combination of sets. My initial guess is that the frames of each climb have to be inspected to see if each of the holds are available within a given combination of sets.
Not sure if this was already displayed or not.
Tension uses a separate icon to indicate that a climb is without matching holds. See Screenshot of the app.
I think they have some regex filter on the route description and search for keywords like "no matching / don't match" and then they add this icon next to the route name. There is no toogle to add this when adding a new route.
since most of the harder routes are without matching, this indicator would be helpful.
The search results page will seem like its loading when the search API has actually returned an error. For example:
It would be more useful if there was an error message, possibly with a link to report the issue here.
In addition to the Bluetooth feature it would be great to also display the mirrored version of a climb (only if the board is set in mirrored layout), which will add another complexity in the navigation layout: see Issue #46 for UI suggestions
curious how you'd feel if we added the grade accuracy of a climb in the results list? it feels a lil confusing if someone filters by grade accuracy, but that value isn't shown to a user in the results ๐ค
that's exposed via the quality
property in the api, right? would love to contribute if possible
Routes are a sequencing of climbs (frames
) with a certain speed (frames_pace
). In order to properly display a route, there should be a playback mechanism to see all of the frames for the route. One idea would be a slideshow style that allows for clicking through the frames.
For now, routes have been removed from the data to avoid confusion.
Marking this one as low priority given that there are very few routes on the board and they seem to be significantly less popular than boulders.
The 12x14 board isn't listed on the Kilter website, but in the database, is_listed is true and everything about the board appears normal, except for the image, which has excess empty space and holds above the top row.
Steps to reproduce:
The min/max grade are set to "undefined" which causes a 500 error on the search API call.
As discussed in #39, we can free up some space on the filters page by having an "advanced filters" collapse.
For now, I'd like to move Min Rating
and Grade Accuracy
to this new collapse. Another future candidate for this would be a Setter
search. This would be a pretty easy add, so we can tack that one onto this issue as well.
If logged in, it would be nice to show the personal history of this climb below the drawing.
For example: No. of Attempts / No. of Sends or a detailed view.
Maybe also including the dates. This would make projecting sessions more helpful. Right now we don't have any idea how often we tried a boulder or how long we are projecting it.
for example
02.10.23: 4 Attempts
10.10.23: 4 Attempts
05.01.24: 3 Attempts
01.02.24: Send
At the moment I think only sends (+ attempts) are available via the personal logbook?
At least one climb is missing the start holds which are displayed correctly in the app.
So far only one climb has been found with this issue. Please report any other instances here.
Go to this results page and scroll down to "Casual in Wyoming." Click on the climb to display it.
The start holds have a role ID of 20, which is not the correct role ID for start holds of the given layout. This seems like an issue in the data, but it is being handled differently by the official apps. To support this, Climbdex would need to match hold filters against all role IDs of the same role, instead of just roles of a given layout. Given that there is only one known climb with this issue and the fix is non-trivial, this bug is low-priority.
Currently only the Kilter Original layout is supported. Rather than hardcode the layoutId, all layouts should be supported (e.g. Kilter Home). From a UX perspective, this can be similar to switching the product size.
Branching from #16 - it would be nice to be able to get the previous/next climb or beta video in the list using left/right swipes on mobile, respectively. Additionally, on desktop it would be nice to use the left/right arrow keys for this purpose.
This should be pretty straightforward, using something like this code to detect the left/right swipes on the climb or beta div, then behaving similarly to the prev/next buttons.
The Tension board has "Classics" which seems to be intended to be similar to the Moonboard "benchmark" feature. In the database, these climbs are distinguished by climb_stats.benchmark_difficulty is not null
.
Interestingly, Kilter has not chosen to display Classics yet, though there are 112 climbs in the database that are marked with a non-null benchmark_difficulty.
Some considerations:
Interested to hear other opinions on this one, I have only used the "Classics" feature on the OG Tension board for a session or two. It was nice but didn't seem to have the level of importance that Moonboard benchmarks do.
The create
page allows for climbs to be illuminated but not saved. After completion of lemeryfertitta/BoardLib#20 they could be uploaded to the Aurora db. There would need to be some UI form for gathering the required fields before uploading.
The create form can be a modal, similar to the login form.
Many of the problems are garbage problems, not real climbs. Additional filtering on ascent counts and/or quality ratings may help to avoid too many of the garbage problems cluttering the results. The climbs should also display angle/grade info and potentially be filterable on these fields as well.
Currently, you can match strict or any, but it is also useful to be able to filter out feet when searching. This could be improved with an "only hands" color match option.
stumbled upon https://kilterboard.app/ and this posts from @Georift
https://tim.wants.coffee/posts/kilterboard-app/
So somebody already figured out how to control the aurora controler via WebBluetooth API.
A combination of climbdex + WebBluetooth would be nice.
@lemeryfertitta: feel free to remove this issue if this is out of your scope :)
I also have some features in mind which would make group-sessions a lot more fun, which is a pain right now if you have 5 people using 5 different smartphones โฆ but this is probably a future-future add-on
From #45
Very simple one, just querying by name like '%substring%'
should probably be good enough. Needs a new input on the /filter
page and a new query param passed to the results.
As a user it would be awesome to have two additional filters that would enable looking for climbs of a specific nature (ie. long/short, big moves/small moves etc) I think two additional filters would enable this pretty well.
Filter by number of hand holds
Filter by hand hold distance, This one seems hard to achieve since this data is not in the database from what I can tell.
sick repo โจ curious if we could convert the filters selection page to a persistent filters search bar that appears above the results page? this would make it easier for a user to update their search criteria without having to navigate between the pages.
Climb stats are available via the info API. This includes the precise quality and difficulty distributions, as well as all of the ascents (users, comments, etc.).
The search results should be sortable by multiple values with ascending and descending options. Initial sortable values:
Similar to the official apps, ticks which have is_mirror=true
should be indicated differently than ticks with is_mirror=false
.
The is_mirror
field is return in the by the Boardlib get_logbook
call. In the apps, a backwards checkmark is used to indicate mirror ascent, and the checkmark and backwards checkmark overlapped indicates an ascent of both the mirror and non-mirror of a climb. Something similar could be done for Climbdex, but an SVG will be needed instead of the unicode symbol.
Maybe using https://icons.getbootstrap.com/icons/check/ and then manipulating the SVG as needed for the mirrored/doubled versions.
There is enough data in the sqlite databases to support all of the aurora boards and their layouts generically. This is a larger issue that can be broken down into some smaller ones, e.g. supporting a new layout (e.g. Kilter home wall), supporting a new board type (e.g. Tension).
Just starting a catch-all thread here for various bluetooth-related improvements. This one can be used for discussion and spin-off issues can be created as needed. Some ideas I had immediately from using it for the first time:
Branched from discussion in #16.
As is possible in the apps, it would be useful to be able to filter out climbs which you have already done. This is possible using both the sync and the logbook APIs, though the sync API would require some storage, which would greatly increase complexity.
One idea to do this without introducing storage of user data is to use the logbook API. The user could optionally provide a username and password on the board selection screen. Then a token can be fetched and stored in the query params when filtering. With a new filter to remove ticked climbs selected, the results API would fetch the users logbook, then remove those climbs from the fetched list.
It would be convenient to be able to automatically illuminate climbs after switching on the app. We could use the lighbulb to toggle "connected/disconnected" without actually disconnecting. We would want a visual indication of this, and we can use the filled lightbulb icon to do so (and maybe switch the button to be filled blue instead of outline).
Split from #45
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.