Role: Senior Product & UX DesignerClient: Oxford City GuideMulti-phase, 2024–2025

Oxford City Guide

Designing a trustworthy, offline-capable city guide for diverse audiences. Modernizing the experience for iOS/Android launch readiness.

Oxford City Guide app screens

Context

Oxford City Guide is a multilingual mobile app (iOS/Android) serving tourists, students, and academics across hundreds of POIs and tours. The inherited UI had monolithic tour flows, inconsistent spacing and terminology, and weak clarity around offline mode and permissions. Map and tour flows relied on implicit behaviors: auto-start, ambiguous exit. Audio failed silently, and "offline" was unproven.

The work spanned a refactor stabilization phase and iOS launch readiness, embedded with the PM and engineering team.

Team: Flutter engineers, QA, content, and data Tools: Figma, Flutter UI reviews, moderated and unmoderated usability tests, localization and accessibility audits, design system tokens, telemetry pairing

The Problem

Deliver a trustworthy, offline-capable guide while aligning with Apple HIG and privacy expectations. The goal: modernize the experience without breaking existing functionality, and prepare for App Store and Play review with privacy-safe patterns.

Project Goals

[TODO: Add four to six specific, measurable goals tied to app launch, user trust metrics, offline adoption, accessibility compliance, or multi-language readiness.]

  • What convinces users offline actually works?

    Proof flows, download sizing, test snippets. Users won't trust claims without evidence.

  • How should tour start and exit feel?

    Across entry points (auto vs manual; preload vs immediate). Clarity prevents abandonment.

  • What audio behaviors keep engagement high?

    Speed, fallback, transcripts. Network drops shouldn't break the experience.

  • How do permission prompts affect adoption?

    Privacy copy and prompt timing influence denial rates and user trust.

  • Which UI terms resonate across languages?

    "Places" vs "POIs", translation coverage indicators. Unfamiliar terms confuse international users.

Research & Strategy

Methods: Moderated usability on tour start/exit, offline packs, and audio fallback. Unmoderated tasks for start/exit microflows. Field tests on spotty networks and airplane mode. Accessibility runs (large text, screen reader, outdoor contrast). Localization checks for en/ja/fr permission copy and translation coverage.

Participants: Tourists, students, academics, international families. Bilingual participants for JP/FR. Mixed devices and OS versions.

1–3 day visitor

The Tourist

Wants curated loops and clear directions

Needs
Offline confidence for roaming, minimal friction to start
Design mandate

Local learner

The Student

1-hour breaks between lectures

Needs
Academic depth and credibility; familiar with app (shortcuts over hand-holding)
Design mandate

Researcher or visiting scholar

The Academic

Seeks granular POI detail and citations

Needs
Plan tours in advance; offline and translation for international collaborators
Design mandate

Mixed language fluency

The International Family

EN/JP/FR key; traveling together

Needs
Bilingual tours, offline to avoid roaming charges, audio for accessibility
Design mandate

What we found:

"I won't believe offline until I can test it in 30 seconds. Show me it works before I travel."

  • 01

    Unclear tour start/exit

    Users need explicit Start with preload indicator, tour-aware centering, manual GPS override; Exit with save-progress and quick feedback; Resume as an entry point.

  • 02

    Offline claims doubted

    Show download size/time estimates, provide offline test card, clarify partial-offline transparency (map/text vs audio/images).

  • 03

    Audio failures kill trust

    Visible fallback to device TTS with text highlight/transcript and speed control; surface error states transparently.

  • 04

    Permission fatigue

    Single well-timed prompt with on-device copy; optional background location only when benefit is stated.

Design Process & Approach

Discovery/Definition. Audited navigation, permissions, and offline flows. Mapped pain points to events and metrics. Set success criteria (time-to-start, offline pass rate, audio fallback success). Identified terminology, spacing, and HIG alignment gaps.

Ideation/Design. Prototyped tour start/exit, offline pack UI, permission copy variants, and audio controls with fallback states. Designed translation coverage indicators, accessibility overlays, and map chrome (scale bar, distance units). Built design system tokens and components in Figma aligned to Flutter widgets.

