Designing Catch
A bus app I wanted to use.
Context
I started Catch because I wanted a Singapore bus app I could read at a glance. The basic flow was simple: open the app, find my stop, and see when the next bus was coming. I designed it in Figma, used Mobbin as a reference, and implemented and tested it with Codex.
Problem
The first home screen tried to show nearby stops, arrival times, and whether I could make the bus. All three were useful, but they competed for attention.
I kept nearby stops and arrivals on the home screen, with “Can I catch it?” near the top to answer whether to leave now. Details that only mattered after choosing a stop moved into the stop view.
That gave me a rule for the home screen. It should help me choose where to go and whether to start walking. Once I’ve picked a stop, I can look through its buses and compare arrivals there.
Before and after
where I startedEarly home exploration
less to look throughCurrent home
Live Activities
I wanted to check my bus on the way to the stop without reopening Catch. The lock screen has less room, so I used it for three things: the bus number, when it would arrive, and whether to leave now.
Live Activities were part of the idea from the start. In the app I might compare a few buses, but on the way out I’m usually checking one. Keeping that bus on the lock screen lets me follow the decision I’ve already made with a glance.
Finding stops on a map
The feedback board pointed to a gap in the list: a stop name doesn’t always tell you where it is. I added a map so you can look around, select a nearby stop, and see its arrivals. The list still works well when you know the stop you want.
App icon explorations
The bus was the constant across the icon explorations. I tried monochrome, brighter colours, and painted finishes to see how differently the same subject could read.
What testing revealed
When my brother entered “Yash,” the app still greeted him as “Adi.” I’d seen my own name so often during testing that I’d stopped questioning it.
Autocorrect turned “Summerdale” into “Summer sale.” That made a stronger case for choosing a real stop than for asking people to type its name exactly.
A shortcut exposed a different kind of issue. It worked when Catch was already open, then ran into problems when I launched it with the app fully closed. I’d been repeating the same test without changing the app’s starting state.
Those tests changed what I look for when a design becomes a working app. Next time, I’d bring people in earlier and test with different inputs and launch states before polishing the screens.