Skip to content

Comments

DRAFT: New UI Exploration#1014

Draft
aaronbrethorst wants to merge 21 commits intomainfrom
ui-rethink
Draft

DRAFT: New UI Exploration#1014
aaronbrethorst wants to merge 21 commits intomainfrom
ui-rethink

Conversation

@aaronbrethorst
Copy link
Member

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.

@jatinfoujdar
Copy link
Contributor

jatinfoujdar commented Feb 2, 2026

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.
Action: We programmatically signal the panel to wake up (activateSearch()) and enter search mode.
Flow: From there, it's 100% the same logic as before—typing in the box, seeing list results, tapping a result—all contained within that bottom sheet.

@jatinfoujdar
Copy link
Contributor

jatinfoujdar commented Feb 3, 2026

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
Proposed: Map → Panel ↑ (Stop) → Panel Update (Trip) → Panel Update (Vehicle) → Swipe ↓

@jatinfoujdar
Copy link
Contributor

jatinfoujdar commented Feb 6, 2026

Hi @aaronbrethorst — building on the UI rethink exploration, Bottom of Search Panel Bookmark Appear(Citymapper-style)

┌──────────────────────────────┐
| 🔍 Where to? │ ← Floating search bar (persistent)
├──────────────────────────────┤
│ [⌂ Home] [🏢 Work] [📍] │ ← Bookmark row (appears when search active)
|──────────────────────────────┤
│ Downtown Core │
│ Stadium Station │
│ ... │
└──────────────────────────────┘

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.

@jatinfoujdar
Copy link
Contributor

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.
Proposed flow:

Persistent "Where to?" bar floats above the map (not inside panel)
Tap → panel expands to medium height (70%) showing:
    Bookmarks row ([⌂ Home] [🏢 Work])
    Nearby stops with Hero Card prioritization (closest + highest-frequency stop first)
    Search results (if query entered)
Peek height (128pt) stays strictly glanceable: only Hero Stop + "Board now" badge + walking time

Why it works:

Solves OBA's #1 discovery problem ("where do I tap?") with persistent entry point
Preserves spatial context — map stays visible/interactive throughout
Matches Apple's progressive disclosure: peek = glanceable, medium = actionable, full = detailed

Happy to prototype the Hero Card prioritization logic (distance + frequency scoring) or floating search bar integration if useful.

[MAP VIEW - NORTH-UP]
┌──────────────────────────────────────┐
│ 🔍 Where to? [⌂] [📍] │ ← Persistent chrome (always visible, subtle)
├──────────────────────────────────────┤
│ 🗺️ MAP with stops highlighted │
│ (blue dot = user location) │
└──────────────────────────────────────┘
↓ User taps "Where to?"
┌──────────────────────────────────────┐
│ 🔍 [Search field focused] │ ← Panel expands to medium height (70%)
├──────────────────────────────────────┤
│ [⌂ Home] [🏢 Work] [+ Add] │ ← Bookmarks row (only at medium height)
├──────────────────────────────────────┤
│ Downtown Core (2 min walk) │
│ Stadium Station (5 min walk) │
└──────────────────────────────────────┘
↓ User taps "Home"
┌──────────────────────────────────────┐
│ 🏠 Home → Downtown Core │ ← Panel stays open, shows stops near Home
├──────────────────────────────────────┤
│ 🚍 Route 42 • Board now (1 min) │ ← Hero Card with actionable context
│ 🚍 Route 17 • 4 min │
└──────────────────────────────────────┘

@jatinfoujdar
Copy link
Contributor

jatinfoujdar commented Feb 10, 2026

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:

  • Show last-known arrivals with subtle badge: "🕗 Updated 8 min ago"
  • Dim text to .secondary color (not error state)
  • Auto-refresh with haptic .light when connection restored
  • Instead of "No Connection" banners, display cached data with a "Updated X min ago" timestamp and dimmed UI.

Why it matters:

Builds trust: app works when others fail
Uses existing ArrivalService cache layer (no new infrastructure)
Critical for real-world transit reliability

Happy to prototype the offline state

@jatinfoujdar
Copy link
Contributor

Hi @aaronbrethorst — building on the UI rethink exploration -Inline Service Alerts (No More Buried Tabs)
After testing ui-rethink, one gap vs. Citymapper/Transit: service alerts appear too late (often after users wait at stops).
Opportunity: Show alerts contextually in the panel instead of a separate tab:

Peek height: red dot badge on route color
Medium height: banner "Route 42: 10-min delay due to traffic"
Tap banner → expands to full details

Why it matters:

Prevents wasted waits before they happen
Uses GTFS agency_alerts.json OBA already ingests
Eliminates need for dedicated "Alerts" tab (simplifies navigation)

Happy to prototype the banner

@jatinfoujdar
Copy link
Contributor

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 / ⚠️ Full

Display inline in panel: “⚠️ Full (4 min ago)” or aggregated “Mostly crowded (3 recent reports)”

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.

@jatinfoujdar
Copy link
Contributor

Hi @aaronbrethorst - building on the UI rethink exploration -

   Two small but high-impact UX polish items for the panel/map interaction:
  1. Zoom & center on stop tap: When user taps a stop marker, map smoothly zooms + centers on that stop (500m radius, 300ms animation). Provides immediate spatial clarity — especially helpful when stops are clustered. Respects isReduceMotionEnabled for accessibility.

  2. Selected stop icon: Tapped stop shows filled icon (●) while panel is open; resets to outline (○) when panel dismissed. Visual feedback prevents "Did I tap the right one?" uncertainty.

Happy to prototype if useful.

@jatinfoujdar
Copy link
Contributor

Hi @aaronbrethorst - building on the UI rethink exploration -

The "Trip Assist" Engine (Inspired by Transit)
What it is: A background service that monitors your journey once you've tapped a departure.

Proactive Rerouting: If the bus is delayed >10 min while you are walking to the stop, the app interrupts with a "Better Route" suggestion.
Voice Announcements: Native iOS voice prompts for "Boarding in 2 mins" or "Get off at the next stop."

@jatinfoujdar
Copy link
Contributor

Hi @aaronbrethorst - building on the UI rethink exploration -

Station Exit Mastery (Inspired by Apple Maps/Citymapper)
What it is: Micro-mapping for complex transit hubs (NYC, DC, London).

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."
Potential: This uses OBA's open data ethos to map station interiors where GPS is weak.

@jatinfoujdar
Copy link
Contributor

Hi @aaronbrethorst - Building on the ui rethink exploration -

Intent-Driven "Glass" UI (The "Where To?" Evolution)
What it is: A floating search bar that changes based on temporal context.

Morning Mode: Bar pre-fills with "🏢 Work" or "🏫 University."
Late Night Mode: Bar focuses on "🏠 Home" and "🚖 Ride-share" safety options.
Aesthetics: Uses ultra-thin glass materials and fluid SwiftUI animations.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants