← Work

Metronomious

2026 · iOS · Side project

What it is

A metronome built for live performance. Most metronome apps are designed for practice — a lot of controls, a lot of information, a lot of friction. Metronomious is designed for the moment before a song starts: open it, read the number, play.

It started as a personal tool I built for leading worship sets. I needed something that could hold a full setlist, let me tap the tempo of an unfamiliar song, and switch presets without looking away from the room.

Download on the App Store — currently holding a staggering 5-star rating, friends and family included.

V1

The first version was built with HTML, CSS, and JavaScript wrapped in Capacitor for iOS. The goal was to get something in my hands quickly and iterate on real use.

Main V1 main screen
Setlist V1 setlist

It did the job. But using it on stage revealed the real problem — it felt too technical and busy. There was too much to look at when you just needed one number. The goal became clear: strip it down to the essentials and make every interaction as simple as possible.

V2

V1 · Web V1 main screen
V2 · Native V2 main screen
Slider → ±1 nudge buttons (one tap = one BPM) Numbered tiles → glowing dot indicators Inline setlist → collapsible bottom sheet Floating red FAB → centered yellow play button Yellow BPM → white (accent moves to the dots)

Redesign

I rebuilt the app from scratch in SwiftUI. The design principle was simple: anything that doesn’t need to be on screen right now shouldn’t be.

BPM is the only thing that matters when you’re about to play. It fills the center of the screen in white — readable at a glance from a music stand. The yellow-green accent moved off the number and onto the beat dots, where it’s more meaningful.

The slider became ±1 nudge buttons. Flanking the number, always in the same place. One tap adjusts by one. That’s the actual use case.

Beat dots replaced numbered tiles. A circle pulsing with the current beat communicates rhythm more directly than a highlighted square with a number inside. Tap any dot to toggle its accent.

Everything else went into sheets. Time signature and subdivision each live in a modal sheet, opened by the two glass dials in the top corner. The setlist lives in a draggable bottom sheet that peeks just enough to show the active song — pull it up when you need it, let it collapse when you don’t.

Setlist V2 setlist
Subdivision V2 subdivision picker
Time sig V2 time signature picker

How it works

The audio is scheduled 100ms ahead using AVAudioFramePosition. A CADisplayLink running on the main thread compares each frame’s audio sample position against the queue of pending beats, advancing the accent dot only when the sample time is reached — so the visual is locked to the actual click, not to a timer.

MetronomeEngine is a custom Swift class that keeps the audio thread and UI thread cleanly separated. All state the views bind to lives in MetronomeModel (an @MainActor ObservableObject), which receives beat callbacks via a closure and dispatches them back to the main actor with a Task.

Next steps

App icon — a single green orb on black

Metronomious is a free download on iOS. A tempo-finding feature (tap the ear icon to have the app listen and suggest a BPM) was added in a recent update, along with previous/next preset navigation for stepping through a set without touching the setlist.