Conversation
The Tours surfaces now use the same building blocks as the rest of the planner: tinted head bands, eyebrow labels, white field boxes and pills, place-style list rows and the inspector frame for the map detail. - Tour detail on the map uses the place inspector's frame, head band, labelled metric fields, collapsible track colour and footer buttons - Tour rows in the Plan sidebar and the Tours tab look like place rows, with the facts as pills and a "+" that opens the trip's days as a menu - Tours tab rails get the planner head bands, editor fields and waypoint rows in the day card style; notices share one look - Map hint shortened to one line and the empty state reads as a single sentence in all locales - New "tours" mascot scene with a pack, a trekking pole, hills and a trail, used by the Tours empty states
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Enable non-motorized day-tour planning in trip context, with a clear distinction between a route being planned and a Tour being attached to a trip day.
Included scope
Why an Add-on, not a Plugin
Tours is an optional first-party trip-planning capability that extends the existing Places and day-assignment workflows, permissions, map, and offline trip bundle. It belongs to TREK's built-in Add-on lifecycle rather than the Plugin system, which is intended for separately supplied integrations and extensions.
Architecture
Tours are an isolated bounded context. Place serves as an internal geometry carrier; Tour metadata and ordered points live in
tours,tour_waypoints, andtour_types. No Tours columns are added to Places. Add-on gating preserves legacy behavior when Tours is disabled.Non-Goals
No live navigation, GPS tracking, social trail network, Wanderer connector, or additional Tour type is included in this PR.
Database and migrations
The migration lineage preserves upstream migrations through 258 and adds Tours migrations 259–262. The additions cover Tour types, Tour facets, ordered waypoints, and hiking-routing difficulty. Legacy/frozen lineage states use a safe bridge strategy.
Permissions
Tour creation, editing, and import use
place_edit. Attaching or removing a Tour assignment usesday_edit. Mobile Tour details remain View/Attach-only.Tests and validation
The reviewed public diff contains 202 changed files.
Local validation ran on macOS with Node.js 22.23.1 and npm 10.9.8. The pinned public workflows use Node.js 24 for the monorepo jobs and Node.js 22 for Plugin Facts and the standalone Plugin SDK.
lint:pages, current-branch Server and Client check-only ESLint, andgit diff --checkon the public diff passed. ESLint reported warnings but no errors; no auto-fixing lint was run.isTourPlaceand listener-count fixture updates, thetours:changedregistry classification, and the page-pattern violations. The applicable targeted checks passed after those repairs. The monolithic Server and Client suites were not rerun afterward, so these are not claimed as post-repair full-suite results.PlaceInspectorbaseline expectation and the full-suitePLACE-020socket reset remain unrelated baseline/environment findings. The 135 Shared locale-entrypoint Prettier findings are unchanged from the pinned base; no formatting was applied.Hosted GitHub Actions have not run for this change; no hosted CI pass is implied.
Review order
place_editversusday_edit, atomic save/import, and deletion/invalidationKnown limitations / post-MVP
Follow-up candidates include waypoint drag, Return to start/reverse/out-and-back, OpenHikingMap or other overlays, GPX conversion, external navigation handoff, and Wanderer integration.
Review questions for Maurice
place_edit/day_editpermission boundary correct?