Data store for a personal climbing log. This repo holds a single file, data/log.json, which is read and written by the /climbing/edit editor on masonmil.com, and read by the public /climbing page. There is no app or build in this repo — it exists so the log data has its own git history.
{
"nextClimbID": 29,
"climbs": [
{
"id": 27,
"name": "A Wok to Remember",
"board": "MoonBoard 2019",
"grade": "6a+/V3",
"nextSessionID": 1,
"sessions": [
{ "id": 0, "timestamp": 1775589480, "attempts": 2, "incline": 40, "sent": true, "location": "Planet Rock Ann Arbor", "notes": "optional" }
]
}
]
}- Key order is exactly as shown.
notesis the last session key. boardis one of"MoonBoard 2019","MoonBoard 2024".gradeis one of"6a+/V3","6b/V4","6c/V5","7a/V6","7a+/V7".timestampis Unix epoch seconds.attemptsis an integer from 1 to 999.inclineis an integer from 0 to 70.sentis a boolean.locationis required on every session and is one of"Planet Rock Ann Arbor","Movement Long Island City".- Every climb has at least one session; a climb with an empty
sessionsarray is invalid. notesis optional and left out when empty. When present, it is trimmed, 1-280 characters (Unicode code points), and may contain line breaks. Notes are public.- Climb IDs come from
nextClimbID; session IDs come from the owning climb'snextSessionID. Both counters only increase and are never reused, even after deletion. climbsare sorted bynamein code-point order. Each climb'ssessionsare sorted bytimestampascending.- The file is serialized with 2-space indentation, non-ASCII characters written as-is, and a single trailing newline.
- A climb is identified by
name+board, compared exactly and case-sensitively. Duplicate name + board pairs are allowed.
All edits go through the website's /climbing/edit editor, which is private and requires GitHub sign-in as the site owner. It reads and writes this file via the GitHub Contents API using a fine-grained PAT scoped to Contents read/write on this repo. Every save is one commit here, with a message describing the change (e.g. Log session: <climb name>).
Do not hand-edit data/log.json directly — the editor is the source of truth for the file's format and will re-sort and re-serialize it on the next save regardless.