261 comments

[ 5.8 ms ] story [ 244 ms ] thread
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.

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 :)

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.
It's also kinda silly to do streets for something like Manhattan since it's a grid. But landmarks/businesses would work really well in any city.
In my case it covers three different villages...
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
For now, I've reduced the circle radius by 20%
A geofence matching the city limits would be great
Right now there's no backend but potentially I could have a leaderboard per geofenced city / town
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.
Thanks. For now, I've reduced the circle radius by 20%. I plan to make it adjustable in the future.
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?
Can you give me the coordinates you played in? I will review the "objects".

I can do something with the pin too. Probably not possible to snap though, no.

Thanks!

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)
The data is there but it's difficult to make everyone happy. I don't have a backend but if I did, a leaderboard per town would be nice
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?

For now, I've reduced the circle radius by 20%. I plan to make it adjustable in the future.
Agreed. I live in a densely packed urban neighborhood. There’s no way I know streets that aren’t main streets more than 1/2 mile away.

Cool concept though. This would be a nice game at many geographic magnitudes.

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.

I will fix the pin accuracy issue for sure!
Zooming right in helps, but with 100% knowledge of the answers I still got points deducted.
I'm only getting a blank background on Firefox, both Android and desktop.

Edge too, is the service just down?

Yes but it should be back now?

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.

I put my town's coordinates in manually and it's still blank, and I don't see anything zooming all the way out.

What do you mean by functions? I would just request location with javascript and use Google geolocation as a fallback.

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?

Also, why WebGL?

>Those "annoying prompts" are there for a reason

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.

OK it should be more back now. I migrated from Cloudflare functions to a Cloudflare worker. Make sure to clear your cache / hard reload though
Nice and fun. Have you considered points of interest, photos from open sources like Panoramio or Creative Commons search, links to Wikipedia articles?

Sometimes I get stumped and I also want a picture to explain it

Very interesting. No I haven't, thanks
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!

Thank you :)

This has come up so much. I'll be adding it, thanks!

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).
Thanks, will look into it!
This is now fixed! (Thanks to a contribution by johrpan)
For now, I've reduced the circle radius by 20%. I plan to make it adjustable in the future.
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.
(comment deleted)
this is an awesome idea!

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've now excluded "escalator", thanks
I was asked same street twice in 5 attempts
I will be looking into this for sure
This is now fixed! (Thanks to a contribution by johrpan)
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.
I played once and it asked me to locate the same street 3 times in one 5 question round.
Will fix this, thanks. Any further info would be helpful
This is now fixed! (Thanks to a contribution by johrpan)
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.
Thanks for the feedback! Will look into it
I can't seem to get it to my area. It's in Ireland and I can't find an option to make it go anywhere else.
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!
Oh yeah, I forgot about that. Thanks, I was worried something was broken
(comment deleted)
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.

Great feedback, thanks. I also considered factoring in street length for difficulty modes.

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

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.
For now, I've reduced the circle radius by 20%. I plan to make it adjustable in the future.
Another change i think would be helpful for beginners is ability to set the road category e.g. only guess tertiary and greater roads
Yes, +1 on this or if possible start with main roads & as you move along get more obscure ones interleaved in so the game gets harder as you play
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.

I think the OSM data is bad. Lots of street highlights dont match the correct names.

Thanks for the response.

I can look at what you are using from overpass later and see what is up with their data.

Great yeah, I was going to suggest we could contribute fixes back to OSM if that was the issue :)
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.
Glad to hear it! My older family members love it the most. Maybe because they didn't grow up with Google Maps
This worked great in my area. It was hard enough to make it fun but not too hard. I got a score above 90% so I’m stoked
Very fun! I managed a score of 450 in the area I grew up in and learned to drive in. Definitely the best case scenario for me.
This is great!

> 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/

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.
Great to hear! Thanks for the feedback. An alternative might be to make the circle draggable
I've added a marker to the centre of the circle. Thanks again
I didn't realize it was just going to be street names, and picked my area in Manhattan. The streets and avenues are numbered :)
I did the same, but got tripped up by clicking on the East side of the Island when it asked for "W 14th Street".
Would be cool if bars, restaurants and tourist attractions were added! But a fun little geoguessr like romp either way.
Thanks for the feedback! Will look into it
Yessss, this is what I imagined from the headline. But I suspect the data quality is trash...
Fun, but you know what would be really cool ?

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

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.

I am missing something. It started me in Ireland - I am in North America
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. Using Firefox on Windows laptop, FYI.
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
I was also started in Cork in-game, while this link showed me the right location.

I think your integration may have a bug?

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

Submitted lino includes hardcoded location, maybe that's what's tripping people up?
That's it!

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

What you get if you live in the boonies:

"There aren't enough streets in this area. Please select somewhere else"

Yeah. Someone did ask today to be able to increase the circle's radius for cases like this
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.

> quizzing me on park trails

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.

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.
Title: s/area/street names/

Was already wondering how this game was going to work, like geoguessr maybe?

Still fun though! Just not what I expected from the name.

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.
Living in Manhattan is a cheat code for this
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.

Now you know more about your local area!
No I don't, I said I live next door to it, so I knew it.
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
Love this! Works great on mobile. Awesome idea.
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!
Oooo.

Longer roads should score more points because they're more important / you're a bigger idiot for missing them? ;)

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.
Definitely considering this btw but it might need to be a setting
475/500 in Brooklyn, which I will consider a total success. Neat game!
This is a fun game!

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.