#100DaysofCode — Day 2

Yesterday I started creating a synchronized metronome app for my a cappella group.


Keeping tempo is a challenge for pretty much all music ensembles. Yes, you can blast a ticking metronome on a speaker with the hopes that everyone can hear it over the noise *oops, I mean music* being made, but sometimes that just doesn’t cut it.

Last year, a $100 vibrating metronome watch was released that could be synced up with others also wearing one of those watches — a great solution for college musicians on a tight budget amirite?

But, everyone has smartphones these days. So, I’m setting out to create a mobile app to avoid the costs of these aforementioned watches (along with the wonderful help of the music director of my a cappella group).


  • Cross-platform
  • Real time, synchronized vibrations
  • Tempo controlled by one person
  • Input for tempo
  • Start and stop buttons
  • *Bonus feature: tap to get the tempo

So, how does this all work? We have no clue, but we now have somewhat of a starting place!

We originally planned on doing a web app, similar to how Spyfall works. I had just done a webapp with a HTML/CSS/JavaScript/jQuery frontend and Python/Flask backend (see here), so we tried using some elements from this project. Unfortunately, we couldn’t get the Vibration API to work with it.

In the process of debugging, we found that using HTTP alone for communication between server and clients for any sort of multi-user app or game isn’t sufficient enough for real-time synchronization. Instead, technologies for us to look into further include:

  • Socket.io
  • WebSocket API
  • Node.js
  • Express

*Socket connections: Persistent connection between the client and the server and both parties can start sending data at any time.

We also considered hybrid apps using either Meteor or Cordova.

Much more to research and test out!