BuildAppiPhone
Bell
A heavy bag circuit timer for iPhone

- iOS 17 and up
- Runs on
- On iOS 26
- Liquid Glass
- 38 Swift files
- Code
- 3
- Round modes
What it is
Bell is a heavy bag circuit timer for iPhone. You set the boxing time, the rest and the number of rounds, and a coach voice calls the work while your own music keeps playing. Everything is built to be read from the bag, three meters away, with wrapped hands.
It is for people who train on a heavy bag and cannot tap glass in wraps or gloves. The voice leads and the screen confirms, and Siri can start or pause a workout.
I made it because I wanted a timer that coaches a round instead of only counting it. A friend and I have been testing it on the bag. I wrote the brand book, the tokens and every decision before the code, so the app stays consistent as it grows.

What I designed and built
- The timer screens, with one Ember color and two states, Work and rest
- A design system written in Markdown and JSON before the code, with Dark and Work themes
- The coach voice with on-device voices, and Apple Music control that lowers your music for each call
- Bell Display, a condensed type cut from Archivo at 75% width for the clock and the calls
- Siri shortcuts to start or pause a workout, built with App Intents
- The whole app in SwiftUI, 38 Swift files
Decisions
Work is all Ember and rest goes dark
The phone becomes a signal light, so you can read the phase from across the room and from the corner of your eye. The trade-off is that a bright full screen uses more battery, so I will revisit it if long sessions drain phones.
Ink text on Ember, never white
Ink on Ember is 5.9:1, and white on Ember is 3.3:1, which fails for normal text. The trade-off is that ink on a bright color feels sporty and not soft, which I accepted for legibility.
Big touch targets, 56, 72 and 88
Wrapped hands and sweat miss small targets, so setup uses 56, anything touched during a round uses 72, and Start and Resume use 88. Screens hold fewer controls, and that is the point.
The voice leads and the screen confirms
Gloves cannot tap glass and your eyes are on the bag, so everything mid-round has to work by sound alone. The trade-off is that a feature that only works visually is not allowed during a round.
Hold two seconds to end
A stray tap or a glove bump must not end a workout. The cost is one extra second to leave on purpose, and I would not shorten it.
Gallery




Stack
- SwiftUI
- AVSpeechSynthesizer
- MusicKit
- App Intents
- Liquid Glass on iOS 26