For Eurovision 2017, I was challenged to create an “app” for a Eurovision party; the challenge was to create something that would work across the various devices that our friends owned and that would engage even those reluctant Eurovision watchers


I had a quick trawl through GitHub and found various Eurovision party companions however nothing that hit the various criteria we wanted. For version 1.0, success was: 1. Allows people to vote for each act against a series of categories 2. Keeps track of votes, tallies them and can output mean votes for each category / act. 3. Allows people to submit serious / sarcastic / etc. comments 4. Displays comments on a secondary display (in 2017, this was a repurposed HP Tablet)


Version 1 was thrown together in a weekend using a Linode VPN, CakePHP and MySQL. It contained basic salted user authentication and the second screen required manual control (I used a full-screen browser that supported MQTT commands to update the page URL and did that all night…). It wasn’t elegant, but it worked. As a web-app, it was compatible with all the phones our guests used (especially as there was limited opportunity for user-testing) and by building it on Linode I was able to scale resources from development environment to a production server for the night of Eurovision.

Version 2 was an incremental improvement, added “God Mode” to enable for web control by the host. I took advantage of Eurovision songs being 3:00 long and so made voting automatically close at the end of a song & set our second screen (this time a 24” monitor rather than a smaller tablet!) to automatically show the tallied results and comments.

Practical details

Taken from the Readme at

Steps to make it work:

  1. Add the competing countries & their act details into the countries database. The Flag column should contain the 2 letter ISO Alpha-2 codes ( If you’re doing this early (as I normally do) then position at this stage will be NULL for all.
  2. Edit the ‘settings’ table to put your values in - there are fields for the year, host country and city as well as your URL and guest wifi details.
  3. When the final running order is known, update the position column with the running order (where 1 is the first act).
  4. The experience is made a lot better by having the “second screen” - I used an old monitor hooked up to my laptop for the 2018 Eurovision. To get to this, you need to go to
  5. During the night, someone needs to let the app know when each song starts. To do this, you need “God Mode” - Just as the song starts, hit the big “next” button and within 5 seconds (see below for how it works) the second screen will update with the 3 minute timer.
  6. Once the 3 minute timer elapses, a summary of the votes and comments entered will display on the screen. Make sure to tell people their votes need to be in by the time the song ends!
  7. NB - this bit is currently hard-coded so would need to be tweaked if there are more/less than 26 finalists. Once all acts have performed and you’ve been through the voting for all, God mode will start a 5 minute countdown to the final results - these show the 12, 10, 8, 7, 6, 5, 4, 3, 2, 1 points as if you were a national jury.
  8. (There is no step 8 - enjoy!)


Well, it has already had a second outing. I’ve also been asked about making it a bigger thing for future years (and had an offer of some additional development help) - so watch this space!

What next?

I have three priorities for 2019: 1. Adding emoji support (requires a database encoding change). I might even go a stage further and change the comments to be three emoji instead. 2. I want to add a nicer admin backend (which will hopefully make it easier for other people to use for their own events) 3. I want to make it easier for remote participants to join in! In 2018 we had some remote voters but without the second screen, there wasn’t an easy way for them to follow along!

Deploy it yourself

Find the repository at


  1. Apache with mod_rewrite
  2. PHP 5.3 or higher
  3. MySQL 4.1 or higher
  4. CakePHP requirements: mcrypt, mbstring and intl

Installation using composer

  1. composer create-project willscottuk/eurovision eurovision
  2. cd eurovision
  3. composer install
  4. Run eurovision.sql on your database to set up the necessary tables
  5. Modify config/app.php to include your database details.
  6. Set eurovision/webroot to be your webroot
  7. Go to to create the admin user.