| Target Start | Trail / Stop | Unload / Prep (min) |
Gear | Distance (mi) |
Pace (mph) |
Est Time | Est Finish | Load Up (min) |
Travel Next (min) |
Notes |
|---|
Riders use the planner anonymously — plans live in this browser only, with share URLs and JSON export/import for moving between devices. Admin login unlocks year-catalog management.
These items appear as checkboxes at every trail stop. The list is saved to this browser and applies to every plan you open here.
| Target Start | Trail / Stop | Unload / Prep (min) |
Gear | Distance (mi) |
Pace (mph) |
Est Time | Est Finish | Load Up (min) |
Travel Next (min) |
Notes |
|---|
Operations below act on the year selected at the top right. The shipped
catalog lives at data/<year>.json in the repo; admin
edits are stored as a server-side override in the year_overrides
table and take effect for every visitor immediately.
<year>.json from your computer. The file
is validated, saved as a server-side override, and shown immediately
to every visitor. Use this when you've prepared a new year's
catalog (or pulled an updated one from the repo) and want it live
without rebuilding the container.
<year>.json. Commit it to data/ in
the repo to ship those edits to fresh deployments.
travelMatrixMin — once present, reordering trails
in the planner auto-updates each "Travel Next" value. Typically
run once when first publishing a year.
data/<year>.json. Use this if a
test edit went wrong — riders see the official catalog again on
their next load.
{
"year": 2027, // required, number
"label": "Judgment Day 2027", // shown in the header
"eventDate": "2027-10-23", // optional YYYY-MM-DD; used for day-of-week labels
"startTimeDefault": "05:40", // HH:MM, depart-home time
"homeToFirstMinDefault": 52, // travel home → first trail
"lastToHomeMinDefault": 70, // travel last trail → home
"paceMphDefault70": 6, // default mph for 70mi
"paceMphDefault100": 7.5, // default mph for 100mi
"prepDefaultMin": 15, // default minutes for "Unload / Prep" (post-arrival)
"loadUpDefaultMin": 15, // default minutes for "Load Up" (pre-travel)
"trails": [ // required, ordered by defaultOrder
{
"id": "northshore", // stable slug
"name": "Northshore",
"address": "2599 Edgemere Rd, Flower Mound, TX 75022",
"loopsNote": "Loops 4,3,2,1…",
"miles70": 12, // mileage for 70-mile route
"miles100": 15, // mileage for 100-mile route
"defaultOrder": 1, // 1..N
"reorderable": true, // first 3 are usually true
"defaultTravelToNextMin": 24, // fallback if no matrix
"lat": 33.0306, // optional; populated by "Compute Travel Matrix"
"lng": -97.0581
}
// ...one entry per trail
],
"travelMatrixMin": { // optional; populated by "Compute Travel Matrix"
"northshore": { "knobhills": 24, "corinth": 23 /* ... */ }
// ... full N×N (excluding self)
}
}