Introducing Fringe Roulette

The Edinburgh Festival Fringe is one of my favourite places to be. An overwhelming number of shows are performed there every year, which makes for a unique and exciting atmosphere. It’s a great opportunity to take a chance on things you wouldn’t normally see; after all, if you don’t like it, you’ll be seeing five other things that day anyway. Plus, some of the best stories come from the more unusual productions! Meanwhile, you just might see something amazing. Some of my best times in Edinburgh have been at shows that I didn’t know much about beforehand.

But it’s hard to pick what to see. It’s the paradox of choice - with so many options, it actually feels easier to stick with what you know, or things that have been well-reviewed. And you probably will see good stuff. It just doesn’t feel quite in the spirit of the Fringe to play it totally safe.

That’s why I’ve created Fringe Roulette.

Fringe Roulette

Fringe Roulette is my latest project using R Shiny. Basically, it’s a web app that randomly chooses a show for you to see. You can set some filters (like category or date range), or just fully embrace the randomness and see what results. The idea is to suggest some alternative options to people at this year’s festival - and hopefully help them see things they wouldn’t have considered otherwise.

Click here to have a look for yourself. If you’re going to the Fringe this year, have a go and see something unexpected! I’ll definitely be trying it out, and tweeting with #fringeroulette when I’m in Edinburgh.

New shiny tools

If you’re here for the coding rather than the comedy, it’s all in the github repo. I’ve got a previous post about styling in Shiny that you might be interested in too. I’m not going to retread old ground, but here are some extra packages I haven’t mentioned before.


This package offers some alternatives to the widgets and inputs that come with the basic shiny package. For example, I’ve used the jelly style actionBttn() in the Fringe Roulette app. You can read about the package here or see a gallery of all the widgets here.


This is a super helpful package to use, normally because it provides a little spinner when things are taking time to load in your app. You can read about the package here and check out the spinners here.

In Fringe Roulette, I don’t actually need a spinner because of loading time - but I thought it would be good to add a tiny bit of suspense between the click and the reveal, so I use Sys.sleep(1) to delay generating the random show for one second, and use a spinner as a sort of abstract roulette wheel. To add a spinner, it’s as simple as wrapping your output command on the UI side with withSpinner().

Some data notes

I exported the data from the official Fringe website. This has broadly worked well, but there are a few things to flag:

  • Titles in the dataset are alphabetical so presumably for this reason, all shows that start with “The” or “A” have that word chopped off. So you might click through and find the show has a slightly different name to that shown in the app.
  • I’d quite like to add some additional filters like flagging free shows, for example, but that information isn’t in the downloadable data.
  • I went through and made a few changes to play titles where special characters were showing strangely…but if you see anything like that in your results, please let me know so I can fix it!

That’s it! I really enjoyed this project, I think because I’m getting so excited about this year’s Fringe and this has only amped me up more. I really hope it helps a few people see some different things - I would love to hear if you use Fringe Roulette successfully!

comments powered by Disqus