Inspiration
The inspiration for CruxMan came from my partner and I’s current climbing fixation. As we have improved our climbing ability, I notice I tend to spend a significant amount of my time attempting different climbs above my comfort zone and ultimately end up failing on the same set of moves even after trying various techniques and body positions. After continuously failing, I eventually realized that the problem was not a technique issue or failure to understand the climb, but simply lacking the strength to hold onto specific holds to maintain a stable body position. My partner and I took this problem and created CruxMan, a climbing simulation tool that analyzes body metrics and climbing position to determine the force required to hold onto a hold and the specific muscles required to do so. Ultimately, CruxMan was our way of combining physics, technology and our fun hobby to help climbers better understand body mechanics and determine what muscles to train in order to send their next climb.
What it does
CruxMan is an interactive climbing simulation and force analysis application that allows users to simulate realistic climbing positions and movements and analyze the force and muscles required to perform them. When using CruxMan, the user can customize the climbing environment by adjusting the wall angle as well as the height and weight of the climber. The app also includes a wide variable of holds such as jugs, crimps, and footholds that can be easily placed anywhere on the wall
CruxMan has two main editing modes: Select Mode and Place/Move Holds Mode. In the Place/Move Holds Mode, the user can place, arrange, or delete holds to create a custom climbing move. With the Select Mode, a climber can be dragged onto the wall where it automatically stands upright once touching the floor. The wall also has built in boundaries in place to prevent the climber from falling off the side or being thrown outside of the wall. In Select Mode, the user can also click and drag the climber's limbs towards a hold, allowing the climber to realistically “grab” or stand on them to create different body positions. Once the climber is moved, it behaves like a ragdoll to better simulate gravity and human movement, while additional constraints are put into place to prevent the climber's limbs from moving or stretching beyond human capability. The user can also move and lock the climber's torso in place to mimic more difficult climbing positions that shift force onto different holds and muscle groups.
On the right side of our application lies the force analysis system. By toggling on the Hold Force Selector, you are able to click on specific holds and press the “Run Analysis” button. By doing so, the app calculates the amount of force in pounds placed on that hold by taking into account wall angle, climber height and weight, type of hold, and body position. It also displays the four main muscle groups being used, along with their activation percentages and their force output contributing to the total. Finally, the app generates a biomechanical breakdown, explaining how the position of the climber determines the force distribution and why different muscles are activated more than others.
How we built it
The frontend uses Next.js 16 with TypeScript, Tailwind CSS, and HTML5 Canvas for the kilter board wall and stickman. The ragdoll physics are powered by matter.js and we had to build a constraint network connecting the head, torso, arms, and legs, then layered custom logic on top of that. We had a larger radius for selecting the hands and feet, conditional pelvis anchoring, as well as a standing rest pose that activates when the climber touches the floor. We used Gemini 3.1 Flash Lite API to power our force and muscle activation analysis. It receives a structured prompt containing the climber’s joint positions, every hold’s type in use, wall incline, height, and weight. We also engineered the system prompt to encode climbing biomechanics. Gemini then returns a strict JSON schema that the frontend renders easily. MondoDB Atlas stores every analyzed pose including climber stats and the force analysis.
Challenges we ran into
Our first stickman was way too big and impossible to click precisely. We spent hours tuning the hit-detection radii, joint stiffness, and drag behavior until the UX felt natural and easy. We settled on prioritized hit detection for the hands and feet and isStatic-toggling during drag. Getting the limbs of the stickman to cleanly attach to holds was a difficult venture and required custom constraint creation and removal on every drag event plus visible feedback for the users. Getting Gemini to return consistent, climbing-accurate force estimates required heavy iteration on the system prompt and explicit encoding on how each type affects which muscles.
Accomplishments that we're proud of
We’ve created a genuinely fun and intuitive experience that feels easy to use. Drag-and-drop stickman placement and snap-to-hold + ragdoll physics makes the climber feel like a real puppet you can play around with and adjust freely.
AI Biomechanics Engine: Within seconds after clicks RUN ANALYSIS, you get accurate force estimates across 11 muscle groups. The analysis successfully reflects hold type and wall incline.
Polished and Professional UI: Kilter board aesthetic, climbing-orange accents, three-panel layout, color-coded hold types, and smooth interactions throughout.
Complete stack spanning physics, AI, and database, all built and integrated within 24 hours.
What we learned
AI can be incredibly powerful in domain-specific contexts. Generic prompts gave us extremely inaccurate results while encoding climbing knowledge directly into the system prompt turned Gemini into a genuinely useful biomechanics estimator. Physics tuning can be just as much of a UX problem as it is a math problem. The right stiffness and mass values came from testing how it felt more than from a formula. We also learned that sometimes it's best to cut losses early in order to ship a functional prototype. We initially wanted to use Snowflake, but it came with a lot of authentication and fetch errors. Pivoting to MongoDB was one of the best decisions we made mid-development.
What's next for CruxMan
In the future, we would like to make CruxMan a more realistic climbing simulator that takes into account more intricate moves and body positions. This is possible by improving the physics and biomechanical logic and calculations within our app to better mimic real climbing movement. We would also like to add a grading scale for the custom climbs as well as creating a grading scale for the selected hold or move itself. Personalized training recommendations based on the climbers weaknesses is another feature we would like to implement. The end goal of this application would be for users to upload or scan real climbing wall layouts from their home gyms, allowing them to be virtually recreated and analyzed within the app. Ultimately, we hope that CruxMan becomes a widely used tool within the climbing community, helping climbers train more efficiently, prevent injuries, and better understand the biomechanics of climbing.
Built With
- gemini
- mongodb
- next.js
- node.js
- react
- tailwind-css
- typescript

Log in or sign up for Devpost to join the conversation.