SendLog is an offline-first iOS app for home boards, spray walls, and training resets. Photograph your wall, detect holds locally, build climbs directly on the image, log your sessions, and keep old problems useful when the set changes.
The app is built for climbers who treat their board as a living training tool: holds get added, partial resets happen, projects come back, and the most useful data is the stuff that survives all of that.
Most board apps are good at storing a climb once. SendLog is designed around what happens after that: you change the board, add a few holds, replace part of the set, and still want your old climbs, logs, and training history to make sense.
Create a new set from an existing wall and bring old climbs forward. SendLog automatically matches holds from the old set to the new layout using position, wall geometry, and hold appearance, then lets you review the imported problems before saving them.
This is the core idea: your climbs should not disappear just because the board evolved.
Hold detection runs on-device with the bundled Core ML model. No cloud upload, no server dependency, and no internet requirement. After detection, every hold box can still be tweaked manually: add missed holds, move boxes, resize them, or delete noisy detections.
Use the analysis view to see which holds appear most often across a set. The heat map makes it easier to spot overused holds, neglected board zones, and opportunities for more balanced setting.
Log attempts and ticks directly from saved problems. SendLog keeps climb-level history and session context so your board becomes more than a photo with colored boxes.
Export and import complete JSON backups, including walls, resets, holds, problems, logs, and wall images.
- Manage multiple walls and multiple resets per wall.
- Mark the climbable wall area to keep hold detection and matching focused.
- Detect holds fully offline with Core ML.
- Manually add, remove, move, and resize hold boxes.
- Create problems by tapping holds on the wall image.
- Save grades, notes, primary holds, and secondary/foot holds.
- Import old climbs into new sets with automatic hold matching.
- Analyze hold usage across a set.
- Log attempts, ticks, and sessions.
- Search and filter the wall, problem, analysis, and log views.
- Export/import full backups for portability.
- Import a wall photo.
- Draw or adjust the wall area.
- Run local hold detection.
- Tweak any detected holds that need cleanup.
- Build climbs by selecting holds on the wall.
- Log attempts and sends over time.
- When the wall changes, create a new reset and import old climbs into the new set.
- Use hold analysis to understand what your setting has been emphasizing.
-
Install full Xcode from the App Store.
-
Install XcodeGen:
brew install xcodegen
-
Generate the Xcode project:
xcodegen generate
-
Open the project:
open SendLog.xcodeproj
-
Choose an iOS Simulator or device and run.
- Minimum deployment target: iOS 17.
- UI: SwiftUI.
- Hold detection: bundled Core ML model, fully local.
- Persistence: local app storage with JSON backup export/import.
SendLog is designed to work offline. Wall photos and climb data stay on the device unless you explicitly export a backup.



