I couldn’t find anything that fully did what I was after so I built mappy (besides I need the JavaScript practice!).
In short it provides the following: