Design
Designing for the moment you need a toilet
A water drop instead of a map pin, one number removed because it flickered, a sheet that never fully closes. Designing an app people open under pressure.
Phoo often has a small window to be useful: someone is changing trains, out with children or checking whether an entrance works for them. They need clear information and a next step they can recognise quickly.
That practical moment guides how we design the app.
The map is the app, so the map gets the screen
There is no dashboard, no onboarding carousel, no tab bar. The app opens onto a full-bleed map with the nearby toilets already on it, and the chrome floats on top as translucent glass: a search pill, a settings circle, and a row of filter chips.
Underneath sits a sheet that never fully closes. Its smallest detent is 96 points — enough for the count and the closest option — and it interacts with the map behind it rather than blocking it. Every other sheet in the app presents from inside that one, so opening a toilet’s details never costs you your place.
The reason for the persistent sheet is that a map alone answers “what is around” while a list answers “what should I do”. Under pressure people want the second, and asking them to pull up a drawer to get it is asking for a decision they should not have to make.
A water drop, not a pin
The marker is an upside-down drop with a number in it, coloured by whether the toilet is usable right now: green for open, red for closed, purple when the hours are unknown.
Colour alone carries no meaning anywhere in the app, which the accessibility work required and the design benefited from. Every status has a shape, a label and an icon as well.
The drop earns its place for a duller reason too. A field of standard map pins is visually identical to every other map you have ever used, and in a city centre it becomes a wall of teardrops with no hierarchy. A drop that holds a numeral reads as data rather than decoration, and it clusters into a badge with a count when the zoom level demands it — grid cells at a sixth of the visible span, no clustering below a fraction of a degree, and a selected toilet never clusters away from you.
The number we deleted
The first version showed walking minutes on the map pins, in the list rows and in the search results. It looked great.
It also lied slightly, and then corrected itself in front of you. Those surfaces used a straight-line estimate at 80 metres a minute, while the detail view upgraded to a real routed estimate from the maps stack. So a pin said 6, you tapped it, and the detail said 9. Nothing was broken. It just made the app look like it did not know, at the exact moment the user needed to trust it.
So the minutes came off every surface except the detail view, where the number is routed and real. The straight-line estimate still exists and still does its job: sorting the list, deciding whether you are nearby or exploring, and filling in the sheet header’s summary of how far the closest option is. It simply no longer appears as a per-toilet promise it cannot keep.
Deleting a number is a small change that took an argument to win. It is also the change I would point at if somebody asked what “trustworthy” means in interface terms.
Zero results is a screen, not an accident
Filter hard enough and any map goes empty. Most apps respond with a blank state and a shrug.
Phoo treats it as a real screen with a real job: it names which combination produced nothing, and offers to relax one requirement while keeping the one that cannot bend. A wheelchair user filtering for accessible and free should be offered the loss of “free”, never the loss of “accessible”. The recovery path is ordered by what is negotiable, which the app can only know because access, fee and accessibility are separate fields rather than a bag of tags.
Accessibility from the first release, including the boring parts
Dynamic Type all the way up, VoiceOver labels on every control, high-contrast support, reduced-motion respected, and no status communicated by colour alone. None of this is remarkable. All of it is the difference between an app that says it is for people with limited mobility and an app that is.
The one genuinely hard part was resisting fixed-height cards. Text that grows two hundred per cent breaks any layout built on a designer’s line count, so the listing card lays out from its content rather than to a spec.
Liquid Glass, and the argument for a high floor
Phoo requires iOS 26. That excludes people, which is a real cost, and it was chosen deliberately: it means the glass chrome is the platform’s own, with no third-party reimplementation, no availability branching around every modifier, and no private-API tricks in a shipping app.
The upside is that the map screen looks and behaves like a part of the operating system rather than a skin of one. For an app you open in a hurry, familiarity is not a stylistic preference. It is speed.
What the design is optimising
Not engagement. Not session length. The metric that matters is the median time from opening the app to walking, and every decision above is downstream of that number.
The aim is to help someone choose a suitable option, start directions and get back to their day.