UX & Product Design Case Study

GO Transit Mobile App

A team Figma concept, rebuilt solo into a 16-screen working app — with a real payment flow, dark mode, and accessibility considered from the start.

7 → 16Screens
1 → 5Routes covered
Light + DarkEvery screen
26Riders surveyed

Project Context

GO Transit runs Canada's largest commuter rail network — without a native app to ride it.

GO Transit moves over 72 million riders a year across five rail lines and a regional bus network covering southern Ontario. Despite that scale, there's no dedicated iOS or Android app for the rider experience — schedules, tickets, alerts, and trip planning all live on a mobile website that wasn't designed for phones.

For riders, that means buying tickets at station kiosks, refreshing a slow web page to check delays, and stitching together a journey across PRESTO, Google Maps, and the GO Transit site. For GO Transit, it's a fragmented experience that quietly costs riders, revenue, and engagement every day.

01

No native mobile app exists

In 2026, GO Transit is the only major North American commuter rail system without a dedicated native app. Riders use the website on mobile — which wasn't designed for phones.

02

Tickets still require kiosks or PRESTO cards

Buying a ticket on the day of travel means a physical PRESTO tap or a station kiosk. Last-minute riders without a card are stuck.

03

Service alerts live in three different places

Email, Twitter/X, and the GO Transit website — none integrated with the schedule the rider is checking.

Role

Solo design + build, expanded from team Figma concept

Timeline

Sept 2024 – May 2026 (school project → portfolio rebuild)

Team

Original Figma concept: James Ibitoye, Emily Li, Cindy Lin

Tools

Figma · React · TypeScript · Framer · Claude Code

The Starting Point

7 static Figma screens — a concept, not a product

A team of 3 surveyed 26 GO Transit commuters and built this for our Interactive Systems course. The research was solid. The prototype showed the idea — but couldn't do anything yet.

Landing
Landing
Search
Search
Upcoming
Upcoming
Trip Details
Trip Details
E-Ticket
E-Ticket
Service Updates
Service Updates
Menu
Menu
Gap 01

No payment flow

"Buy Ticket" led nowhere. Users could explore — but couldn't purchase. The app was a brochure.

Gap 02

No dark mode

Most GO rides happen at 6 AM or 6 PM. An app for commuters had no low-light consideration.

Gap 03

One route only

Only the Stouffville Line. Four other GO lines and the Highway 407 bus were completely absent.

Research & Discovery

What 26 riders kept telling us

In our Interactive Systems course at George Brown College, my team of three surveyed 26 GO Transit commuters and conducted a competitive analysis of existing tools. The finding was consistent across user types: riders were juggling the GO website and Google Maps to plan a trip, then PRESTO to pay. No single tool handled schedules, real-time alerts, and payment together.

26Riders Surveyed
79%Daily or Weekly Users
3User Interviews
5Competitor Apps Audited

How we researched

26

Riders surveyed

Google-Forms survey of GO Transit riders across student and working-adult demographics. Captured usage frequency, valued features, and pain points with the existing experience.

3

User interviews

One-on-one interviews to dig into the survey signals — how riders actually plan trips, where the GO website breaks down, what would make a dedicated app worth opening.

5

Apps audited

Direct competitors (HopOnGo, GoTrack, PRESTO E-Tickets) plus indirect tools riders already use (Google Maps, Transit). Mapped strengths, gaps, and the white space that became the design brief.

What riders want in a transit app

What 26 riders told us they value

Two clear signals: most riders use a transit app daily or weekly, and they want accurate times first — then real-time updates and trip planning. Payment ranked lower, but we knew the kiosk was a friction point, so it still became Decision 2.

How often riders use a transit app

79%daily / weekly
Weekly41.7%
Daily37.5%
Monthly12.5%
Never8.3%

Most-valued features, ranked

Departure / arrival times

Updates for delays & disruptions

Route planning

Service schedule

Trip payment

Ranked by how often each was named in our 26-person survey.

What we heard in interviews

Three themes — and where each one shaped a decision

Efficiency over everything

Riders need accurate departures and reliable updates first — everything else is secondary. → Drove the homepage redesign: next train visible on load.

From the interviews

User #1 rated the GO mobile site 4/10 — and all three said they'd use a dedicated app if one existed.

Juggling three apps to plan one trip

