One library, everywhere
EpicRide's Library used to be two tabs and a scroll: everything you had saved, fetched in one go and filtered in the browser. Today it becomes a primitive — one component that is the Library page, the picker inside the planner and the roadbook editor, and the save form everywhere something can be saved. And rally roadbooks move into it: a saved book is now a library record like a route or a ride, so it can be shared, exported, searched and linked to the track it came from.
Search that was always there
The catalogue behind the Library had a full search plane for months — free text over names, descriptions and tags on a proper index, tag filters, paging — but only on a door the desktop could not open. That plane now sits on the endpoint every client uses, so the desktop and the phone can ask for "gravel" and get the ride whose description mentions it, page through a long history, sort by length, and scope a query to a map extent or a date window. Nothing about the old answer changed for callers that never asked to page.
One verb set, computed
What you can do with an item — show it on the map, load it into the planner, insert it into a route, edit its geometry, generate a roadbook, share, export, delete — used to depend on where you had clicked. It is now one table, evaluated by a pure function of the item, the mount and your role, so a saved route offers the same verbs in the list, in a picker and on its own page. A verb your plan does not include is shown locked, not hidden. Select several items and the bulk bar offers only the actions that apply to every one of them — never a partial apply, because a bulk action that quietly skips a row is how a rider loses data they believe they moved.
Filters in the address bar
The Library page keeps its query in the URL. Search for a word, pick a category, hit "Search this area", copy the address, paste it in a new tab: the same list. A filtered library view is a link you can send.
Roadbooks are library items
Until now a saved roadbook lived in a small store beside the library: capped, unshareable, invisible to export. A roadbook is now a record of its own, with the track it is projected onto as its geometry and the book in its payload, linked back to the item the track came from. The editor's first save opens the Library's save form; later saves update the record in place. Books saved before today are moved in the first time you open them — nothing to do in advance, nothing lost. And because a roadbook is now the same kind of thing as a route, sharing it is the sharing you already have: the person you send it to sees the book and can download its track.
Lessons
The interesting bug was found in the browser, not in a test: saving a book in place was overwriting the tags typed on its item page, because the save sent a tag list it had no business sending. The fix is a rule — a save in place carries the book and its track, and nothing that belongs to the record — and a test that pins it.
Dig deeper: the desktop client and the roadbook editor.
