← All work

Building Helio for iPhone

Role
Design, frontend, and the platform argument
Stack
Expo, React Native, NativeWind, plus the responsive web build that actually shipped
iOS Chats designiOS channel design
iOS design: Chats and Channel

The CEO wanted an iOS app in twelve days.

I started by building the whole thing as design-as-code in our catalog: every screen with real components, plus a navigation and deeplink spec and the shapes of the push payloads. Then I built the actual Expo project, made the data layer portable to React Native (visibility, network, and messaging all had to become adapters), bridged the design tokens across, and got it running on a real phone.

Then I argued for stopping.

iOS channel design
iOS channel design

Native React Native means the UI is two codebases forever. It is not a matter of some duplication, because the languages are different. A <div> is not a <View>. "Fix it once and both platforms get it" is not achievable at the UI layer, only below it. Meanwhile the desktop web app was already most of the way to responsive and was literally the same components.

So mobile v1 shipped as web. Drawer navigation, touch chat, a phone type scale, bottom sheets. Native went on the shelf, with the Expo work intact for whenever it comes back.

My favourite detail from that stretch is something I removed. The grab handles came off every bottom sheet, because none of our sheets could actually be dragged. The handle was advertising a gesture that did not work.