Summary
The current search and results experience has grown awkward as the app added trip
modes, languages, and a map. The header carries a tagline and an absolute "data
updated" timestamp, the search form is a tall card that doesn't scale to per-mode
fields, and there's no first-class way to browse results on the map or to
filter/sort/page a long list. This issue tracks an end-to-end overhaul of search,
results, and the map view.
Motivation
- Navbar is cluttered — tagline + absolute timestamp add noise and don't help the user act.
- Search form doesn't scale — a single tall card can't cleanly show mode-relevant fields plus advanced filters.
- Results are hard to navigate — no place filter, no sort, no list/map toggle, and long lists render all at once.
- Map is an afterthought — no map-first browsing, no pin tooltips/popups, and the map height is a flat
100vh rather than the real viewport.
Proposed changes
Navbar & search
- Slim the navbar to logo + name; drop the tagline and absolute timestamp.
- Show a relative-time "data updated" pill (
Intl.RelativeTimeFormat); turn the language selector into a globe pill.
- Move the MAX pass selector into the search bar.
- Replace the tall form card with an Airbnb-style search pill: inline mode-relevant segments, advanced filters in a popover, search + surprise actions on the right.
- Turn "How does it work?" into a hover/focus card beside the tabs.
Results
- Add a results toolbar: place filter, per-mode sort dropdown, and a persisted List / Map view toggle.
- Page long lists (40 at a time) with "Show more"; cache the computed list so filter/sort/paging never recompute the search.
Map
- Map-first view: full-bleed map with a floating results panel; pins get hover tooltips and a click popup linking to the exact trip.
- Tint pins green→red by connection count.
- Size the sticky map to the live measured viewport below the navbar + search bar.
States & polish
- Clean empty / error (with retry) / loading (skeleton + boot spinner) states.
- Custom-styled selects with a theme-aware chevron.
Acceptance criteria
Summary
The current search and results experience has grown awkward as the app added trip
modes, languages, and a map. The header carries a tagline and an absolute "data
updated" timestamp, the search form is a tall card that doesn't scale to per-mode
fields, and there's no first-class way to browse results on the map or to
filter/sort/page a long list. This issue tracks an end-to-end overhaul of search,
results, and the map view.
Motivation
100vhrather than the real viewport.Proposed changes
Navbar & search
Intl.RelativeTimeFormat); turn the language selector into a globe pill.Results
Map
States & polish
Acceptance criteria
pnpm testandtsc --noEmitboth pass.