Conversation
|
Hi @aaronbrethorst — building on the UI rethink exploration, one pattern I noticed in other transit apps (e.g. Transit) is a floating search entry above the map. Today discovery relies mostly on map taps, which can be tough for users who don’t know where to start. A lightweight, persistent “Where to?” search bar could live above the map and feed directly into the existing panel flow. Search → stop → trip would all stay within a single sheet instead of introducing a new navigation path, keeping the map as the primary context. Draft includes search but from the commit descriptions, it seems focused on rebuilding the search UI within the panel framework, not adding a floating bar It feels like it could layer naturally on top of the panel-based architecture you’re exploring. Happy to sketch or prototype a minimal version if that’s useful. Im reusing the entire existing panel-based search machinery (SearchListViewController, SearchInteractor, etc.). The "Where to?" floating bar is just a new trigger (or entry point) for that same flow. Trigger: User taps the persistent "Where to?" button on the map. |
|
Hi @aaronbrethorst — building on the UI rethink exploration, ( Citymapper) is a persistent bottom panel that owns its own navigation stack. Today, tapping a stop on the map slides up a panel, then tapping a departure dismisses that panel and pushes a new TripViewController. This scattering of state across MapViewController → panel dismissal → TripViewController makes the flow harder to maintain and can disorient users. A persistent panel could stay alive throughout the stop → trip → vehicle flow, updating its content in-place rather than dismissing and pushing new views. A single swipe-down could exit the entire flow, keeping the map visible as the primary context the whole time. Architecturally, this centralizes navigation state in the panel itself, preserves spatial context for the map, and simplifies UIKit/SwiftUI boundaries by reducing cross-boundary pushes. It could also layer naturally with other features like a floating search bar, since the panel would handle whatever content state is active. Current: Map → Panel ↑ → Dismiss → TripVC Push |
|
Hi @aaronbrethorst — building on the UI rethink exploration, Bottom of Search Panel Bookmark Appear(Citymapper-style) ┌──────────────────────────────┐ Bookmarks will be implemented as a privacy-first, on-device feature — users can save Home/Work locations with one tap . OBA's bookmarks work offline and respect user privacy by default. Bookmarks appear as a dedicated panel state triggered by the floating search bar — fitting naturally into the PanelContent architecture without cluttering the glanceable peek state. |
|
Hi @aaronbrethorst Building on the UI rethink exploration, - one opportunity to close the gap with Transit/Citymapper: unify location-based discovery and search in a single panel flow — without cluttering the glanceable peek state. Why it works: Happy to prototype the Hero Card prioritization logic (distance + frequency scoring) or floating search bar integration if useful. [MAP VIEW - NORTH-UP] |
|
Hi @aaronbrethorst — building on the UI rethink exploration - Offline Gracefulness (Works Underground) Critical gap for subway-heavy cities (NYC/DC/Boston): current OBA shows "No connection" underground → useless when riders need it most. Opportunity: When offline/poor signal:
Why it matters: Happy to prototype the offline state |
|
Hi @aaronbrethorst — building on the UI rethink exploration -Inline Service Alerts (No More Buried Tabs) Why it matters: Happy to prototype the banner |
|
Hi @aaronbrethorst — building on the UI rethink exploration, one idea for the persistent panel: anonymous crowding reports. Today, OBA shows a “How’s the bus?” Hero Card, but reports are scattered and ephemeral. A lightweight, opt-in, post-boarding prompt could let riders share crowding info without accounts or tracking. Flow (app-only, local first) Tap departure → optional post-boarding prompt (once per trip) Levels: 🙂 Seats available / 😐 Normal / 😕 Crowded / Display inline in panel: “ Auto-expire after 10 min, fully anonymous, one report per trip This keeps everything local to the iOS app while laying groundwork for future backend aggregation (GTFS-RT or lightweight endpoint). Inline badges follow the same glanceable pattern as service alerts and “Updated X min ago”, fitting naturally into the persistent panel. |
|
Hi @aaronbrethorst - building on the UI rethink exploration -
Happy to prototype if useful. |
|
Hi @aaronbrethorst - building on the UI rethink exploration - The "Trip Assist" Engine (Inspired by Transit) Proactive Rerouting: If the bus is delayed >10 min while you are walking to the stop, the app interrupts with a "Better Route" suggestion. |
|
Hi @aaronbrethorst - building on the UI rethink exploration - Station Exit Mastery (Inspired by Apple Maps/Citymapper) The Idea: When arriving at a station, the panel shows "Exit via North Gate for 42nd St" or "Best Car to Board for easy transfer." |
|
Hi @aaronbrethorst - Building on the ui rethink exploration - Intent-Driven "Glass" UI (The "Where To?" Evolution) Morning Mode: Bar pre-fills with "🏢 Work" or "🏫 University." |
Also effectuate a minor refactoring
This was a worthwhile experiment, but the OBA app can't provide a good enough experience with just GTFS-RT data
…UI view This doesn't work quite right yet because of limitations with the .sheet modifier
3f0a230 to
d2961ad
Compare
Adds a user-facing toggle in the Debug section of Settings to switch between the new panel-based UI and the classic UI, backed by UserDefaults.




This pull request is a work in progress reimagination of the OBA iOS app UI. I think it represents a meaningful improvement to the product user experience but needs substantially more work before it's ready for release.