Inspiration
City walking guides are the same for everyone: the same landmarks, in the same order, read from the same script. A local friend would notice what you like on the way and change the plan. I wanted a guide that does exactly that. Qloo's taste graph is the missing piece: it knows which places people with a given taste like.
What it does
- You walk (or tap Demo), and the guide talks to you the whole way:
- the place you're passing (Qloo);
- the story of the street (Wikipedia, read as is);
- food tips for tonight, weather, turns;
- photo zones (Qloo places tagged for views and photography).
- Every line says where it came from (Qloo, Wikipedia or TasteWalk).
- At each stop you tap Go or Skip. A Go is answered right away: "people with that taste also like Y, 340 m from here."
- For you builds a whole new walk, ranked by Qloo for the places you said Go to.
- Trip list:
- search a place you want to see;
- a detour of 15 min or less joins today's walk; a longer one is saved;
- when you later walk within 300 m of a saved place, the guide adds it to the walk by itself;
- or type a wish instead of a name ("cozy coffee"): Qloo matches your words to its own tags, and the app shows 3 places near you.
- Snap & post: at photo zones the guide asks you to take a picture.
- It writes a title and tap-to-pick hashtags: the words people use most about the place (Qloo review keywords), plus the weather.
- The photo never leaves the phone.
How it learns your taste
There is no form and no account. Every Go you tap is a signal.
- Your Go's are kept on your phone.
- The last five places you loved are sent to Qloo as
signal.interests.entities. - Qloo answers with what people who love the same things also love, inside your area. Those answers become the "also like" suggestions and the For you ranking.
- Skips are saved on the device but are not sent to Qloo.
From taste to business value
TasteWalk is meant to be more than a hackathon demo. Every walk is also a record of real taste in a real place.
- Collection (built): if the walker says yes, the app records which places they Go to or skip, where they take a photo, and how long they stay at each stop.
- It is off by default.
- No name and no coordinates are sent, only a random id made on the phone.
- "Delete my data" removes the walker's rows.
- Rows are stored in Supabase (EU, Frankfurt); the table accepts inserts only and can't be read through the public API.
- Analysis (next): combine these choices with Qloo's taste data, per area and per kind of place.
- Business value (the goal): show places and cities what walkers actually choose, photograph and stay at, and which taste groups they come from. That is the kind of evidence that guides programming, marketing and new routes.
Why it's agentic
Once you start a walk, it decides and acts on its own, without being asked each time. It watches your GPS position, the time, the weather and your taps. It uses its tools (Qloo Insights, search and find_tags, OSRM walking routes, Wikipedia, Open-Meteo, ElevenLabs) to:
- decide what to say and when: a passing place, local history, a food tip, a turn, a photo zone, or nothing;
- learn from your taps: after every Go it asks Qloo for similar places and offers the nearest one;
- add a saved place to the walk by itself when you get within 300 m of it;
- re-plan the rest of the route when you reach stops out of order or start somewhere else, and point you back when you wander off the route;
- decide whether a place fits today: 15 min of detour or less joins the walk, longer is saved for later.
Every decision is a rule over Qloo's data, not a language model.
How we built it
- Qloo: called through the
qloo apiCLI from@qloo/qloo-harness, only from a Node server, never from the browser. It uses:- Insights with a location point and radius, for the walks and nearby places;
signal.interests.entitiesfor For you and "also like";searchfor the Trip list;find_tags+ Insightsfilter.tagsfor Trip wishes.
- Server: keeps only what the app shows, filters out hotels, stations and everyday shops, and caches in memory (never on disk).
- Map: MapLibre + OpenFreeMap with 3D buildings and a three.js walker.
- Routes: FOSSGIS OSRM (foot).
- Voice: ElevenLabs, with the device's voice as fallback.
- Hosting: one Docker container on Render. Keys are host secrets only.
- Testing: 100 scripted scenarios in a headless browser with GPS emulation.
Challenges we ran into
- Tag signals vs entity signals: for places, tag signals gave flat, unrelated results in my tests, while entity signals gave sharp rankings. So the taste loop is built on the places you Go to.
- Coordinates: the high-level harness workflows dropped lat/lon, which a map needs. The raw
qloo api insightsoutput keeps them. - Speed: a CLI process per uncached call takes seconds. The app asks Qloo while the map loads, caches results, and falls back to OpenStreetMap places if Qloo doesn't answer.
- Honest wording: affinity is aggregate taste data, not a prediction about one person, and the app says so next to every suggestion.
Accomplishments that we're proud of
- A walk that changes with your taps: one Go on the TV Tower, and the For you walk becomes a different route.
- GPS edge cases handled: starting anywhere in the area, stops reached out of order, jumpy fixes ignored, off-route and back-on-route notices.
What we learned
Qloo is strongest as a ranking layer over real places. Give it the places someone liked and an area, and it orders the area for that taste.
What's next for TasteWalk Berlin
- More cities.
- Berlin is the demo city. Its settings live in one config file (
js/city.js), and one script builds the map data for a new area. - A few guide lines still name Berlin and need to move into that file.
- Berlin is the demo city. Its settings live in one config file (
- A native app (iOS/Android): keep guiding with the screen off, and post straight into Instagram. A web page can do neither.
- Show walkers their own travel and food style from their Go/Skip history, on the device only.
- "Hidden gems": high affinity, low popularity.
- Taste analytics: turn the opt-in walk data into per-area reports of what walkers choose, photograph and stay at.
Built With
- docker
- elevenlabs
- geolocation-api
- javascript
- maplibre
- node.js
- open-meteo
- openstreetmap
- osrm
- qloo
- qloo-harness
- render
- three.js
- web-speech-api
- wikipedia
Log in or sign up for Devpost to join the conversation.