Riders cross-reference the GO website and Google Maps just to leave the house. → Drove the unified plan / pay / alerts scope of this concept.

From the interviews

Interviewees planned in Google Maps, then re-checked the GO website for delays before and during the trip.

Mobile-first or it's not used

Riders want on-the-go functionality — saved favourites, alerts, one-tap actions. The desktop-built website fails on every count. → Drove every layout decision.

From the interviews

Specific asks: drop the 24-hour clock, and let me add stops to a saved trip.

User Persona

Emma

Emma

21 · Undergraduate Student · Part-Time Barista · Mississauga

"The annoying part is figuring out the best time to leave and finding out about delays when I'm already running late."

Goals

Reliable, up-to-date information on schedules, delays, and service changes
Plan trips quickly and accurately
Customize trips by adding stops, and save favourite routes for next time

Frustrations

Complex interfaces that are overwhelming and difficult to navigate
Unreliable or outdated information on schedules, delays, and service changes

What matters most to Emma

Service schedule
Service updates
Trip payment
Route planning

Route planning rated lowest — a signal that a daily commuter cares more about saving frequent trips than planning new ones. That pointed toward the Saved Trips feature.

Design Process

1
Lo-Fi Wireframes

Lo-Fi Wireframes

8 hand-sketched screens — IA, flows, and layout intent

2
Mid-Fi Screens

Mid-Fi Screens

7 grayscale screens — structure and hierarchy locked

3
Hi-Fi Figma Prototype

Hi-Fi Figma Prototype

Full brand treatment — color, type, and iconography applied

Competitive Analysis

What riders use today — and where it breaks down

We audited five apps that GO Transit riders actually use — two unofficial GO apps, the official PRESTO ticketing app, and two general-purpose tools. No single product covered schedules, real-time alerts, and payment together. That gap shaped the design.

HO
HopOnGo

Third-party app for personalized GO Transit departures and arrivals.

What works

+Trip Finder handles departure, arrival, and schedule in one place

What doesn't

Oversized images crowd the trip-finder page
Hamburger menu hides core functions
Before — Figma Prototype

3 taps to see next departure

"New Trip?" button buried under identical flat cards. No live data, no urgency.

VS
After — Working React Prototype

0 taps — next train visible on load

Live countdown, a time-of-day greeting, and one-tap trip planning. The next departure is the first thing you see.

On load, the homepage now shows the next departure — down from three taps in the original.

Design Decisions

Three changes that mattered

01

Putting the next departure first

Problem

The original landing page made users hunt for their next departure — 3 taps minimum.

Decision

Redesigned the homepage to surface 'when's my next train?' on load. An active trip view shows ticket, platform number, and upcoming stops — all without leaving the homepage.

Outcome

0 taps to departure info (was 3). When a trip is active, the ticket, platform, and stops all live on the homepage.

02

Building the missing purchase flow

Problem

'Calculate Fare' led nowhere. Users couldn't buy a ticket. The prototype had no purchase flow.

Decision

Built the complete end-to-end flow: Fares → Payment (PRESTO/Visa) → QR Ticket → Apple Wallet.

Outcome

A ticket can be purchased in a single sitting — Fares → Payment → QR boarding pass without leaving the flow. Active trips surface on the homepage with one-tap access to the pass.

03

Alerts that reach you before you leave home

Problem

All service alerts looked identical — same card, same colour. No way to gauge urgency at a glance, and no proactive way to know if your specific trip was affected.

Decision