Testing/Iteration. Moderated tests with forced network drops and GPS wobble. Unmoderated start/exit tasks. Localization and accessibility runs. Iterated on copy, fallback visibility, preload indicators, and Exit/Resume flows.

Key decisions

  • Explicit Start with preload indicator

    Auto-start felt unpredictable to users. Explicit Start with visible preload progress reduces friction and builds confidence in the tour flow.

  • Offline test card before travel

    Users won't trust 'offline mode' until they see it work in 30 seconds. Quick test validates the feature before relying on it for their trip.

  • Single, well-timed permission prompt

    Multi-prompt fatigue led to denial. One prompt with on-device copy and stated benefit (background location only when needed) improved acceptance rates in testing.

UX Deliverables

Figma design system & components: Thirteen base tokens (spacing, typography, and colors), eight component variants (buttons, cards, dialogs, banners, and toasts), usage guidelines for accessibility (dynamic type, contrast, tap targets), permission copy variants, and offline state patterns.

Journey maps & user flows: End-to-end flows for each persona (tour discovery → start → navigate → audio → offline → exit), annotated with decision points and error states.

Wireframes & high-fidelity prototypes: Interactive Figma prototypes for tour start/exit, offline pack download, audio playback with fallback, permission prompts, and multilingual copy variants (EN/JP/FR).

Accessibility & localization audits: Screen reader validation, dynamic type scaling, contrast compliance (WCAG AA). Translation coverage matrix and language-specific terminology mapping.

Telemetry instrumentation spec: Event definitions (tour.start, audio.fallback_triggered, offline.pack_downloaded) mapped to user goals and success metrics.

Solution & Design Decisions

Tour flow clarity. Prominent Start with preload indicator. Tour-aware map centering. Manual GPS override. Exit with save-progress and two-tap feedback. Resume surface in-app and via notification. Skip/reorder stops for advanced users. Completion recap with badge and share.

Offline proof & control. Download cards with size/time estimates. Offline test card. Pack status and partial-offline transparency. Last-updated timestamp to build trust.

Audio & accessibility. Engine selection (studio/device TTS). Speed control. Transcript with highlight-as-you-listen. Visible fallback path with user-friendly errors. Language toggle and translation coverage indicator. Larger tap targets, contrast tokens, dynamic-type-friendly layouts.

Design System

Tokens for spacing, typography, and colors. Component variants for buttons, cards, and dialogs. Map chrome included. Permission banners and status toasts. Usage guidelines for language switches, accessibility (dynamic type, contrast, tap targets), permission copy variants, and offline status states.

Outcome & Impact

  • Reduced tour start friction in tests: faster time-to-start, higher start rate on first attempt.
  • Higher stated trust in offline after proof flow. Fewer permission denials in testing.
  • Audio completion improved with visible fallback and transcripts.
  • Accessibility compliance improved: dynamic type respected, better contrast and tap targets.
  • Design system alignment reduced rework during engineering refactors.

Learnings

[TODO: Add two to four paragraphs reflecting on designing for multilingual audiences, trust-building in offline-first apps, or collaborative design in launch-critical timelines.]

My Role

Full-stack ownership spanning research, design, product, and engineering validation.

  • UX research & synthesisLed moderated and unmoderated usability tests, defined personas and jobs-to-be-done, synthesized pain points into design priorities.
  • Design system & componentsBuilt thirteen design tokens (spacing, typography, colors) and eight component variants in Figma aligned to Flutter widgets; documented accessibility guidelines and offline state patterns.
  • Accessibility & localizationRan WCAG AA/AAA audits, validated dynamic type scaling and screen reader behavior, tested permission copy and terminology across EN/JP/FR.
  • Product ownershipDefined personas and jobs-to-be-done for each audience segment, wrote user stories with acceptance criteria, prioritized the feature backlog against release constraints, and drove go/no-go decisions on scope.
  • Flutter implementationBuilt a working prototype covering offline tour flow, audio playback with TTS fallback, and Supabase-backed POI data. Validated interaction design and technical feasibility end-to-end.
← All projects