Break up route-features into focused specs, add new changes
Archive the monolithic route-features spec and replace with 9 focused OpenSpec changes: multi-day-routes, waypoint-notes (with POI snapping), undo-redo, local-dev-stack, route-sharing, route-discovery, activity-photos, osm-overlays, plus the existing changelog and komoot-import. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9c7891402f
commit
0a330e4466
46 changed files with 2968 additions and 0 deletions
62
openspec/changes/route-discovery/proposal.md
Normal file
62
openspec/changes/route-discovery/proposal.md
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
## Why
|
||||
|
||||
The Journal currently has no way to discover routes other users have published.
|
||||
Each user's route list is isolated -- you can only see your own routes. Once
|
||||
route-sharing adds public visibility, there needs to be a way to actually find
|
||||
those public routes. Without discovery, making a route public has no effect.
|
||||
|
||||
Outdoor platforms live and die by discovery. A hiker planning a trip to the
|
||||
Harz Mountains should be able to pan the map there and see what routes exist.
|
||||
This is the most natural interface for spatial data: a map.
|
||||
|
||||
## What Changes
|
||||
|
||||
- **Explore page**: A new `/routes/explore` page in the Journal with a full-page
|
||||
Leaflet map. Users pan and zoom to browse public routes in any area.
|
||||
- **Bounding box API**: A server endpoint that takes the current map viewport
|
||||
bounds and returns public routes whose geometry intersects the bounding box,
|
||||
using PostGIS `ST_Intersects`. Results are limited to 50 and geometries are
|
||||
simplified for transfer performance.
|
||||
- **Route polylines**: Public routes rendered as clickable polylines on the
|
||||
explore map. Clicking a route shows a popup with name, distance, elevation
|
||||
gain, author, and a link to the route detail page.
|
||||
- **Spatial index**: Verify (or create) a GiST index on `journal.routes.geom`
|
||||
to keep bounding box queries fast.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `route-discovery`: Map-based exploration of public routes via spatial queries
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `journal-navigation`: Add explore link to main navigation
|
||||
- `map-display`: Route polylines with interactive popups on explore map
|
||||
|
||||
## Non-Goals
|
||||
|
||||
- **Full-text search**: No searching routes by name or description. Map browsing
|
||||
is the only discovery mechanism for now.
|
||||
- **Filtering**: No filtering by distance, elevation, activity type, difficulty,
|
||||
or tags. These are useful but add complexity -- defer until real users ask.
|
||||
- **Recommendations**: No "routes you might like" or personalized suggestions.
|
||||
- **Clustering**: No marker clustering for dense areas. The 50-result limit and
|
||||
geometry simplification keep the map readable. Clustering can come later.
|
||||
- **Federated discovery**: Routes from other Journal instances are out of scope.
|
||||
This only covers routes on the local instance.
|
||||
|
||||
## Dependencies
|
||||
|
||||
- **route-sharing** (route-features change, section 1): The `visibility` column
|
||||
on `journal.routes` must exist before this change can query for public routes.
|
||||
Without it, there are no public routes to discover.
|
||||
|
||||
## Impact
|
||||
|
||||
- **Database**: GiST spatial index on `journal.routes.geom` (may already exist)
|
||||
- **New route**: `/routes/explore` page + API endpoint
|
||||
- **Navigation**: Explore link added to Journal nav
|
||||
- **Packages**: Uses `@trails-cool/map` (MapView, RouteLayer) -- may need a new
|
||||
component for interactive route polylines with popups
|
||||
- **i18n**: New keys for explore page UI (en + de)
|
||||
Loading…
Add table
Add a link
Reference in a new issue