Built a dedicated Alerts page with colour-coded severity — orange for disruptions, blue for info. Designed a notification flow for saved trips so trip-affecting disruptions reach riders before they leave home (the preference UI is built; delivery isn't wired up in this prototype).

Outcome

Colour signals priority at a glance, and cancellations sort above informational alerts so the urgent ones aren't missed.

Decision 3 · in context

Alerts that reach you before you've left the platform.

Saved-trip alerts surface on the lock screen, grouped, and colour-coded by severity. Red for cancellations, orange for delays, green for general info. A rider checks the phone once and knows whether the morning routine still works.

8:42•••

Friday, May 22

8:42

GO Transit · 3 notifications

GO

GO Transit

now

Stouffville Line — 7:42 AM cancelled

Trip to Union Station GO won't run. Next departure 8:14 AM.

GO

GO Transit

2m ago

Lakeshore West — 12 min delay

Eastbound trips to Union Station running late due to a track signal.

GO

GO Transit

1h ago

Weekend schedule starts Friday

Reduced bus service on Highway 407 from 9 PM Fri to 5 AM Mon.

Purchase Flow

Home → Search → Details → Pay → Ticket

Every step from opening the app to holding the boarding pass is interactive and live. Hover each screen to see it in motion.

1
Home

Home

Next train visible instantly

2
Search

Search

Results with live times

3
Details

Details

Custom map, stops, platform

4
Pay

Pay

PRESTO, Visa, or new card

5
Ticket

Ticket

QR code + Apple Wallet

Dark Mode & Accessibility

Designed for the 6 AM commute — and for every rider

GO's peak hours are 6–9 AM and 4–7 PM, and through an Ontario winter both are dark. For most commuters that's simply how they'd see the app, so dark mode wasn't an afterthought. And because transit has to work for everyone, accessibility shaped the system from the start.

Full dark mode — toggled in Settings, persists across sessions
Every screen designed in both themes — not retrofitted
Text contrast checked against WCAG 2.1 AA guidance in both themes
Minimum 44×44px touch targets throughout
Built so screen readers can describe every button, toggle, and field — not tested with assistive tech yet

Recollect

What the build taught me

3 → 0

Taps to Next Departure

Was 3 in the original. Now visible on load.

3 → 1

Apps to plan a trip

Was juggling GO Transit site, Google Maps, and PRESTO. Now one app handles plan, pay, and ride.

7 → 16

Screens

Static concept to interactive product.

What I learned

01

Building it surfaced what Figma hid

The Figma prototype tested well in walkthroughs — but building it for real exposed deeper, more insightful gaps. Code lets me see what the end result actually looks and feels like, and learn the real constraints of what's technically feasible — so my future designs are more grounded. I'd build earlier and iterate in both code and Figma from mid-fidelity onward.

02

Accessibility worked better as I designed, not after

Reviewing the app against WCAG 2.1 AA guidance surfaced assumptions I didn't know I had — and usability gaps I didn't know I needed to design for. Contrast that looked fine wasn't. Touch targets that seemed big enough weren't. I now check accessibility as I design, not as a final pass.

03

The details users never notice

A rider never notices that tapping a recent trip fills both stations and opens the schedule sheet in one motion — they just feel the app is fast. They don't see the empty-state CTA when no trips match. They don't clock the live countdown ticking. Those small moments are what make the app feel solid instead of fragile.

04

Fast iteration exposed weak decisions

Using AI tooling meant my design decisions could be implemented in minutes, not days. When something looked wrong, I couldn't blame slow build time — I had to ask whether the design itself was right. That tight feedback loop was the most valuable part of the process.

05

Where AI helped — and where I didn't lean on it

AI can speed up the workflow when you treat it as a tool, not the steering wheel. I still hand-craft the design language in Figma and prototype it quickly with Claude Code — and when something feels off, I pull it back into Figma to refine by hand. A natural fit for double-diamond work: expand quickly, refine carefully, expand again.

Where we landed

From three apps to one.

Plan, pay, and stay informed — without leaving the app, juggling a kiosk, or refreshing a website.

Before

After

Plan

Cross-reference the GO Transit website with Google Maps. Squint at a desktop-built schedule table on your phone.

Next train sits on the homepage. Tap a saved trip for the full schedule, platform info, and stop list.

Pay

Find a station kiosk. Or top up a physical PRESTO card. Or use PRESTO's website on a separate device.

Tap Buy E-Ticket. Pay with PRESTO, Visa, or a new card. Boarding pass lands in Apple Wallet.

Stay informed

Check Twitter/X. Refresh the GO Transit website. Hope the delay shows up before you've left the house.

Saved-trip alerts surface in the app. Severity is colour-coded — cancellations top the list.

A 2026 note

Since this project began, PRESTO has rolled out tap-on / tap-off, distance-based fares — you tap entering and leaving, and your fare adjusts to the distance automatically. That removes much of the payment friction this concept set out to solve. It doesn't touch trip planning, real-time alerts, or a single unified rider experience — so if I picked this up today, that's where I'd point it. Worth being honest that the ground shifted while I was building.

Create a free website with Framer, the website builder loved by startups, designers and agencies.