🎹🌎 Pianos for Travelers
Tags: go, website, jquery, postgres
Published: 2019-12-19 15:39:38

---
title: "🎹🌎 Pianos for Travelers"
published: true
description: "About the creation of Pianos for Travelers - a website to map the location of every public piano in the world."
tags: golang, website, jquery, postgres
---


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](https://pianos.travel). 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](https://airport-pianos.fandom.com/wiki/Airport_pianos_Wiki) and [an out-of-date map](https://www.pianoplayersclub.com/), 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](https://pianos.travel)* site with my good friend. We used a very simple stack - Go std-lib http router, with [Postgres 12](https://www.postgresql.org/) backend, [JQuery v3](https://jquery.com/) frontend, and using [Tachyons](https://tachyons.io/) for CSS. (I actually disagree that Postgres is very simple, but it is very powerful when it comes to GIS information). 

![Pianos for Travelers website](https://schollz.com/img/pianostravel.png)

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](https://github.com/dchest/captcha) 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](https://pianos.travel)*, 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.