TLDR: the website that resulted from this is pianos.pub.
Pianists are lucky. The piano is an instrument that - unlike trumpets, saxophones, etc. - sometimes is available to play for free. These free-to-play pianos are called “public pianos” (or “street pianos”) which often appear in airports, train stations and parks during good weather.
Pianists know that these public pianos exist, no one knows where most of these pianos are and as such they exist in the world as a sort of magical entity whose secret location needs to be discovered. I am attempting to discover the location of all of them, and make a map of every piano in the world.
The result of this attempt is a website: Pianos for Travelers. This blog post tells about how the website was made.
Getting the data
I estimate that there are thousands of public pianos in the world and at least one in every major city in the world. Obviously I cannot go to every city in the world to find every piano, so I am attempting to use the internet to find their locations.
There is a handful of websites that compile piano lists including a slowly updated wiki and an out-of-date map, forums, subreddits and etc. I collected hundreds of piano locations going through these types of websites and manually cataloging their coordinates in a file.
After going through every website I could find, I only had a few hundred pianos - there were still over a thousand out there. Luckily, I realized that social media actually has tracked locations of people using the hashtags #publicpiano
and I was able to use APIs to collect their coordinates as well. This netted hundreds of more pianos.
At this point, until I find another source of pianos, I will be bootstrapping myself and heeding user input to gather the locations of more pianos. This is usually where the other websites failed, and mine might too, so I’m still looking for alternatives to this practice.
Creating the website
I designed the Pianos for Travelers site with my good friend. We used a very simple stack - Go std-lib http router, with Postgres 12 backend, JQuery v3 frontend, and using Tachyons for CSS. (I actually disagree that Postgres is very simple, but it is very powerful when it comes to GIS information).
The Go language constantly impresseses me with how fast we can move into production - for example we needed a CAPTCHA and found an amazing package by dchest that was basically a dropin into our std-lib web server. Same thing happened when we switched to Websockets. We found the entire site took less than two weeks to build (and we only spent our free time on it).
Shipping the website
The website, Pianos for Travelers, is live now. We posted about it on sites that might have interest in places with pianos (Piano forums, subreddits) and it gained a little traction. It is up for perpetuity now, though so I’m hoping it provides some useful information to the people that find it.