Hi HN, I made Back Of Your Hand, a map-based game where you're given random street names and you have to locate them on the map. You can play solo or compete with friends on other devices.
I made it for my dad as a Christmas present. It also gave me an opportunity to learn about geocoding, etc.
Tech: serverless, Leaflet, Turf, Svelte, TypeScript, Cloudflare pages. I tried to use as many open / free tools as I could. I originally used map tiles from OpenStreetMap but they were discontinued so it uses Mapbox and Maptiler now.
The circle is a bit large as in larger than a single neighborhood for my city. I feel like the game is useful when it asks you how well you know a single neighborhood. It’s less interesting when it asks you how well you know 2.5 neighborhoods.
Thanks for the feedback. I'm considering adding difficulty modes or a way to change the radius. I'd rather that people wouldn't get a perfect score too easily though
I think it’s more important for the game to be meaningful than difficult. How well do you know a neighborhood is deeply meaningful. How well do you know 2.5 neighborhoods isn’t. I’d strongly recommend sacrificing difficulty for meaning here.
This is relative to the density of where you are playing. The default radius out in rural areas doesn't have enough roads, for example. A customizable radius or geofence sounds appealing.
I agree (and what you want out of the game). I wonder is there a "number of streets" which is a better sweet spot / a better default, rather than a radius
It’s def a good positive reinforcement to give people a good feeling that they know their own neighborhood.
Having the next 1.5 neighborhood is also valuable: if you live so close, it’s not a stretch to go learn the neighboring neighborhood (in fact, why not!?).
There maybe a level of “insult” (you don’t really know your ‘hood outside of the 5 streets), but used positively, I think the game is great.
I want to chime in as well to say I felt the circle was too large, I know districts in cities vary in size a lot but, but the game covered ~6 with mine in the middle. Checking the village I grew up in also covered the edges of three towns around it and a neighboring village.
I enjoyed it! worked reasonably well for the city I tried. I did have a few nitpicks, but they are mostly datasource related as opposed to anything you can control - the several rounds i played included a pedway system, several walking trails, and a private driveway. Only change I might suggest making is the radius of the pin - getting a 99/100 for being 6m off because the pin didnt go exactly where I thought it was. Or is there any way for the pin to snap to an object?
I think it would be useful to use actual boundries of villages or neighbourhoods instead of circles. Not sure how difficult that is.
(the required data is in OSM, at least in germany)
I think a difference with Wordle is that we're playing different neighborhoods and different streets every day, so a "cheated" perfect score would have little meaning. And I think when people share their Wordle results, it's often a "wow, I lucked out on that guess" or "phew, almost didn't get it".
Perhaps the ability to choose the sample area could be based on the zoom level and hidden under a settings cog?
Dropping a pin close enough on mobile to get 100 points was really difficult. I probably was only able to average like 12m accuracy even though the pin appeared to be in the correct place every time.
I also did my area twice and around 6/10 were either numbered or major roads that are very easy to ID. It might make sense to deemphasize larger or longer roads and numbered roads for a better balance of true local knowledge.
My hosting provider (Cloudflare Pages) seem to have a limit on "functions" I cannot increase. I've worked around it for now but it might open at Cork for everyone. If so, you can zoom out and tap the map to select somewhere else.
OK I'm done with fighting fires for now and can answer that last question. Cloudflare offer "functions" and "workers", they're like functions that run on the edge CDN nodes.
These functions receive geolocation information via a function argument. So I've a function that intercepts requests to the app, grabs the geolocation information, and rewrites the URL (inserting the coordinates e.g. /lat,lng).
I go into more detail about this in the blog post but originally it just opened in Cork for everyone. I disliked the idea of having an annoying browser prompt for location permissions. I made it for my dad so having no geolocation was fine to begin with and I eventually added the geolocation I described above. Less friction, no extra client-side requests.
Those "annoying prompts" are there for a reason. How do you justify ignoring the users' wishes with regards to accessing personally identifiable information?
Yep, but not worth ruining the UX for marginally better geolocation in my case.
> How do you justify ignoring the users' wishes with regards to accessing personally identifiable information?
I don't know what you're referring to. If you're suggesting I'd prefer that apps & sites could access our location without asking, you're mistaken.
>Also, why WebGL?
The no-streets OSM raster map tiles were discontinued and I had to switch to custom Maptiler layers. They don't allow raster map tiles on the free plan.
how does this get my location? I use a Cloudflare WARP+ which seems to mask my IP for most sites but this one looks like it’s using a nearby cell tower?
I don't know exactly but I use the geolocation information Cloudflare gives me in my edge function/worker. It's not 100% accurate or reliable. Your result can vary minutes apart or depending on which network you're on.
First of all: it's really cool and fun! Congratulations!
As a small feedback: adjustable radius would be more fun. For example in the town were I had my childhood, this area is too big and takes other neighbourhood/cities that I don't know, but for where I live now it fits great.
Again, nice job and congratulations for making it!
Another thing is that it seems you are sampling with replacement. I placed a circle in a rural area (where I grew up) and in one round I got the same street for 3/5 of the selections (and there were 10+ streets within the radius).
I found the game easy in an urban area where I've lived for only three years, but impossible in the rural area where I grew up. It seems to pick main roads in urban areas but in rural areas I get random side roads and cul-de-sacs. The circle should be much bigger in rural areas because people typically drive longer distances. Most of the roads I actually used were outside the circle.
only bit of feedback I have is that the street names may need some cleanup / filtering of some kind.
I picked a starting location in downtown Seattle (47.60882,-122.33087) and was told to locate "escalator"...it seems to have picked the escalator to the Pioneer Square light rail station as a "street" to be located.
I would suggest using intersections instead of streets. I'm not sure how it determines what segment of the street is correct, but I had some random guesses score higher than the correct street I knew but a part that wasn't highlighted in the result set.
Fun game, great job, but sometimes the scoring seems kind of random, I would sometimes get ~80 points when placing it pretty much directly on the street, and then sometimes get 90 points when guessing and being a few blocks away...
Along with what you mentioned about having different difficulties in terms of radius, would also be fun to be able to choose the difficulty in terms of what types of streets (main streets vs side streets - e.g. only one type, or a mix, or turning down the selection of numbered streets somehow)
This is really cool! Could be a great training tool for first responders sitting around the firehouse waiting for a call. FFs/EMTs enjoy any chance to earn bragging rights over each other.
Neat. Unfortunately appears to be limited to streets in your local area. I hoped/expected a list of interesting destinations in the area such as art installations, parks, or even popular restaurants etc.
Hey Patrick, there are buttons to zoom in & out in the top right of the map. You can then click/tap on any town / anywhere on the map to set the location.
And it'll remember that location next time.
(You can also click and drag the map to move around)
On iOS, the two finger manipulations (drag and pinch zoom) worked very well, then a single tap to place the game area. I was pleased at how fluid the map manipulation was; nice work!
This is crazy hard it covers my whole city and parts of the metropolitan area. I guess you will have to play this a lot to get any good at it if you are living in a medium sized city in central Europe. :)
Edit: I think you should be able to make the radius a little bit smaller or add an option to choose from different radii.
There's a tiny distance between this game and actual mnemonic techniques used by world champion memory athletes. Method of loci capitalizes on the fact that the brain stores memories using a map like structure, as a result of grid cells.
If you can, get a cabby in London with "The Knowledge" to do a session. Such cabbies are among elite humans, of a handful of disciplines known to alter the structure of their brains in a predictable way. Like Shaolin monks, Australian aboriginal shamans, and others, they've got an amazing superpower.
Neat game, and fascinating peripheral subjects, thanks!
Fascinating, thanks! I knew of memory palaces but I hadn't considered taxi drivers! Can't wait to tell my dad someone on the internet said he's a genius :P
Also, your dad is 99% of the way to having an enormous "memory palace" if he's got all of Cork memorized. All he needs to do is imagine a walk between any two points in Cork, then imagine the things he wants to remember at different places along that journey, such as at every intersection. To recall, simply imagine repeating the journey, and the remembered items will be at the intersections. Digits of pi or the order of a deck of cards are a good way to test it, and the cards bit is great for pub tricks and free beers.
The streets in my town were not completely highlighted and counted off points. I assume that is an issue with how the shape is interpreted because the street name changes in a turn that isnt a clear intersection.
If you could give me an example, I'll look into it.
I ran into issues like this with a strange streets (described here https://adamlynch.com/back-of-your-hand/#the-lioscarrig-driv...), so I consider any two streets with the same name in the OpenStreetMap data to be the same street. I.e. if you put a marker down near any of them, you get points.
However, if the section of road has a different name, then it's different.
This is fantastic. My gf and I have been playing it in a cafe, and doing abysmally - but just sent it to our parents who will greatly enjoy quizzing themselves! Thanks, you've made our day a little bit funner and help keep our families a little bit closer.
I'll look into this. Since I wrote that initially, the no-streets OSM map was discontinued so I switched to Mapbox & Maptiler. But I do use two full layers (one custom one without street names) rather than doing what you suggest. Hopefully it's not a paid feature.
adam, I loved this and also shared it in my family WhatsApp group. we all had a lot of fun playing it, thanks for the great idea and execution!
one minor suggestion: consider adding a cross or some other indicator at the circle of the screen during the map selection stage. I found that sometimes you want to move the circle a few metres in some direction, but it's difficult to guess/tap where the new center should be without knowing exactly where the current one is.
For those unfamiliar Blue Book refers to test "runs" done by London taxi drivers when they do The Knowledge[1].
It would be fun to be given, say "Australian High Commission, WC2 to Paddington Station, W2" and have to place multiple pins on the map and then graded on your result.
So is the goal is to mark the route you would take? Sounds interesting.
Semi-related, it could show you two pins and ask you how long it would take to drive between them at a given time of day. It would compare your guess to Google Maps or similar.
> So is the goal is to mark the route you would take? Sounds interesting.
Basically yes, the Blue Book works on turns so you would mark the turns.
So for the example I gave above (Australian High Commission - Paddington) you might mark the turns:
ALDWYCH
CATHERINE ST
RUSSELL STREET
DRURY LANE
HIGH HOLBORN
PRINCES CIRCUS
ST GILES HIGH STREET
EARNSHAW STREET
NEW OXFORD STREET
OXFORD STREET
GT PORTLAND STREET
MARGARET STREET
CAVENDISH SQUARE
HENRIETTA PLACE
MARYLEBONE LANE
WIGMORE STREET
DUKE STREET
MANCHESTER SQUARE
MANCHESTER STREET
GEORGE STREET
EDGWARE ROAD
HARROW ROAD
HARROW ROAD ROUNDABOUT
BISHOP'S BRIDGE
> between them at a given time of day
Yes, I guess it could give you extra points for choosing less busy routes during rush hour.
It must not have been able to detect where you are located. You can zoom out and click/tap the map to choose the location. And it'll remember that location next time.
It defaults to Ireland in this case because I'm Irish.
Thanks. It's a third-party server-side API I use so it would be just based on your ID address I think. You can go here to see where it thinks you are: https://cloudflare-pages-geolocation.pages.dev. However, this can change if you reload it minutes apart or if you turn on/off WiFi, etc. It's not 100% reliable
Maybe. It uses the geolocation information Cloudflare provides. In general, it isn't extremely accurate and it doesn't always return the same location, so this doesn't surprise me too much.
If it consistently works in one and not the other (at the same point in time), then the only difference I can think of is that Back Of Your Hand uses their "edge handlers" / "functions" and I made that other URL with their "workers". Hmm.
---
Maybe I could inform the user somehow when it cannot find a location at all. I really want to avoid a browser popup asking for the user's location though
I could've sworn I made sure not to include it when submitting. It does redirect to that if there's no location found so maybe HN updated the link to the redirect destination?
I'm pushing a change now to ignore this specific lat-lng combination and fallback to geolocation
I failed completely because in my selection (US: Boston/Cambridge) there are multiple streets with the same name like Broadway and First Street, and I always picked the wrong one.
If they have exactly the same name then you should've gotten points. If so, please give me an example and I'll fix it. If it was "Roxbury St" versus "Roxbury Ave", then you're just unlucky sorry
Yeah, this is killing me. NORTH WOODWARD AVE turns into WOODWARD AVE turns into NORTH WOODWARD AVE turns into SOUTH WOODWARD AVE turns into WOODWARD AVE turns into NORTH WOODWARD AVE completely at random, and none of them count as each other. And sometimes multiple parts of the same road show up in the same quiz.
I know this is fundamentally an OSM data problem, but it's also your UX problem now. (N 42.5, W 83.17 if you want to have a look.)
Also it was quizzing me on park trails. And I just got an underwater tunnel at the zoo. I guess those are technically named ways in some manner of speaking, but they're definitely not streets with signs.
All that aside, this is really fun! Personal best 470/500. I wish I could make it longer; n=5 is a small sample and my scores vary tremendously from one run to the next.
Yeah, I figured out it was a park trail, clicked in the middle of the only park in the area with substantial trails, and actually scored very well on it. But the zoo exhibit...
All the different variations of names of the same road definitely made the game too frustrating to play much in my area. Simply counting all names that are only different by cardinal direction as the same name would solve it. I imagine in some places though this would be the wrong behavior.
This would be actually helpful practice for first responders. FDs/EMS in my area are expected to memorize all of the streets in their region, and I imagine it’s the same for PDs too. Another layer on top of it would be to quiz you on how to get from a fixed point (the station) to a random intersection. For the US, you could also provide a random block on a street rather than an intersection.
Depends on what you're looking for but I think this would be more fun if it excluded very tiny streets, like minimum length. I got what is essentially a driveway for two houses that's not paved or labeled, nobody would know it's name (or that it was a named street even) unless you lived on it or next door to it. (I live next door to it). Might be less fun if someone got that on their first try.
But, again, some people are looking for a challenge, so maybe make it an option.
It's interesting seeing so many different opinions on the difficulty (whether it's street length, circle radius, etc). I wonder would the same people's opinions on GeoGuessr correlate or not
Thanks. I'm glad to hear that because I put effort into mobile. I thought it would be my older family members that would like it the most and use it on phones or tablets (I was right)
I basically failed because almost all of the selections were random tiny roads in subdivisions (thanks Atlanta sprawl). Got all the roads with thru traffic though!
Same area. There's a hundred or more tiny subdivision roads for every major road. It would be better to omit roads under a certain length entirely since it's not reasonable for someone to know all the roads in a subdivision they never have a reason to visit.
I tried 2 areas: where I live today and where I delivered pizzas 20 years ago.
3/5 for my local area, 5/5 for my old stomping grounds. I’m no London taxi driver, but I do have a bit of Knowledge about my old neighborhood. We didn’t have GPS back then and we liked it!
The size of the circle was perfect. Just large enough to challenge, but not so large that random tiny streets miles away trip the player up.
261 comments
[ 5.8 ms ] story [ 244 ms ] threadI made it for my dad as a Christmas present. It also gave me an opportunity to learn about geocoding, etc.
Tech: serverless, Leaflet, Turf, Svelte, TypeScript, Cloudflare pages. I tried to use as many open / free tools as I could. I originally used map tiles from OpenStreetMap but they were discontinued so it uses Mapbox and Maptiler now.
Questions / feedback welcome. I also wrote a blog post with more information: https://adamlynch.com/back-of-your-hand. The code: https://github.com/adam-lynch/back-of-your-hand
Warning: it’s pretty difficult, unless your streets are numbered :)
Having the next 1.5 neighborhood is also valuable: if you live so close, it’s not a stretch to go learn the neighboring neighborhood (in fact, why not!?).
There maybe a level of “insult” (you don’t really know your ‘hood outside of the 5 streets), but used positively, I think the game is great.
I can do something with the pin too. Probably not possible to snap though, no.
Thanks!
Here's the osm for the pedway object, labelled a footpath. https://www.openstreetmap.org/relation/11909462
Here's one of the trails: https://www.openstreetmap.org/way/511807176
Perhaps the ability to choose the sample area could be based on the zoom level and hidden under a settings cog?
Cool concept though. This would be a nice game at many geographic magnitudes.
I also did my area twice and around 6/10 were either numbered or major roads that are very easy to ID. It might make sense to deemphasize larger or longer roads and numbered roads for a better balance of true local knowledge.
Edge too, is the service just down?
My hosting provider (Cloudflare Pages) seem to have a limit on "functions" I cannot increase. I've worked around it for now but it might open at Cork for everyone. If so, you can zoom out and tap the map to select somewhere else.
What do you mean by functions? I would just request location with javascript and use Google geolocation as a fallback.
These functions receive geolocation information via a function argument. So I've a function that intercepts requests to the app, grabs the geolocation information, and rewrites the URL (inserting the coordinates e.g. /lat,lng).
I go into more detail about this in the blog post but originally it just opened in Cork for everyone. I disliked the idea of having an annoying browser prompt for location permissions. I made it for my dad so having no geolocation was fine to begin with and I eventually added the geolocation I described above. Less friction, no extra client-side requests.
Also, why WebGL?
Yep, but not worth ruining the UX for marginally better geolocation in my case.
> How do you justify ignoring the users' wishes with regards to accessing personally identifiable information?
I don't know what you're referring to. If you're suggesting I'd prefer that apps & sites could access our location without asking, you're mistaken.
>Also, why WebGL?
The no-streets OSM raster map tiles were discontinued and I had to switch to custom Maptiler layers. They don't allow raster map tiles on the free plan.
Sometimes I get stumped and I also want a picture to explain it
As a small feedback: adjustable radius would be more fun. For example in the town were I had my childhood, this area is too big and takes other neighbourhood/cities that I don't know, but for where I live now it fits great.
Again, nice job and congratulations for making it!
This has come up so much. I'll be adding it, thanks!
only bit of feedback I have is that the street names may need some cleanup / filtering of some kind.
I picked a starting location in downtown Seattle (47.60882,-122.33087) and was told to locate "escalator"...it seems to have picked the escalator to the Pioneer Square light rail station as a "street" to be located.
Along with what you mentioned about having different difficulties in terms of radius, would also be fun to be able to choose the difficulty in terms of what types of streets (main streets vs side streets - e.g. only one type, or a mix, or turning down the selection of numbered streets somehow)
And it'll remember that location next time.
(You can also click and drag the map to move around)
Edit: I think you should be able to make the radius a little bit smaller or add an option to choose from different radii.
My dad has gotten a perfect score a couple of times. Cork isn't huge but that's still very difficult. He's a human map
If you can, get a cabby in London with "The Knowledge" to do a session. Such cabbies are among elite humans, of a handful of disciplines known to alter the structure of their brains in a predictable way. Like Shaolin monks, Australian aboriginal shamans, and others, they've got an amazing superpower.
Neat game, and fascinating peripheral subjects, thanks!
I ran into issues like this with a strange streets (described here https://adamlynch.com/back-of-your-hand/#the-lioscarrig-driv...), so I consider any two streets with the same name in the OpenStreetMap data to be the same street. I.e. if you put a marker down near any of them, you get points.
However, if the section of road has a different name, then it's different.
Thanks for the response.
I can look at what you are using from overpass later and see what is up with their data.
> The map tiles are loaded in from two OpenStreetMap tile providers (one with street names, one without).
You probably don't need to do that. You can use the same tiles, the same stylesheet even, and just hide the street names layer in code:
https://docs.mapbox.com/mapbox-gl-js/example/toggle-layers/
A Blue Book mode.
For those unfamiliar Blue Book refers to test "runs" done by London taxi drivers when they do The Knowledge[1].
It would be fun to be given, say "Australian High Commission, WC2 to Paddington Station, W2" and have to place multiple pins on the map and then graded on your result.
[1] https://www.youtube.com/watch?v=my4lDxOCCyg
Semi-related, it could show you two pins and ask you how long it would take to drive between them at a given time of day. It would compare your guess to Google Maps or similar.
Basically yes, the Blue Book works on turns so you would mark the turns.
So for the example I gave above (Australian High Commission - Paddington) you might mark the turns:
> between them at a given time of dayYes, I guess it could give you extra points for choosing less busy routes during rush hour.
It defaults to Ireland in this case because I'm Irish.
I think your integration may have a bug?
If it consistently works in one and not the other (at the same point in time), then the only difference I can think of is that Back Of Your Hand uses their "edge handlers" / "functions" and I made that other URL with their "workers". Hmm.
---
Maybe I could inform the user somehow when it cannot find a location at all. I really want to avoid a browser popup asking for the user's location though
I could've sworn I made sure not to include it when submitting. It does redirect to that if there's no location found so maybe HN updated the link to the redirect destination?
I'm pushing a change now to ignore this specific lat-lng combination and fallback to geolocation
https://github.com/adam-lynch/back-of-your-hand/issues/15
"There aren't enough streets in this area. Please select somewhere else"
I know this is fundamentally an OSM data problem, but it's also your UX problem now. (N 42.5, W 83.17 if you want to have a look.)
Also it was quizzing me on park trails. And I just got an underwater tunnel at the zoo. I guess those are technically named ways in some manner of speaking, but they're definitely not streets with signs.
All that aside, this is really fun! Personal best 470/500. I wish I could make it longer; n=5 is a small sample and my scores vary tremendously from one run to the next.
I got one of those too, but I liked it. Nice to explore the major bike/pedestrian paths.
I guess it could be an option.
Was already wondering how this game was going to work, like geoguessr maybe?
Still fun though! Just not what I expected from the name.
But, again, some people are looking for a challenge, so maybe make it an option.
Longer roads should score more points because they're more important / you're a bigger idiot for missing them? ;)
I tried 2 areas: where I live today and where I delivered pizzas 20 years ago.
3/5 for my local area, 5/5 for my old stomping grounds. I’m no London taxi driver, but I do have a bit of Knowledge about my old neighborhood. We didn’t have GPS back then and we liked it!
The size of the circle was perfect. Just large enough to challenge, but not so large that random tiny streets miles away trip the player up.